Move to Moo for fast bootstrapping.
[p5sagit/Devel-REPL.git] / lib / Devel / REPL / Plugin / Nopaste.pm
index e8baa53..dcf83c4 100644 (file)
@@ -1,9 +1,9 @@
 package Devel::REPL::Plugin::Nopaste;
 
 use Devel::REPL::Plugin;
-use MooseX::AttributeHelpers;
-use namespace::clean -except => [ 'meta' ];
+use namespace::sweep;
 use Scalar::Util qw(blessed);
+use MooX::Types::MooseLike::Base qw(Str);
 
 sub BEFORE_PLUGIN {
     my $self = shift;
@@ -11,30 +11,41 @@ sub BEFORE_PLUGIN {
 }
 
 has complete_session => (
-    metaclass => 'String',
     is        => 'rw',
-    isa       => 'Str',
+    isa       => Str,
     lazy      => 1,
-    default   => '',
-    provides  => {
-        append => 'add_to_session',
-    },
+    default   => sub { '' },
 );
 
+sub add_to_session {
+    my $self = shift;
+    my $session = $self->complete_session;
+    $session .= $_ for @_;
+    $self->complete_session($session);
+}
+
 has paste_title => (
-    metaclass => 'String',
     is        => 'rw',
-    isa       => 'Str',
+    isa       => Str,
     lazy      => 1,
-    default   => 'Devel::REPL session',
+    default   => sub { 'Devel::REPL session' },
+);
+
+has 'nopaste_format' => (
+    is      => 'rw',
+    isa     => sub { $_[0] =~ qr[^(?:comment_code|comment_output)$] },
+    lazy    => 1,
+    default => sub { 'comment_output' },
 );
 
 before eval => sub {
     my $self = shift;
     my $line = shift;
 
-    # prepend each line with #
-    $line =~ s/^/# /mg;
+    if ( $self->nopaste_format() eq 'comment_code' ) {
+        # prepend each line with #
+        $line =~ s/^/# /mg;
+    }
 
     $self->add_to_session($line . "\n");
 };
@@ -55,6 +66,11 @@ around eval => sub {
         }
     } @ret;
 
+    if ( $self->nopaste_format() eq 'comment_output' ) {
+        # prepend each line with #
+        map { $_ =~ s/^/# /mg } @ret_as_str;
+    }
+
     $self->add_to_session(join("\n", @ret_as_str) . "\n\n");
 
     return @ret;
@@ -103,6 +119,25 @@ C<#pastetitle example of some code>
 
 defaults to 'Devel::REPL session'
 
+=head1 CONFIGURATION
+
+=head2 nopaste_format
+
+The format sent to the nopaste server can be adjusted with the
+C<nopaste_format> option. By default, the output of each perl
+statement is commented out, and the perl statements themselves are
+not. This can be reversed by setting the C<nopaste_format> attribute
+to C<comment_code> like this in your re.pl file:
+
+C<< $_REPL->nopaste_format( 'comment_code' ); >>
+
+The default of commenting out the output would be set like this:
+
+C<< $_REPL->nopaste_format( 'comment_output' ); >>
+
+These options can be set during a Devel::REPL session, but only affect
+the future parts of the session, not the past parts.
+
 =head1 AUTHOR
 
 Shawn M Moore, C<< <sartak at gmail dot com> >>