Dist-Dzpl
view release on metacpan or search on metacpan
lib/Dist/Dzpl.pm view on Meta::CPAN
}
elsif ( -d $file ) {
my @try = qw/ dzpl dz.pl dist.pl /;
for ( map { "$file/$_" } @try ) {
-e $_ and ( $source = $_ ) and last;
}
croak "Could not find ", join( ' or ', map { "\"$_\"" } @try ), " in $file" unless $source;
}
else {
croak "Missing file";
}
croak "Could not read \"$source\"" unless -r $source;
my $dzpl = $self->_from_file_sandbox( $source );
die "Error while loading $source: $@" if $@;
return $dzpl;
}
sub _from_file_sandbox {
my $self = shift;
my $file = shift;
my $package = $file;
$package =~ s/([^A-Za-z0-9_])/sprintf("_%2x", unpack("C", $1))/eg;
return eval sprintf <<'_END_', $package;
package Dist::Dzpl::Sandbox::%s;
{
require Dzpl;
do $file;
Dzpl->dzpl_from_package( __PACKAGE__ ) or die $@;
}
_END_
}
sub from_arguments {
my $self = shift;
my $zilla = Dist::Dzpl::Parser->parse( @_ );
return __PACKAGE__->new( zilla => $zilla );
}
sub run {
my $self = shift;
my @arguments = @_;
my $zilla = $self->zilla;
# TODO This should only be run once...
$zilla->_setup_default_plugins;
return unless @arguments;
my $do = shift @arguments;
if ( $do eq 'dzil' ) {
require Dist::Zilla::App;
my $app = Dist::Zilla::App->new;
$app->{__chrome__} = $zilla->chrome;
$app->{__PACKAGE__}{zilla} = $zilla; # Cover case 1...
$app->{'Dist::Zilla::App'}{zilla} = $zilla; # ...and case 2
{
local @ARGV = @arguments;
$app->run;
}
}
else {
die "Dist::Zilla cannot do \"$do\"" unless $zilla->can( $do );
warn "Dropping arguments [@arguments]" if @arguments;
return $zilla->$do;
}
}
sub _include_plugin_bundle {
my $self = shift;
my $name = shift;
my $package = shift;
my $payload = shift;
my $filter = shift;
Class::MOP::load_class( $package );
my @bundle = $package->bundle_config({
name => $name,
zilla => $self->zilla,
payload => $payload,
});
for my $plugin ( @bundle ) {
my ( $name, $package, $payload ) = @$plugin;
next if $filter && $package =~ $filter;
$self->_include_plugin( $name, $package, $payload );
}
}
sub _include_plugin {
my $self = shift;
my $name = shift;
my $package = shift;
my $payload = shift;
Class::MOP::load_class( $package );
my @arguments;
if ( ref $payload eq 'HASH' ) {
push @arguments, payload => $payload;
}
elsif ( ref $payload eq 'ARRAY' ) {
push @arguments, @$payload;
}
elsif ( defined $payload ) {
die "Invalid payload ($payload)";
}
$self->zilla->plugins->push( $package->new(
plugin_name => $name,
zilla => $self->zilla,
@arguments,
) );
}
sub plugin {
my $self = shift;
( run in 0.819 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )