From: Dobrica Pavlinusic Date: Tue, 25 May 2010 19:46:17 +0000 (+0200) Subject: split out _remove_filter X-Git-Url: http://git.rot13.org/?a=commitdiff_plain;h=0953401861d9435ffc66889ffba9aea581bd02b9;p=MojoFacets.git split out _remove_filter This allows us to remove filter and associated filtered caches, this solving cache invalidation problem at one place --- diff --git a/lib/MojoFacets/Data.pm b/lib/MojoFacets/Data.pm index 762516b..d396aa0 100644 --- a/lib/MojoFacets/Data.pm +++ b/lib/MojoFacets/Data.pm @@ -260,17 +260,8 @@ sub filter { my $name = $self->param('filter_name') || die "name?"; my @vals = $self->param('filter_vals'); - my $path = $self->session('path'); - - if ( @vals ) { - $self->_filter_on_data( $name, @vals ); - } else { - warn "# filter - $name\n"; - delete $filters->{$name}; - delete $loaded->{$path}->{filters}->{$name}; - } - - #warn "# filters ",dump($filters); + $self->_remove_filter( $name ); + $self->_filter_on_data( $name, @vals ) if @vals; $self->session( 'offset' => 0 ); @@ -522,14 +513,32 @@ sub _is_numeric { $stats->{$name}->{numeric} > $count / 2; } +sub _remove_filter { + my ($self,$name) = @_; + warn "_remove_filter $name\n"; + + my $path = $self->session('path'); + + delete $filters->{$name}; + delete $loaded->{$path}->{filters}->{$name}; + warn "filters left: ", keys %{ $loaded->{$path}->{filters} }; + + foreach ( + grep { /\b$name\b/ } + keys %{ $loaded->{$path}->{filtered} } + ) { + delete $loaded->{$path}->{filtered}->{$_}; + warn "remove filtered cache $_"; + } +} + sub facet { my $self = shift; my $path = $self->session('path') || $self->redirect_to( '/data/index' ); - if ( my $remove = $self->param('remove') ) { - delete $filters->{$remove}; - delete $loaded->{$path}->{filters}->{$remove}; + if ( my $name = $self->param('remove') ) { + $self->_remove_filter( $name ); $self->redirect_to( '/data/items' ); }