resolve rt.cpan#42904 Nopaste plugin handle undef error messages
[p5sagit/Devel-REPL.git] / lib / Devel / REPL / Plugin / Nopaste.pm
index 19e30ae..283fdfb 100644 (file)
@@ -1,36 +1,53 @@
 package Devel::REPL::Plugin::Nopaste;
 
-use Moose::Role;
+use Devel::REPL::Plugin;
 use MooseX::AttributeHelpers;
 use namespace::clean -except => [ 'meta' ];
+use Scalar::Util qw(blessed);
 
-with 'Devel::REPL::Plugin::Turtles';
+sub BEFORE_PLUGIN {
+    my $self = shift;
+    $self->load_plugin('Turtles');
+}
 
 has complete_session => (
     metaclass => 'String',
     is        => 'rw',
     isa       => 'Str',
+    lazy      => 1,
     default   => '',
     provides  => {
         append => 'add_to_session',
     },
 );
 
-around eval => sub {
-    my $orig = shift;
+before eval => sub {
     my $self = shift;
     my $line = shift;
 
-    my @ret = $orig->($self, $line, @_);
-
     # prepend each line with #
     $line =~ s/^/# /mg;
 
-    my $step = $line . "\n"
-             . join("\n", @ret)
-             . "\n\n";
+    $self->add_to_session($line . "\n");
+};
+
+around eval => sub {
+    my $orig = shift;
+    my $self = shift;
+    my $line = shift;
+
+    my @ret = $orig->($self, $line, @_);
+    my @ret_as_str = map {
+        if (!defined($_)) {
+            '';
+        } elsif (blessed($_) && $_->can('stringify')) {
+            $_->stringify();
+        } else {
+            $_;
+        }
+    } @ret;
 
-    $self->add_to_session($step);
+    $self->add_to_session(join("\n", @ret_as_str) . "\n\n");
 
     return @ret;
 };
@@ -48,3 +65,15 @@ sub command_nopaste {
 
 1;
 
+__END__
+
+=head1 NAME
+
+Devel::REPL::Plugin::Nopaste - #nopaste to upload session's input and output
+
+=head1 AUTHOR
+
+Shawn M Moore, C<< <sartak at gmail dot com> >>
+
+=cut
+