CatalystX::Component::UsertContributed Perl DocCatalystX::Component::Traits(3)NAMECatalystX::Component::Traits - Automatic Trait Loading and Resolution
for Catalyst Components
VERSION
Version 0.16
SYNOPSIS
package Catalyst::Model::SomeModel;
with 'CatalystX::Component::Traits';
package MyApp::Model::MyModel;
use parent 'Catalyst::Model::SomeModel';
package MyApp;
__PACKAGE__->config('Model::MyModel' => {
traits => ['SearchedForTrait', '+Fully::Qualified::Trait']
});
DESCRIPTION
Adds a "COMPONENT" in Catalyst::Component method to your Catalyst
component base class that reads the optional "traits" parameter from
app and component config and instantiates the component subclass with
those traits using "new_with_traits" in MooseX::Traits from
MooseX::Traits::Pluggable.
TRAIT SEARCH
Trait names qualified with a "+" are taken to be full package names.
Unqualified names are searched for, using the algorithm described
below.
EXAMPLE
Suppose your inheritance hierarchy is:
MyApp::Model::MyModel
Catalyst::Model::CatModel
Catalyst::Model
Catalyst::Component
Moose::Object
The configuration is:
traits => ['Foo']
The package search order for "Foo" will be:
MyApp::TraitFor::Model::CatModel::Foo
Catalyst::TraitFor::Model::CatModel::Foo
A MORE PATHOLOGICAL EXAMPLE
For:
My::App::Controller::AController
CatalystX::Something::ControllerBase::SomeController
Catalyst::Controller
Catalyst::Model
Catalyst::Component
Moose::Object
With:
traits => ['Foo']
Search order for "Foo" will be:
My::App::TraitFor::Controller::SomeController::Foo
CatalystX::Something::TraitFor::Controller::SomeController::Foo
The "Base" after (M|V|C) is automatically removed.
TRAIT MERGING
Traits from component class config and app config are automatically
merged if you set the "_trait_merge" attribute default, e.g.:
has '+_trait_merge' => (default => 1);
You can remove component class config traits by prefixing their names
with a "-" in the app config traits.
For example:
package Catalyst::Model::Foo;
has '+_trait_merge' => (default => 1);
__PACKAGE__->config->{traits} = [qw/Foo Bar/];
package MyApp;
__PACKAGE__->config->{'Model::Foo'}{traits} = [qw/-Foo Baz/];
Will load the traits:
Bar Baz
AUTHOR
Rafael Kitover, "<rkitover@cpan.org>"
CONTRIBUTORS
Tomas Doran, "<bobtfish@bobtfish.net>"
BUGS
Please report any bugs or feature requests to
"bug-catalystx-component-traits at rt.cpan.org", or through the web
interface at
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=CatalystX-Component-Traits
<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=CatalystX-Component-
Traits>. I will be notified, and then you'll automatically be notified
of progress on your bug as I make changes.
SUPPORT
More information at:
· RT: CPAN's request tracker
http://rt.cpan.org/NoAuth/Bugs.html?Dist=CatalystX-Component-Traits
<http://rt.cpan.org/NoAuth/Bugs.html?Dist=CatalystX-Component-
Traits>
· AnnoCPAN: Annotated CPAN documentation
http://annocpan.org/dist/CatalystX-Component-Traits
<http://annocpan.org/dist/CatalystX-Component-Traits>
· CPAN Ratings
http://cpanratings.perl.org/d/CatalystX-Component-Traits
<http://cpanratings.perl.org/d/CatalystX-Component-Traits>
· Search CPAN
http://search.cpan.org/dist/CatalystX-Component-Traits/
<http://search.cpan.org/dist/CatalystX-Component-Traits/>
ACKNOWLEDGEMENTS
Matt S. Trout and Tomas Doran helped me with the current design.
COPYRIGHT & LICENSE
Copyright (c) 2009, Rafael Kitover
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
perl v5.14.1 2010-08-26 CatalystX::Component::Traits(3)