MooseX::Traits::Pluggable - trait loading and resolution for Moose
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.
new_with_traits
apply_traits
Adds support for class precedence search for traits and some extra attributes, described below.
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.
+
class_precedence_list
@ISA
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
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.
::Trait::TheTrait
::Role::TheTrait
ExtraNS::Trait::TheTrait
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.
ref $self
Class
$self->_original_class_name
List of the (unresolved) traits applied to the instance.
List of traits applied to the instance resolved to full package names.
MooseX::Traits, MooseX::Object::Pluggable
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.
bug-moosex-traits-pluggable at rt.cpan.org
More information at:
RT: CPAN's request tracker
http://rt.cpan.org/NoAuth/Bugs.html?Dist=MooseX-Traits-Pluggable
AnnoCPAN: Annotated CPAN documentation
http://annocpan.org/dist/MooseX-Traits-Pluggable
CPAN Ratings
http://cpanratings.perl.org/d/MooseX-Traits-Pluggable
Search CPAN
http://search.cpan.org/dist/MooseX-Traits-Pluggable/
Rafael Kitover <rkitover@cpan.org>
<rkitover@cpan.org>
Tomas Doran, <bobtfish@bobtfish.net>
<bobtfish@bobtfish.net>
Copyright (c) 2009 - 2010 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.
To install MooseX::Traits::Pluggable, copy and paste the appropriate command in to your terminal.
cpanm
cpanm MooseX::Traits::Pluggable
CPAN shell
perl -MCPAN -e shell install MooseX::Traits::Pluggable
For more information on module installation, please visit the detailed CPAN module installation guide.