NAME
Class::CompoundMethods - Create methods from components
VERSION
0.03
SYNOPSIS
package Object;
use Class::CompoundMethods 'append_method';
# This installs both versioning_hook and auditing_hook into the
# method Object::pre_insert.
append_method( pre_insert => "versioning_hook" );
append_method( pre_insert => "auditing_hook" );
DESCRIPTION
This allows you to install more than one method into a single method
name. I created this so I could install both versioning and auditing
hooks into another module's object space. So instead of creating a
single larger method which incorporates the functionality of both hooks
I created "append_method()"/"insert_method()" to install a wrapper
method as needed.
If only one method is ever installed into a space, it is installed
directly with no wrapper. Once there are two or more components, a hook
method is installed which will call each component in order.
PUBLIC METHODS
append_method( $method_name, $method )
append_method( $method_name, $method );
This function takes two parameters - a method name and the method to
install.
$method_name may be fully qualified. If not, Class::CompoundMethods
looks for your method in your current package.
append_method( 'Object::something', ... );
append_method( 'something', ... );
$method may be either a code reference or a method name. It may be
fully qualified.
append_method( ..., sub { ... } );
append_method( ..., \ &some_hook );
append_method( ..., 'Object::some_hook' );
append_method( ..., 'some_hook' );
prepend_method( $method_name, $method )
prepend_method( $method_name, $method );
This function takes two parameters - a method name and the method to
install.
$method_name may be fully qualified. If not, Class::CompoundMethods
looks for your method in your current package.
prepend_method( 'Object::something', ... );
prepend_method( 'something', ... );
$method may be either a code reference or a method name. It may be
fully qualified.
prepend_method( ..., sub { ... } );
prepend_method( ..., \ &some_hook );
prepend_method( ..., 'Object::some_hook' );
prepend_method( ..., 'some_hook' );
EXAMPLES
Example 1
use Class::CompoundMethods qw(append_method);
# This installs both versioning_hook and auditing_hook into the
# method Object::pre_insert.
append_method( 'Object::something' => \ &versioning_hook );
package Object;
prepend_method( 'something' => \ &auditing_hook );
Example 2
package GreenPartyDB::Database;
use Class::CompoundMethods qw(append_method);
my @versioned_tables = ( ... );
my @audited_tables = ( ... );
for my $table ( @versioned_tables ) {
my $package = __PACKAGE__ . "::" . $table;
append_method( $package . "::pre_insert", \ &versioning_hook );
append_method( $package . "::pre_update", \ &versioning_hook );
append_method( $package . "::pre_delete", \ &versioning_hook );
}
for my $table ( @audited_tables ) {
my $package = __PACKAGE__ . "::" . $table;
append_method( $package . "::pre_insert", \ &auditing_hook );
append_method( $package . "::pre_update", \ &auditing_hook );
append_method( $package . "::pre_delete", \ &auditing_hook );
}
EXPORT
This class optionally exports the "append_method" and "prepend_method"
functions. It also uses the ':all' tag.
use Class::CompoundMethods qw( append_method );
use Class::CompoundMethods qw( :all );
COPYRIGHT & LICENSE
Copyright (c) 2005 Joshua ben Jore All rights reserved. This program is
free software; you can redistribute it and/or modify it under the same
terms as Perl itself.
AUTHOR
Joshua ben Jore <jjore@cpan.org>
SEE ALSO
RFC Class::AppendMethods
Installing chained methods