NAME MooseX::AbstractFactory - AbstractFactory behaviour as a Moose extension VERSION version 0.004003 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 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 AUTHORS * Mike Whitaker * Caleb Cushing 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.