our
$VERSION
=
'0.001'
;
use
Cwd
qw/:DEFAULT abs_path/
;
my
%CONFIG
= (
df_poster
=>
'HTTP::Tiny'
,
df_ddir
=>
undef
,
df_jsnfile
=>
'mktest.jsn'
,
df_qfile
=>
undef
,
df_v
=> 0,
df_ua_timeout
=>
undef
,
df_curlargs
=> [ ],
'LWP::UserAgent'
=> {
allowed
=> [
qw/ua_timeout/
],
required
=> [],
class
=>
'Test::Smoke::Poster::LWP_UserAgent'
,
},
'HTTP::Tiny'
=> {
allowed
=> [
qw/ua_timeout/
],
required
=> [],
class
=>
'Test::Smoke::Poster::HTTP_Tiny'
,
},
'curl'
=> {
allowed
=> [
qw/curlbin curlargs ua_timeout/
],
required
=> [
qw/curlbin/
],
class
=>
'Test::Smoke::Poster::Curl'
,
},
valid_type
=> {
'LWP::UserAgent'
=> 1,
'HTTP::Tiny'
=> 1,
},
general_options
=> [
qw/ddir jsnfile qfile v smokedb_url poster/
],
);
sub
new {
my
$factory
=
shift
;
my
$poster
=
shift
||
$CONFIG
{df_poster};
my
%args
=
ref
$_
[0] eq
'HASH'
? %{
$_
[0]} :
@_
;
my
%fields
=
map
{
my
$value
=
exists
$args
{
$_
} ?
$args
{
$_
} :
$CONFIG
{
"df_$_"
};
(
$_
=>
$value
)
} ( @{
$CONFIG
{general_options} }, @{
$CONFIG
{
$poster
}{allowed} } );
if
( ! file_name_is_absolute(
$fields
{ddir} ) ) {
$fields
{ddir} = catdir( abs_path(),
$fields
{ddir} );
}
$fields
{ddir} = rel2abs(
$fields
{ddir}, abs_path() );
$fields
{poster} =
$poster
;
my
@missing
;
for
my
$required
(@{
$CONFIG
{
$poster
}{required} }) {
push
(
@missing
,
"option '$required' missing for '$CONFIG{$poster}{class}'"
)
if
!
defined
$fields
{
$required
};
}
if
(
@missing
) {
croak(
"Missing option:\n\t"
,
join
(
"\n\t"
,
@missing
));
}
my
$class
=
$CONFIG
{
$poster
}{class};
return
$class
->new(
%fields
);
}
1;