Add a Nopaste plugin. #nopaste will publish your current session using App::Nopaste
[p5sagit/Devel-REPL.git] / lib / Devel / REPL / Plugin / Nopaste.pm
1 package Devel::REPL::Plugin::Nopaste;
2
3 use Moose::Role;
4 use MooseX::AttributeHelpers;
5 use namespace::clean -except => [ 'meta' ];
6
7 with 'Devel::REPL::Plugin::Turtles';
8
9 has complete_session => (
10     metaclass => 'String',
11     is        => 'rw',
12     isa       => 'Str',
13     default   => '',
14     provides  => {
15         append => 'add_to_session',
16     },
17 );
18
19 around eval => sub {
20     my $orig = shift;
21     my $self = shift;
22     my $line = shift;
23
24     my @ret = $orig->($self, $line, @_);
25
26     # prepend each line with #
27     $line =~ s/^/# /mg;
28
29     my $step = $line . "\n"
30              . join("\n", @ret)
31              . "\n\n";
32
33     $self->add_to_session($step);
34
35     return @ret;
36 };
37
38 sub command_nopaste {
39     my $self = shift;
40
41     require App::Nopaste;
42     return App::Nopaste->nopaste(
43         text => $self->complete_session,
44         desc => "Devel::REPL session",
45         lang => "perl",
46     );
47 }
48
49 1;
50