summaryrefslogtreecommitdiffstats
path: root/lib/Reply/Plugin/Nopaste.pm
blob: a3fa90928d0127fac4755447e4d7c2df0b4cfd32 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package Reply::Plugin::Nopaste;
use strict;
use warnings;

use base 'Reply::Plugin';

use App::Nopaste;

# XXX note that this has to be loaded early, in order to catch all of the
# appropriate manipulations that plugins do ([DataDump], etc)

sub new {
    my $class = shift;
    my %opts = @_;

    my $self = $class->SUPER::new(@_);
    $self->{history} = '';
    $self->{service} = $opts{service};

    return $self;
}

sub prompt {
    my $self = shift;
    my ($next, @args) = @_;
    my $prompt = $next->(@args);
    $self->{prompt} = $prompt;
    return $prompt;
}

sub read_line {
    my $self = shift;
    my ($next, @args) = @_;
    my $line = $next->(@args);
    $self->{line} = "$line\n" if defined $line;
    return $line;
}

sub print_error {
    my $self = shift;
    my ($next, $error) = @_;
    $self->{result} = $error;
    $next->($error);
}

sub print_result {
    my $self = shift;
    my ($next, @result) = @_;
    $self->{result} = join('', @result) . "\n";
    $next->(@result);
}

sub loop {
    my $self = shift;

    my $prompt = delete $self->{prompt};
    my $line   = delete $self->{line};
    my $result = delete $self->{result};

    $self->{history} .= "$prompt$line$result";
}

sub command_nopaste {
    my $self = shift;
    my ($line) = @_;

    $line = "Reply session" unless length $line;

    App::Nopaste->nopaste(
        text => $self->{history},
        desc => $line,
        lang => 'perl',
        (defined $self->{service}
            ? (services => [ $self->{service} ])
            : ()),
    );

    return '';
}

1;