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) = @_;
}
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
+