X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FDevel-REPL.git;a=blobdiff_plain;f=lib%2FDevel%2FREPL%2FPlugin%2FCommands.pm;h=6f03b62e1bd25798d825b2858433686c3ad5eb37;hp=1b43106ab53b280934d43b78b7eff9e252a0b1a0;hb=b595a818b1d89dbea55ace1af86d0df91c97ba0c;hpb=4d33251a9f6d375aaafd8aa274743c68dec8f720 diff --git a/lib/Devel/REPL/Plugin/Commands.pm b/lib/Devel/REPL/Plugin/Commands.pm index 1b43106..6f03b62 100644 --- a/lib/Devel/REPL/Plugin/Commands.pm +++ b/lib/Devel/REPL/Plugin/Commands.pm @@ -3,16 +3,17 @@ package Devel::REPL::Plugin::Commands; use Devel::REPL::Plugin; use Scalar::Util qw(weaken); -use namespace::clean -except => [ 'meta' ]; +use namespace::autoclean; use vars qw($COMMAND_INSTALLER); has 'command_set' => ( - is => 'ro', required => 1, + is => 'ro', lazy => 1, default => sub { {} } ); sub BEFORE_PLUGIN { my ($self) = @_; + $self->load_plugin('Packages'); unless ($self->can('setup_commands')) { $self->meta->add_method('setup_commands' => sub {}); } @@ -26,18 +27,24 @@ sub AFTER_PLUGIN { after 'setup_commands' => sub { my ($self) = @_; weaken($self); - $self->command_set->{load_plugin} = sub { $self->load_plugin(@_); }; + $self->command_set->{load_plugin} = sub { + my $self = shift; + sub { $self->load_plugin(@_); }; + }; }; sub command_installer { my ($self) = @_; - my %command_set = %{$self->command_set}; + my $command_set = $self->command_set; + my %command_subs = map { + ($_ => $command_set->{$_}->($self)); + } keys %$command_set; return sub { my $package = shift; - foreach my $command (keys %command_set) { + foreach my $command (keys %command_subs) { no strict 'refs'; no warnings 'redefine'; - *{"${package}::${command}"} = $command_set{$command}; + *{"${package}::${command}"} = $command_subs{$command}; } }; } @@ -56,3 +63,12 @@ around 'compile' => sub { }; 1; + +__END__ + +=head1 NAME + +Devel::REPL::Plugin::Commands - Generic command creation plugin using injected functions + +=cut +