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.