|
NAMEMooseX::Traits::Pluggable - trait loading and resolution for Moose DESCRIPTIONSee 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 SEARCHIf 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');
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 ARRAYSYou 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 BEHAVIORBy 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_nameWhen 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. _traitsList of the (unresolved) traits applied to the instance. _resolved_traitsList of traits applied to the instance resolved to full package names. SEE ALSOMooseX::Traits, MooseX::Object::Pluggable, CatalystX::Component::Traits BUGSPlease 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. AUTHORRafael Kitover "<rkitover@cpan.org>" CONTRIBUTORSTomas Doran, "<bobtfish@bobtfish.net>" Fitz Elliott, "<fitz.elliott@gmail.com>" Andreas Marienborg, "<andreas.marienborg@gmail.com>" Alexander Hartmaier, "<abraxxa@cpan.org>" COPYRIGHT & LICENSECopyright (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.
|