1CatalystX::Component::TUrsaeirtsC(o3n)tributed Perl DocuCmaetnatlaytsitoXn::Component::Traits(3)
2
3
4

NAME

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

SYNOPSIS

10           package Catalyst::Model::SomeModel;
11           with 'CatalystX::Component::Traits';
12
13           package MyApp::Model::MyModel;
14           use parent 'Catalyst::Model::SomeModel';
15
16           package MyApp;
17
18           __PACKAGE__->config('Model::MyModel' => {
19               traits => ['SearchedForTrait', '+Fully::Qualified::Trait']
20           });
21

DESCRIPTION

23       Adds a "COMPONENT" in Catalyst::Component method to your Catalyst
24       component base class that reads the optional "traits" parameter from
25       app and component config and instantiates the component subclass with
26       those traits using "new_with_traits" in MooseX::Traits from
27       MooseX::Traits::Pluggable.
28
30       Trait names qualified with a "+" are taken to be full package names.
31
32       Unqualified names are searched for, using the algorithm described
33       below.
34
35   EXAMPLE
36       Suppose your inheritance hierarchy is:
37
38           MyApp::Model::MyModel
39           Catalyst::Model::CatModel
40           Catalyst::Model
41           Catalyst::Component
42           Moose::Object
43
44       The configuration is:
45
46           traits => ['Foo']
47
48       The package search order for "Foo" will be:
49
50           MyApp::TraitFor::Model::CatModel::Foo
51           Catalyst::TraitFor::Model::CatModel::Foo
52
53   A MORE PATHOLOGICAL EXAMPLE
54       For:
55
56           My::App::Controller::AController
57           CatalystX::Something::ControllerBase::SomeController
58           Catalyst::Controller
59           Catalyst::Model
60           Catalyst::Component
61           Moose::Object
62
63       With:
64
65           traits => ['Foo']
66
67       Search order for "Foo" will be:
68
69           My::App::TraitFor::Controller::SomeController::Foo
70           CatalystX::Something::TraitFor::Controller::SomeController::Foo
71
72       The "Base" after (M|V|C) is automatically removed.
73

TRAIT MERGING

75       Traits from component class config and app config are automatically
76       merged if you set the "_trait_merge" attribute default, e.g.:
77
78           has '+_trait_merge' => (default => 1);
79
80       You can remove component class config traits by prefixing their names
81       with a "-" in the app config traits.
82
83       For example:
84
85           package Catalyst::Model::Foo;
86           has '+_trait_merge' => (default => 1);
87           __PACKAGE__->config->{traits} = [qw/Foo Bar/];
88
89           package MyApp;
90           __PACKAGE__->config->{'Model::Foo'}{traits} = [qw/-Foo Baz/];
91
92       Will load the traits:
93
94           Bar Baz
95

AUTHOR

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

CONTRIBUTORS

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

BUGS

103       Please report any bugs or feature requests to
104       "bug-catalystx-component-traits at rt.cpan.org", or through the web
105       interface at
106       <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=CatalystX-Component-Traits>.
107       I will be notified, and then you'll automatically be notified of
108       progress on your bug as I make changes.
109

ACKNOWLEDGEMENTS

111       Matt S. Trout and Tomas Doran helped me with the current design.
112
114       Copyright (c) 2014, Rafael Kitover
115
116       This program is free software; you can redistribute it and/or modify it
117       under the same terms as Perl itself.
118
119
120
121perl v5.30.1                      2020-01-29   CatalystX::Component::Traits(3)
Impressum