Class::Adapter::Builder - Generate Class::Adapter classes
version 1.09
package My::Adapter;
use strict;
use Class::Adapter::Builder
ISA => 'Specific::API',
METHODS => [ qw{foo bar baz} ],
method => 'different_method';
1;
"Class::Adapter::Builder" is another mechanism for letting you create
Adapter classes of your own.
It is intended to act as a toolkit for generating the guts of many varied and
different types of
Adapter classes.
For a simple base class you can inherit from and change a specific method, see
Class::Adapter::Clear.
The most common method for defining
Adapter classes, as shown in the
synopsis, is the pragma interface.
This consists of a set of key/value pairs provided when you load the module.
# The format for building Adapter classes
use Class::Adapter::Builder PARAM => VALUE, ...
- ISA
- The "ISA" param is provided as either a single
value, or a reference to an "ARRAY" containing is list of
classes.
Normally this is just a straight list of classes. However, if the value for
"ISA" is set to '_OBJECT_' the object will identify itself as
whatever is contained in it when the "->isa" and
"->can" method are called on it.
- NEW
- Normally, you need to create your
"Class::Adapter" objects separately:
# Create the object
my $query = CGI->new( 'param1', 'param2' );
# Create the Decorator
my $object = My::Adapter->new( $query );
If you provide a class name as the "NEW" param, the Decorator will
do this for you, passing on any constructor arguments.
# Assume we provided the following
# NEW => 'CGI',
# We can now do the above in one step
my $object = My::Adapter->new( 'param1', 'param2' );
- AUTOLOAD
- By default, a "Class::Adapter" does not pass on
any methods, with the methods to be passed on specified explicitly with
the 'METHODS' param.
By setting "AUTOLOAD" to true, the "Adapter" will be
given the standard "AUTOLOAD" function to to pass through all
unspecified methods to the parent object.
By default the AUTOLOAD will pass through any and all calls, including calls
to private methods.
If the AUTOLOAD is specifically set to 'PUBLIC', the AUTOLOAD setting will
ONLY apply to public methods, and any private methods will not be passed
through.
- METHODS
- The "METHODS" param is provided as a reference to
an array of all the methods that are to be passed through to the parent
object as is.
Any params other than the ones specified above are taken as translated methods.
# If you provide the following
# foo => bar
# It the following are equivalent
$decorator->foo;
$decorator->_OBJECT_->bar;
This capability is provided primarily because in Perl one of the main situations
in which you hit the limits of Perl's inheritance model is when your class
needs to inherit from multiple different classes that containing clashing
methods.
For example:
# If your class is like this
package Foo;
use base 'This', 'That';
1;
If both "This->method" exists and "That->method"
exists, and both mean different things, then "Foo->method"
becomes ambiguous.
A "Class::Adapter" could be used to wrap your "Foo" object,
with the "Class::Adapter" becoming the "That" sub-class,
and passing "$decorator->method" through to
"$object->that_method".
Yes, "Class::Adapter::Builder" has public methods and later on you
will be able to access them directly, but for now they are remaining
undocumented, so that I can shuffle things around for another few versions.
Just stick to the pragma interface for now.
Class::Adapter, Class::Adapter::Clear
Bugs may be submitted through the RT bug tracker
<
https://rt.cpan.org/Public/Dist/Display.html?Name=Class-Adapter> (or
[email protected] <mailto:
[email protected]>).
Adam Kennedy <
[email protected]>
This software is copyright (c) 2005 by Adam Kennedy.
This is free software; you can redistribute it and/or modify it under the same
terms as the Perl 5 programming language system itself.