Dist-Zilla-Plugin-Bencher-Scenario
view release on metacpan or search on metacpan
lib/Dist/Zilla/Plugin/Bencher/Scenario.pm view on Meta::CPAN
'Dist::Zilla::Role::PrereqSource',
);
# either provide filename or filename+filecontent
sub _get_abstract_from_scenario {
my ($self, $filename, $filecontent) = @_;
local @INC = @INC;
unshift @INC, 'lib';
unless (defined $filecontent) {
$filecontent = do {
open my($fh), "<", $filename or die "Can't open $filename: $!";
local $/;
~~<$fh>;
};
}
unless ($filecontent =~ m{^#[ \t]*ABSTRACT:[ \t]*([^\n]*)[ \t]*$}m) {
$self->log_debug(["Skipping %s: no # ABSTRACT", $filename]);
return undef;
}
my $abstract = $1;
if ($abstract =~ /\S/) {
$self->log_debug(["Skipping %s: Abstract already filled (%s)", $filename, $abstract]);
return $abstract;
}
$self->log_debug(["Getting abstract for module %s", $filename]);
my $pkg;
if (!defined($filecontent)) {
(my $mod_p = $filename) =~ s!^lib/!!;
require $mod_p;
# find out the package of the file
($pkg = $mod_p) =~ s/\.pm\z//; $pkg =~ s!/!::!g;
} else {
eval $filecontent;
die if $@;
if ($filecontent =~ /\bpackage\s+(\w+(?:::\w+)*)/s) {
$pkg = $1;
} else {
die "Can't extract package name from file content";
}
}
no strict 'refs';
my $scenario = ${"$pkg\::scenario"};
$scenario->{summary};
}
# dzil also wants to get abstract for main module to put in dist's
# META.{yml,json}
sub before_build {
my $self = shift;
my $name = $self->zilla->name;
my $class = $name; $class =~ s{ [\-] }{::}gmx;
my $filename = $self->zilla->_main_module_override ||
catfile( 'lib', split m{ [\-] }mx, "${name}.pm" );
$filename or die 'No main module specified';
-f $filename or die "Path ${filename} does not exist or not a file";
open my $fh, '<', $filename or die "File ${filename} cannot open: $!";
my $abstract = $self->_get_abstract_from_scenario($filename);
return unless $abstract;
$self->zilla->abstract($abstract);
return;
}
sub gather_files {
require Dist::Zilla::File::InMemory;
my ($self) = @_;
# add t/bench-*.t
for my $file (@{ $self->found_files }) {
next unless $file->name =~ m!\Alib/Bencher/Scenario/(.+)\.pm\z!;
my $bs_name = $1; $bs_name =~ s!/!::!g;
my $script_name = $bs_name; $script_name =~ s!::!-!g;
my $filename = "t/bench-$script_name.t";
my $filecontent = q[
#!perl
# This file was automatically generated by Dist::Zilla::Plugin::Bencher::Scenario.
use Test::More;
eval "use Bencher::Backend ].$Bencher::VERSION.q[";
plan skip_all => "Bencher::Backend ].$Bencher::VERSION.q[ required to run benchmark" if $@;
plan skip_all => "EXTENDED_TESTING not turned on" unless $ENV{EXTENDED_TESTING};
diag explain Bencher::Backend::bencher(action=>'bench', return_meta=>1, scenario_module=>'].$bs_name.q[');
ok 1;
done_testing();
];
$self->log(["Adding %s ...", $filename]);
$self->add_file(
Dist::Zilla::File::InMemory->new({
name => $filename,
content => $filecontent,
})
);
}
$self->zilla->register_prereqs(
{phase=>'test', type=>'requires'}, 'Bencher::Backend', $Bencher::Backend::VERSION);
}
sub munge_files {
no strict 'refs';
my $self = shift;
local @INC = ("lib", @INC);
# gather dist modules
my %distmodules;
for my $file (@{ $self->found_files }) {
( run in 0.782 second using v1.01-cache-2.11-cpan-71847e10f99 )