NAME
MooseX::Traits::Pluggable - an extension to MooseX::Traits
DESCRIPTION
See MooseX::Traits for usage information.
Adds support for class precedence search for traits and some extra attributes, described below.
TRAIT SEARCH
If the value of "_trait_namespace" in MooseX::Traits starts with a +
the namespace will be considered relative to the class_precedence_list
(ie. @ISA
) of the original class.
Example:
package Class1
use Moose;
package Class1::Trait::Foo;
use Moose::Role;
has 'bar' => (
is => 'ro',
isa => 'Str',
required => 1,
);
package Class2;
use parent 'Class1';
with 'MooseX::Traits';
has '+_trait_namespace' => (default => '+Trait');
package Class2::Trait::Bar;
use Moose::Role;
has 'baz' => (
is => 'ro',
isa => 'Str',
required => 1,
);
package main;
my $instance = Class2->new_with_traits(
traits => ['Foo', 'Bar'],
bar => 'baz',
baz => 'quux',
);
$instance->does('Class1::Trait::Foo'); # true
$instance->does('Class2::Trait::Bar'); # true
NAMESPACE ARRAYS
You can search multiple namespaces for traits, for example:
has '+_trait_namespace' => (
default => sub { [qw/+Trait +Role ExtraNS::Trait/] }
);
Will search in the class_precedence_list
for ::Trait::TheTrait
and ::Role::TheTrait
and then for ExtraNS::Trait::TheTrait
.
EXTRA ATTRIBUTES
_original_class_name
When traits are applied to your class or instance, you get an anonymous class back whose name will be not the same as your original class. So ref $self
will not be Class
, but $self->_original_class_name
will be.
_traits
List of the (unresolved) traits applied to the instance.
_resolved_traits
List of traits applied to the instance resolved to full package names.
AUTHOR
Rafael Kitover <rkitover@cpan.org>
Don't email these guys, they had nothing to do with this fork:
Jonathan Rockway <jrockway@cpan.org>
Stevan Little <stevan.little@iinteractive.com>
COPYRIGHT AND LICENSE
Copyright 2008 Infinity Interactive, Inc.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.