Move to Moo for fast bootstrapping.
[p5sagit/Devel-REPL.git] / lib / Devel / REPL / Plugin / Turtles.pm
index 8bcba92..9781cc2 100644 (file)
@@ -3,26 +3,30 @@ use Devel::REPL::Plugin;
 
 use Scalar::Util qw(reftype);
 
-use MooseX::AttributeHelpers;
-
-use namespace::clean -except => [ 'meta' ];
+use namespace::sweep;
+use MooX::Types::MooseLike::Base qw(RegexpRef ArrayRef CodeRef AnyOf);
 
 has default_command_prefix => (
-  isa => "RegexpRef",
+  isa => RegexpRef,
   is  => "rw",
+  lazy => 1,
   default => sub { qr/\#/ },
 );
 
 has turtles_matchers => (
-  metaclass => "Collection::Array",
-  isa => "ArrayRef[RegexpRef|CodeRef]",
+  isa => ArrayRef[AnyOf[RegexpRef,CodeRef]],
   is  => "rw",
-  default => sub { my $prefix = shift->default_command_prefix; [qr/^ $prefix (\w+) \s* (.*) /x] },
-  provides => {
-    unshift => "add_turtles_matcher",
+  lazy => 1,
+  default => sub {
+      my $prefix = shift->default_command_prefix; [qr/^ $prefix (\w+) \s* (.*) /x]
   },
 );
 
+sub add_turtles_matcher {
+  my $self = shift;
+  unshift @{$self->turtles_matchers}, @_;
+}
+
 around 'formatted_eval' => sub {
   my $next = shift;
   my ($self, $line, @args) = @_;
@@ -67,3 +71,26 @@ sub match_turtles {
 }
 
 1;
+
+__END__
+
+=head1 NAME
+
+Devel::REPL::Plugin::Turtles - Generic command creation using a read hook
+
+=head1 DESCRIPTION
+
+By default, this plugin allows calling commands using a read hook
+to detect a default_command_prefix followed by the command name,
+say MYCMD as an example.  The actual routine to call for the
+command is constructed by looking for subs named 'command_MYCMD'
+or 'expr_MYCMD' and executing them.
+
+=head2 NOTE
+
+The C<default_command_prefix> is C<qr/\#/> so care must be taken
+if other uses for that character are needed (e.g., '#' for the
+shell escape character in the PDL shell.
+
+=cut
+