CatalystX::Component::Traits3pm
Automatic trait loading and resolution for catalyst components
Usage
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']});
Overview
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::MyModelCatalyst::Model::CatModelCatalyst::ModelCatalyst::ComponentMoose::Object
The configuration is:
traits => ['Foo']
The package search order for "Foo" will be:
MyApp::TraitFor::Model::CatModel::FooCatalyst::TraitFor::Model::CatModel::Foo
A more pathological example
For:
My::App::Controller::AControllerCatalystX::Something::ControllerBase::SomeControllerCatalyst::ControllerCatalyst::ModelCatalyst::ComponentMoose::Object
With:
traits => ['Foo']
Search order for "Foo" will be:
My::App::TraitFor::Controller::SomeController::FooCatalystX::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
Contributors
Tomas Doran, "<[email protected]>"
Acknowledgements
Matt S. Trout and Tomas Doran helped me with the current design.
Copyright & license
Copyright (c) 2014, Rafael Kitover
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Releases
8 releases since Debian 6.0 (Squeeze); the text changed 4 times.