The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

StorageBase - base class for filter storage plugins

SYNOPSIS

   package List::Filter::Storage::NewFormat;
   use base qw( List::Filter::StorageBase );

   sub init {
   }

   sub lookup {
     # ...
   }

   sub save {
     # ...
   }

   sub list_filters {
     # ...
   }


   1;

DESCRIPTION

This is module is purely an interface, which the storage plugins are intended to inherit from. The documentation of this module is thus oriented toward people interested in writing new storage plugins, see the existing plugins for documentation on how to use them.

OBJECT DATA

The main fields inside the object:

connect_to

In the case of DBI, this will be the database connection string, indicating the DBD driver and the database name.

owner

A user name, when required to make the connection.

password

A password, to go with the user name.

attributes

A hash reference of additional attributes to be used by the storage back-end in any way that seems appropriate.

In the case of DBI, this hash ref might contain something like this:

   { RaiseError => 1, AutoCommit => 1 }

(Though there's no particular point in manipulating AutoCommit with storage needs this simple).

type

The type of the filters being stored (e.g. 'filter', 'transform'). Not to be confused with the data storage format (e.g 'YAML', 'DBI')

extra

A catch-all hash reference intended to be used primarily for internal storage purposes by the subclasses, e.g. in the case of YAML, this will contain a reference to the contents of an entire YAML file that has been slurped into memory. Writing additional accessors for the data inside of "extra" is strongly advised, to make it easier to modifiy the internal structure at a later date.

METHODS

There are two main methods that need to be implemented:

new

Instantiates a new object.

Takes an optional hashref as an argument, with named fields identical to the names of the object attributes.

With no arguments, the newly created filter will be empty.

init

Initialize object attributes and then lock them down to prevent accidental creation of new ones.

Note: there is no leading underscore on name "init", though it's arguably an "internal" routine (i.e. not likely to be of use to client code).

Optionally, a plugin may run additional initialization code inside of an init method that overrides this stub.

define_filter_class

From the type of the stored filters (e.g. 'filter', 'transform'), determine the appropriate class.

This implements the convention: List::Filter::<type>, except that for type 'filter' the class is just "List::Filter".

main methods (stubs)

lookup

Given a name, returns the first filter found with a matching name.

save

Given a filter saves it to the storage location indicated by the "write_storage" setting of the List::Filter::Storage object, using the name indicated by the "name" field inside of the filter.

list_filters

Returns a list of all available filters.

basic accessors

connect_to

Getter for object attribute connect_to

owner

Getter for object attribute owner

set_owner

Setter for object attribute set_owner

password

Getter for object attribute password

set_password

Setter for object attribute set_password

set_connect_to

Setter for object attribute set_connect_to

attributes

Getter for object attribute attributes

set_attributes

Setter for object attribute set_attributes

type

Getter for object attribute type

set_type

Setter for object attribute set_type

extra

Getter for object attribute extra

set_extra

Setter for object attribute set_extra

SEE ALSO

List::Filter List::Filter::Storage::YAML List::Filter::Storage::DBI

AUTHOR

Joseph Brenner, <doom@kzsu.stanford.edu>, 18 May 2007

COPYRIGHT AND LICENSE

Copyright (C) 2007 by Joseph Brenner

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.2 or, at your option, any later version of Perl 5 you may have available.

BUGS

None reported... yet.