Form::Sensible::DelegateConnection - Represents a connection
between one object and another
sub the_options {
my $calling_object = shift;
# do stuff to get options and return them
}
## calls the_options when the delegate is invoked
my $options_delegate = FSConnector( \&the_options );
## OR --
my $options_delegate = FSConnector( sub {
my $calling_object = shift;
## do stuff to get options and return them
} );
## OR --
my $data_source_object = Data::Source->new(...);
## calls $data_source_object->get_option_data($calling_object, ...); when the delegate is invoked
## Automatically captures your $data_source_object in a closure.
my $options_delegate = FSConnector( $data_source_object, "get_option_data");
## OR --
my $options_delegate = Form::Sensible::DelegateConnection->new( delegate_function => \&the_options );
Form::Sensible::DelegateConnection is an object that represents a
connection between one object and another. In Form::Sensible when an object
can have its behavior customized by another object, a Delegate, a
"DelegateConnection" object is usually
used to create the link between the two objects. See
Form::Sensible::Delegation for more information on how DelegateConnection
objects are used within Form::Sensible.
- "delegate_function($calling_object, $optional_additional_arguments,
... )"
- The "delegate_function" refers to a
function that will be run when this delegate connection is used. In most
cases you will not access this attribute directly, preferring the
FSConnector() method, though if you are into deep
voodoo, you may.
- new( %options )
- Creates a new DelegateConnection object with the provided options. All the
attributes above may be passed.
- "call( $calling_object, @argument_list )"
- Calls the delegate function for the
$calling_object using the
@argument_list. This is essentially a wrapper to
overload an object so that if it is accessed directly as a code ref, it
will call the delegate function:
my $options_delegate = Form::Sensible::DelegateConnection->new( delegate_function => \&the_options );
$options_delegate->( ... ); # same as $options_delegate->delegate_function->( ... )
- FSConnector(...)
- The "FSConnector" function is available
if you have "use"d either
"Form::Sensible" or
"Form::Sensible::DelegateConnection". It
is used to easily create a
"Form::Sensible::DelegateConnection"
object in-place. You can call it two ways, first, passing a code ref:
# instead of:
my $connection = Form::Sensible::DelegateConnection->new( delegate_function => sub { ... } );
# this does the same thing:
my $connection = FSConnector( sub { ... } );
This is a modest savings in typing, but can be very convenient
when you are defining a number of delegates during form creation, for
example.
FSConnector( ... ) is particularly
useful when linking a delegate connection to a method on an object. This
method looks like this:
my $connection = FSConnector( $object, 'method_to_call');
When used this way, The
"FSConnector" function will create a
code ref for you automatically capturing the passed object in a closure.
Again, you can do this yourself, but this makes your setup code a lot
clearer.
As a further benefit, both methods will take additional args
which will be passed to the function or method after the args passed by
the calling object:
my $connection = FSConnector( $object, 'method_to_call', 'additional','args');
This can be useful, for example, when you are using the same
object / method repeatedly, but need slightly different information in
each case.
Jay Kuri - <jayk@cpan.org>
Ionzero LLC. <http://ionzero.com/>
Form::Sensible Form::Sensible::Delegation
Copyright 2010 by Jay Kuri <jayk@cpan.org>
This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.