NAME
MooseX::AbstractFactory - AbstractFactory behaviour as a Moose extension
VERSION
version 0.004002
SYNOPSIS
package My::Factory;
use MooseX::AbstractFactory;
# 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 {
...
}
# -------------------------------------------------------------
package My::Factory::Implementation::Requires;
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.
use MooseX::AbstractFactory;
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.:
use MooseX::AbstractFactory;
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 AND LIMITATIONS
No bugs have been reported. Yet.
Please report any bugs or feature requests to mike@altrion.org
, or via RT.
ACKNOWLEDGMENTS
Thanks to Dave Rolsky for the suggestions for syntactic sugar.
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.