| Class-Factory-Enhanced documentation | Contained in the Class-Factory-Enhanced distribution. |
Class::Factory::Enhanced - More functionality for Class::Factory
version 1.101420
package My::Factory;
use base 'Class::Factory::Enhanced';
package Some::Class;
My::Factory->add_factory_type(
person_name => 'Person::Name',
person_address => 'Person::Address'
);
This class subclasses Class::Factory and adds some functionality.
Like Class::Factory's add_factory_type(), but this one can add several
mappings at once. See the Synopsis for an example.
Like Class::Factory's register_factory_type(), but this one can add
several mappings at once.
$factory->make_object_for_type('person_name',
last_name => 'Shindou',
first_name => 'Hikaru',
);
An alternative constructor that gets the class to be constructed from the
factory, then calls new() on that class.
Takes as arguments the object type to be constructed and a list of arguments
to be passed to the constructor (new()) of the newly constructed object.
See perlmodinstall for information and options on installing Perl modules.
No bugs have been reported.
Please report any bugs or feature requests through the web interface at http://rt.cpan.org/Public/Dist/Display.html?Name=Class-Factory-Enhanced.
The latest version of this module is available from the Comprehensive Perl Archive Network (CPAN). Visit http://www.perl.com/CPAN/ to find a CPAN site near you, or see http://search.cpan.org/dist/Class-Factory-Enhanced/.
The development version lives at http://github.com/hanekomu/Class-Factory-Enhanced/. Instead of sending patches, please fork this project using the standard git and github infrastructure.
Marcel Gruenauer <marcel@cpan.org>
This software is copyright (c) 2007 by Marcel Gruenauer.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
| Class-Factory-Enhanced documentation | Contained in the Class-Factory-Enhanced distribution. |
use 5.006; use warnings; use strict; package Class::Factory::Enhanced; BEGIN { $Class::Factory::Enhanced::VERSION = '1.101420'; } # ABSTRACT: More functionality for Class::Factory use parent 'Class::Factory'; # add support for defining several mappings at once sub add_factory_type { my ($item, @args) = @_; my $class = ref $item || $item; # SUPER::add_factory_type, which only allows one mapping, returns the # object class. The return value is not used when defining the mappings, # but it is used in get_factory_class(). get_factory_class() only calls # this with one argument, so return the first object class we see. It's a # hack, yes... my $first_object_class; while (my ($object_type, $object_class) = splice @args, 0, 2) { $class->SUPER::remove_factory_type($object_type); $class->SUPER::add_factory_type($object_type, $object_class); $first_object_class ||= $object_class; } return $first_object_class; } sub register_factory_type { my ($item, @args) = @_; my $class = ref $item || $item; while (my ($object_type, $object_class) = splice @args, 0, 2) { $class->SUPER::unregister_factory_type($object_type); $class->SUPER::register_factory_type($object_type, $object_class); } } sub make_object_for_type { my ($self, $object_type, @args) = @_; my $class = $self->get_factory_class($object_type); $class->new(@args); } 1; __END__