logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

CatalystX::Component::Traits - Automatic Trait Loading and Resolution for Catalyst Components

Acknowledgements

       Matt S. Trout and Tomas Doran helped me with the current design.

Author

       Rafael Kitover, "<rkitover@cpan.org>"

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>.  I will
       be notified, and then you'll automatically be notified of progress on your bug as I make changes.

Contributors

       Tomas Doran, "<bobtfish@bobtfish.net>"

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.

Name

       CatalystX::Component::Traits - Automatic Trait Loading and Resolution for Catalyst Components

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']
           });

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

See Also