This is an automated email from the git hooks/post-receive script.

js pushed a commit to tag 0.91
in repository libcatmandu-perl.

commit 8ab600587abe1649df600f86422285b6e6525028
Author: Patrick Hochstenbach <patrick.hochstenb...@ugent.be>
Date:   Fri May 9 12:06:19 2014 +0200

    Simplyfying monads
---
 lib/Catmandu/Fix/Bind.pm      |  3 +--
 lib/Catmandu/Fix/Bind/each.pm | 36 +++++++++++++++++++++++++++++-------
 2 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/lib/Catmandu/Fix/Bind.pm b/lib/Catmandu/Fix/Bind.pm
index d089818..b8215e9 100644
--- a/lib/Catmandu/Fix/Bind.pm
+++ b/lib/Catmandu/Fix/Bind.pm
@@ -2,7 +2,6 @@ package Catmandu::Fix::Bind;
 
 use Moo::Role;
 use namespace::clean;
-use Data::Dumper;
 
 requires 'unit';
 requires 'bind';
@@ -46,7 +45,7 @@ sub emit_bind {
 
     my $bind_var = $fixer->capture($self);
     my $unit     = $fixer->generate_var;
-    
+
     $perl .= "my ${unit} = ${bind_var}->unit(${var});";
 
     for my $pair (@$code) { 
diff --git a/lib/Catmandu/Fix/Bind/each.pm b/lib/Catmandu/Fix/Bind/each.pm
index da37293..2d30e27 100644
--- a/lib/Catmandu/Fix/Bind/each.pm
+++ b/lib/Catmandu/Fix/Bind/each.pm
@@ -2,12 +2,13 @@ package Catmandu::Fix::Bind::each;
 
 use Moo;
 use Catmandu::Util qw(:data :is);
-use Data::Dumper;
 
 with 'Catmandu::Fix::Bind';
 
-has path  => (is => 'ro' , required => 1);
-has index => (is => 'ro');
+has path     => (is => 'ro' , required => 1);
+has index    => (is => 'ro');
+has values   => (is => 'rw', default => sub { [] });
+has promises => (is => 'rw', default => sub { [] });
 
 sub bind {
        my ($self,$data,$code,$name) = @_;
@@ -15,13 +16,34 @@ sub bind {
        my $value = data_at($self->path,$data);
 
        if (defined $value && is_array_ref($value)) {
-               for my $i (@$value) {
-                       $data->{$self->index} = $i if defined $self->index;
-                       $data = $code->($data);
-               }
+               $self->values($value);
+               push @{$self->promises} , [$code,$name];
        }
 
        $data;
 }
 
+sub finally {
+       my ($self,$data) = @_;
+
+    for my $i (@{$self->values}) {
+       for my $promise (@{$self->promises}) {
+               my ($code,$name) = @$promise;
+               if (defined $self->index) {
+                               $data->{$self->index} = $i;
+                       }
+                       $data = $code->($data);
+       }
+    }
+
+    if (defined $self->index) {
+       delete $data->{$self->index};
+    }
+
+    $self->promises([]);
+    $self->values([]);
+
+    $data;
+}
+
 1;

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-perl/packages/libcatmandu-perl.git

_______________________________________________
Pkg-perl-cvs-commits mailing list
Pkg-perl-cvs-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits

Reply via email to