README
1NAME
2 CatalystX::Component::Traits - Automatic Trait Loading and Resolution
3 for Catalyst Components
4
5SYNOPSIS
6 package Catalyst::Model::SomeModel;
7 with 'CatalystX::Component::Traits';
8
9 package MyApp::Model::MyModel;
10 use parent 'Catalyst::Model::SomeModel';
11
12 package MyApp;
13
14 __PACKAGE__->config('Model::MyModel' => {
15 traits => ['SearchedForTrait', '+Fully::Qualified::Trait']
16 });
17
18DESCRIPTION
19 Adds a "COMPONENT" in Catalyst::Component method to your Catalyst
20 component base class that reads the optional "traits" parameter from app
21 and component config and instantiates the component subclass with those
22 traits using "new_with_traits" in MooseX::Traits from
23 MooseX::Traits::Pluggable.
24
25TRAIT SEARCH
26 Trait names qualified with a "+" are taken to be full package names.
27
28 Unqualified names are searched for, using the algorithm described below.
29
30 EXAMPLE
31 Suppose your inheritance hierarchy is:
32
33 MyApp::Model::MyModel
34 Catalyst::Model::CatModel
35 Catalyst::Model
36 Catalyst::Component
37 Moose::Object
38
39 The configuration is:
40
41 traits => ['Foo']
42
43 The package search order for "Foo" will be:
44
45 MyApp::TraitFor::Model::CatModel::Foo
46 Catalyst::TraitFor::Model::CatModel::Foo
47
48 A MORE PATHOLOGICAL EXAMPLE
49 For:
50
51 My::App::Controller::AController
52 CatalystX::Something::ControllerBase::SomeController
53 Catalyst::Controller
54 Catalyst::Model
55 Catalyst::Component
56 Moose::Object
57
58 With:
59
60 traits => ['Foo']
61
62 Search order for "Foo" will be:
63
64 My::App::TraitFor::Controller::SomeController::Foo
65 CatalystX::Something::TraitFor::Controller::SomeController::Foo
66
67 The "Base" after (M|V|C) is automatically removed.
68
69TRAIT MERGING
70 Traits from component class config and app config are automatically
71 merged if you set the "_trait_merge" attribute default, e.g.:
72
73 has '+_trait_merge' => (default => 1);
74
75 You can remove component class config traits by prefixing their names
76 with a "-" in the app config traits.
77
78 For example:
79
80 package Catalyst::Model::Foo;
81 has '+_trait_merge' => (default => 1);
82 __PACKAGE__->config->{traits} = [qw/Foo Bar/];
83
84 package MyApp;
85 __PACKAGE__->config->{'Model::Foo'}{traits} = [qw/-Foo Baz/];
86
87 Will load the traits:
88
89 Bar Baz
90
91AUTHOR
92 Rafael Kitover, "<rkitover@cpan.org>"
93
94CONTRIBUTORS
95 Tomas Doran, "<bobtfish@bobtfish.net>"
96
97BUGS
98 Please report any bugs or feature requests to
99 "bug-catalystx-component-traits at rt.cpan.org", or through the web
100 interface at
101 <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=CatalystX-Component-Trai
102 ts>. I will be notified, and then you'll automatically be notified of
103 progress on your bug as I make changes.
104
105ACKNOWLEDGEMENTS
106 Matt S. Trout and Tomas Doran helped me with the current design.
107
108COPYRIGHT & LICENSE
109 Copyright (c) 2014, Rafael Kitover
110
111 This program is free software; you can redistribute it and/or modify it
112 under the same terms as Perl itself.
113
114