NAME
MooseX::AbstractFactory - AbstractFactory behaviour as a Moose extension
VERSION
version 0.004003
SYNOPSIS
package
My::Factory;
# optional role(s) that define what the implementations should implement
implementation_does [
qw( My::Factory::Implementation::Requires )
];
implementation_class_via
sub
{
'My::Implementation::'
.
shift
};
# -------------------------------------------------------------
package
My::Implementation::One;
use
Moose;
has
connection
=> (
is
=>
'ro'
,
isa
=>
'Str'
);
sub
tweak_connection {
...
}
# -------------------------------------------------------------
use
Moose::Role;
requires
'tweak_connection'
;
# -------------------------------------------------------------
package
main;
use
My::Factory;
my
$imp
= My::Factory->create(
'One'
,
{
connection
=>
'Type1'
},
);
DESCRIPTION
Implements an AbstractFactory as a Moose extension
METHODS
create()
Returns an instance of the requested implementation.
my
$imp
= My::Factory->create(
'Implementation'
,
{
connection
=>
'Type1'
},
);
implementation_does
Syntactic sugar to define a list of roles each implementation must consume.
implementation_class_via
Syntactic sugar to provide a sub to generate the implementation class name: e.g.:
implementation_class_via
sub
{
'My::Implementation::'
.
shift
};
and then
my
$imp
= My::Factory->create(
"ClassA"
);
# $imp->isa "My::Implementation::ClassA"
The default behaviour is to prepend the factory class name, so in the above example (without the implementation_class_via) the implementation class would be "My::Factory::ClassA".
init_meta
Overrides Moose's init_meta
and applies MooseX::AbstractFactory::Role.
DIAGNOSTICS
No implementation provided
-
If the factory class's new() method doesn't get an implementation passed, then it will die with the above error.
Invalid implementation class %s: %s"
-
The implementation passed to the factory class mapped to a class that doesn't exist.
BUGS
Please report any bugs or feature requests on the bugtracker website https://github.com/fleetfootmike/MX-AbstractFactory/issues
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.
CONTRIBUTOR
Zoffix Znet <cpan@zoffix.com>
AUTHORS
Mike Whitaker <mike@altrion.org>
Caleb Cushing <xenoterracide@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Mike Whitaker.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.