Pangloss::Search::Filter::Base - base class for collection filters


Pangloss documentation Contained in the Pangloss distribution.

Index


Code Index:

NAME

Top

Pangloss::Search::Filter::Base - base class for collection filters

SYNOPSIS

Top

  # abstract - must be subclassed for use:
  use Pangloss::Search::Filter::FooBar;
  my $filter = new Pangloss::Search::Filter::FooBar()->set( $baz );

DESCRIPTION

Top

An abstract search filter object for use with <Pangloss::Collection::Item>s.

METHODS

Top

$obj->item_keys

get/set this filter's hash of collection-item keys (see sub-classes for usage).

$obj->keys

get the keys as a list.

$bool = $obj->toggle( $key )

toggle given key, returns current state true => on, false => off.

$obj = $obj->set( $key [, $key2 ... ] )

set given keys to on.

$obj = $obj->unset( $key [, $key2 ... ] )

set given keys to off.

$bool = $obj->is_set( $key )

test to see if the given key is set.

$obj = $obj->reset

clear all set keys.

$size = $obj->size

get number of keys currently set.

$bool = $obj->is_empty

test to see if no keys are currently set.

$bool = $obj->not_empty

test to see if any keys are currently set.

DEPRECATED

Top

$obj = $obj->add( $key [, $key2 ... ] )
$obj = $obj->del( $key [, $key2 ... ] )
$bool = $obj->exists( $key )

deprecated aliases to set, unset & is_set.

SUB-CLASSING

Top

At the very least, you must do the following:

  package Foo;
  use base qw( Pangloss::Search::Filter::Base );

  sub applies_to {
      my $self = shift;
      my $term = shift;

      # use $term, $self->item_keys and the collections
      # available via $self->parent to do your test

      return 0 || 1;
  }

AUTHOR

Top

Steve Purkis <spurkis@quiup.com>

SEE ALSO

Top

Pangloss::Search

Known Sub-Classes

Pangloss::Search::Filter::Category, Pangloss::Search::Filter::Concept, Pangloss::Search::Filter::Language, Pangloss::Search::Filter::Proofreader, Pangloss::Search::Filter::Translator, Pangloss::Search::Filter::Status, Pangloss::Search::Filter::DateRange


Pangloss documentation Contained in the Pangloss distribution.
package Pangloss::Search::Filter::Base;

use Error;
use OpenFrame::WebApp::Error::Abstract;

use base      qw( Pangloss::Search::Filter );
use accessors qw( item_keys );

our $VERSION  = ((require Pangloss::Version), $Pangloss::VERSION)[1];
our $REVISION = (split(/ /, ' $Revision: 1.7 $ '))[2];

sub init {
    shift->reset();
}

sub applies_to {
    my $class = shift->class;
    throw OpenFrame::WebApp::Error::Abstract( class => $class );
}

sub set {
    my $self = shift;
    $self->item_keys->{$_} = 1 for @_;
    return $self;
}

sub unset {
    my $self = shift;
    delete $self->item_keys->{$_} for @_;
    return $self;
}

sub reset {
    shift->item_keys( {} );
}

sub is_set {
    exists shift->item_keys->{shift()};
}

sub not_set {
    ! shift->is_set( @_ );
}

sub toggle {
    my $self = shift;
    my $key  = shift;
    if ($self->exists( $key )) {
	$self->unset( $key );
	return 0;
    }
    $self->set( $key );
    return 1;
}

sub add { shift->set( @_ ); }
sub del { shift->unset( @_ ); }
sub exists { shift->is_set( @_ ); }

sub keys {
    return CORE::keys( %{ shift->item_keys } );
}

sub size {
    return scalar CORE::keys( %{ shift->item_keys } );
}

sub is_empty {
    return shift->size ? 0 : 1;
}

sub not_empty {
    return ! shift->is_empty;
}

1;

__END__

#------------------------------------------------------------------------------