summaryrefslogtreecommitdiffstats
path: root/lib/Reply/Plugin/ResultCache.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Reply/Plugin/ResultCache.pm')
-rw-r--r--lib/Reply/Plugin/ResultCache.pm56
1 files changed, 21 insertions, 35 deletions
diff --git a/lib/Reply/Plugin/ResultCache.pm b/lib/Reply/Plugin/ResultCache.pm
index b7b929b..0407a68 100644
--- a/lib/Reply/Plugin/ResultCache.pm
+++ b/lib/Reply/Plugin/ResultCache.pm
@@ -1,9 +1,9 @@
-package Reply::Plugin::ResultCache;
+package main;
use strict;
use warnings;
# ABSTRACT: retain previous results to be able to refer to them later
-use base 'Reply::Plugin';
+use mop;
=head1 SYNOPSIS
@@ -21,44 +21,30 @@ include an indication of where the value is stored, for later reference.
=cut
-sub new {
- my $class = shift;
- my %opts = @_;
+class Reply::Plugin::ResultCache extends Reply::Plugin {
+ has $results = [];
+ has $variable = 'res';
- my $self = $class->SUPER::new(@_);
- $self->{results} = [];
- $self->{result_name} = $opts{variable} || 'res';
+ method execute ($next, @args) {
+ my @res = $next->(@args);
+ if (@res == 1) {
+ push @$results, $res[0];
+ }
+ elsif (@res > 1) {
+ push @$results, \@res;
+ }
- return $self;
-}
-
-sub execute {
- my $self = shift;
- my ($next, @args) = @_;
-
- my @res = $next->(@args);
- if (@res == 1) {
- push @{ $self->{results} }, $res[0];
+ return @res;
}
- elsif (@res > 1) {
- push @{ $self->{results} }, \@res;
- }
-
- return @res;
-}
-
-sub mangle_result {
- my $self = shift;
- my ($result) = @_;
- return unless defined $result;
- return '$' . $self->{result_name} . '[' . $#{ $self->{results} } . '] = '
- . $result;
-}
+ method mangle_result ($result) {
+ return unless defined $result;
+ return '$' . $variable . '[' . $#$results . '] = ' . $result;
+ }
-sub lexical_environment {
- my $self = shift;
- return { "\@$self->{result_name}" => [ @{ $self->{results} } ] };
+ method lexical_environment {
+ return { "\@$variable" => [ @$results ] };
+ }
}
1;