NAME
MooseX::Traits::Pluggable - trait loading and resolution for Moose
DESCRIPTION
See MooseX::Traits for usage information.
Use new_with_traits
to construct an object with a list of traits and apply_traits
to apply traits to an instance.
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;
has
'+_trait_namespace'
=> (
default
=>
'+Trait'
);
has
'+_traits_behave_like_roles'
=> (
default
=> 1);
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
.
CORRECT ROLE BEHAVIOR
By default, a method from a role will override a class method, this however is not the behavior one expects when applying a Moose role using the normal methods.
If you want the behavior to be consistent with Moose roles, then use this configuration attribute in your class:
has
'+_traits_behave_like_roles'
=> (
default
=> 1);
This may or may not become the default in the future, for now you have to ask for it for backward compatibility reasons.
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.
SEE ALSO
MooseX::Traits, MooseX::Object::Pluggable, CatalystX::Component::Traits
BUGS
Please report any bugs or feature requests to bug-moosex-traits-pluggable at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=MooseX-Traits-Pluggable. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
AUTHOR
Rafael Kitover <rkitover@cpan.org>
CONTRIBUTORS
Tomas Doran, <bobtfish@bobtfish.net>
Fitz Elliott, <fitz.elliott@gmail.com>
Andreas Marienborg, <andreas.marienborg@gmail.com>
Alexander Hartmaier, <abraxxa@cpan.org>
COPYRIGHT & LICENSE
Copyright (c) 2014 by the aforementioned "AUTHOR" and "CONTRIBUTORS".
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.