MooseX::Traits::Pluggable.3pm

Langue: en

Autres versions - même langue

Version: 2009-08-27 (ubuntu - 24/10/10)

Section: 3 (Bibliothèques de fonctions)

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 2008 Infinity Interactive, Inc.

<http://www.iinteractive.com>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.