Merge branch 'master' into eval-code
[MojoFacets.git] / lib / MojoFacets / Data.pm
index 373e9a1..3a02f05 100644 (file)
@@ -370,7 +370,7 @@ sub _param_scalar {
                $self->session($name => $scalar);
        }
 
-       warn "# _perm_scalar $name ",dump $scalar;
+       warn "# _param_scalar $name ",dump $scalar;
        return $scalar;
 }
 
@@ -604,17 +604,39 @@ sub items {
 
        warn "all_filters $all_filters produced ", $#$filtered + 1, " items\n" if $filtered;
 
-       my $sorted_items;
        my $data = $self->_loaded('data');
+
+       my $code = $self->_param_scalar('code');
+       if ( $self->param('commit') ) {
+               warn "# commit $code";
+               foreach ( 0 .. $#{ $data->{items} } ) {
+                       my $rec = $data->{items}->[ $_ ];
+                       eval $code;
+               }
+               undef $code;
+       }
+
+       my $sorted_items;
        my $from_end = $sort eq 'd' ? $#$filtered : 0;
        foreach ( 0 .. $limit ) {
                my $i = $_ + $offset;
                last unless defined $filtered->[$i];
                $i = $from_end - $i if $from_end;
                my $id = $filtered->[$i];
-               push @$sorted_items,
-               my $item = $data->{items}->[ $id ];
-               $item->{_row_id} ||= $id;
+               my $rec = $data->{items}->[ $id ];
+               $rec->{_row_id} ||= $id;
+               if ( $code ) {
+                       $rec = Storable::dclone $rec;
+                       eval $code;
+                       if ( $@ ) {
+                               warn "ERROR evaling\n$code\n$@";
+                               undef $code;
+                               $self->stash('eval_error', $@) if $@;
+                       } else {
+                               warn "EVAL $code ",dump($rec);
+                       }
+               }
+               push @$sorted_items, $rec;
        }
 
        warn "# sorted_items ", $#$sorted_items + 1, " offset $offset limit $limit order $sort";
@@ -628,6 +650,7 @@ sub items {
                rows => $#$filtered + 1,
                numeric => { map { $_, $self->_is_numeric($_) } @columns },
                filters => $self->_current_filters,
+               code => $code,
        );
 
 }