App-Wallflower
view release on metacpan or search on metacpan
lib/App/Wallflower.pm view on Meta::CPAN
sub _default_options {
return (
follow => 1,
environment => 'deployment',
host => ['localhost'],
verbose => 1,
errors => 1,
);
}
# [ activating option, coderef ]
my @callbacks = (
[
errors => sub {
my ( $url, $response ) = @_;
my ( $status, $headers, $file ) = @$response;
return if $status == 200;
if ( $status == 301 ) {
my $i = 0;
$i += 2
while $i < @$headers && lc( $headers->[$i] ) ne 'location';
printf "$status %s -> %s\n", $url->path, $headers->[ $i + 1 ] || '?';
}
else {
printf "$status %s\n", $url->path;
}
},
],
[
verbose => sub {
my ( $url, $response ) = @_;
my ( $status, $headers, $file ) = @$response;
return if $status != 200;
printf "$status %s%s\n", $url->path,
$file && " => $file [${\-s $file}]";
},
],
[
tap => sub {
my ( $url, $response ) = @_;
my ( $status, $headers, $file ) = @$response;
if ( $status == 301 ) {
my $i = 0;
$i += 2
while $i < @$headers && lc( $headers->[$i] ) ne 'location';
note( "$url => " . ( $headers->[ $i + 1 ] || '?' ) );
}
elsif ( $status == 304 ) {
SKIP: { skip( $url, 1 ); }
}
else {
is( $status, 200, $url->path );
}
},
],
);
sub new_with_options {
my ( $class, $args ) = @_;
my $input = (caller)[1];
$args ||= [];
# save previous configuration
my $save = Getopt::Long::Configure();
# ensure we use Getopt::Long's default configuration
Getopt::Long::ConfigDefaults();
# get the command-line options (modifies $args)
my %option = _default_options();
GetOptionsFromArray(
$args, \%option,
'application=s', 'destination|directory=s',
'index=s', 'environment=s',
'follow!', 'filter|files|F',
'quiet', 'include|INC=s@',
'verbose!', 'errors!', 'tap!',
'host=s@',
'url|uri=s',
'parallel=i',
'help', 'manual',
'tutorial', 'version',
) or pod2usage(
-input => $input,
-verbose => 1,
-exitval => 2,
);
# restore Getopt::Long configuration
Getopt::Long::Configure($save);
# simple on-line help
pod2usage( -verbose => 1, -input => $input ) if $option{help};
pod2usage( -verbose => 2, -input => $input ) if $option{manual};
pod2usage(
-verbose => 2,
-input => do {
require Pod::Find;
Pod::Find::pod_where( { -inc => 1 }, 'Wallflower::Tutorial' );
},
) if $option{tutorial};
print "wallflower version $Wallflower::VERSION\n" and exit
if $option{version};
# application is required
pod2usage(
-input => $input,
-verbose => 1,
-exitval => 2,
-message => 'Missing required option: application'
) if !exists $option{application};
# create the object
return $class->new(
option => \%option,
args => $args,
);
}
( run in 2.546 seconds using v1.01-cache-2.11-cpan-b301d465b3d )