remove pointless "required" fields for attrs with defaults/builders
[p5sagit/Devel-REPL.git] / lib / Devel / REPL / Plugin / Commands.pm
index 1b43106..6f03b62 100644 (file)
@@ -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
+