make "perl -c script/re.pl" not start up the REPL
[p5sagit/Devel-REPL.git] / lib / Devel / REPL / Plugin / Commands.pm
index 1b43106..4f99734 100644 (file)
@@ -1,18 +1,21 @@
+use strict;
+use warnings;
 package Devel::REPL::Plugin::Commands;
 
 use Devel::REPL::Plugin;
 use Scalar::Util qw(weaken);
 
-use namespace::clean -except => [ 'meta' ];
-use vars qw($COMMAND_INSTALLER);
+use namespace::autoclean;
+our $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 +29,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 +65,12 @@ around 'compile' => sub {
 };
 
 1;
+
+__END__
+
+=head1 NAME
+
+Devel::REPL::Plugin::Commands - Generic command creation plugin using injected functions
+
+=cut
+