X-Git-Url: http://git.rot13.org/?p=MojoFacets.git;a=blobdiff_plain;f=lib%2FMojoFacets%2FData.pm;h=3a02f050c93affba4c85217a0b7dc1b1dd33d407;hp=373e9a13d431f0e7eb1bf2a25b6b742d3b2b33fa;hb=206455e4fe5735cf5d6418f453a6e499da40d22e;hpb=136f45adf13ec642fbb42de4eead8fe4f0a46b17 diff --git a/lib/MojoFacets/Data.pm b/lib/MojoFacets/Data.pm index 373e9a1..3a02f05 100644 --- a/lib/MojoFacets/Data.pm +++ b/lib/MojoFacets/Data.pm @@ -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, ); }