Add [DEPRECATED] and MigrationGuide
[gitmo/MooseX-AttributeHelpers.git] / lib / MooseX / AttributeHelpers.pm
CommitLineData
22d869ff 1
2package MooseX::AttributeHelpers;
3
3ebd23e6 4our $VERSION = '0.22';
38430345 5$VERSION = eval $VERSION;
22d869ff 6our $AUTHORITY = 'cpan:STEVAN';
7
2dc1c4f7 8use Moose 0.56 ();
9
8f7951c9 10use MooseX::AttributeHelpers::Meta::Method::Provided;
c43a2317 11use MooseX::AttributeHelpers::Meta::Method::Curried;
8f7951c9 12
cf0d1310 13use MooseX::AttributeHelpers::Trait::Bool;
d56ad8bf 14use MooseX::AttributeHelpers::Trait::Counter;
e9d1a9c4 15use MooseX::AttributeHelpers::Trait::Number;
dc94988e 16use MooseX::AttributeHelpers::Trait::String;
16f40f07 17use MooseX::AttributeHelpers::Trait::Collection::List;
7b9312d8 18use MooseX::AttributeHelpers::Trait::Collection::Array;
5646987e 19use MooseX::AttributeHelpers::Trait::Collection::Hash;
7bf3c9a7 20use MooseX::AttributeHelpers::Trait::Collection::ImmutableHash;
cf4136b4 21use MooseX::AttributeHelpers::Trait::Collection::Bag;
d56ad8bf 22
22d869ff 23use MooseX::AttributeHelpers::Counter;
565fe238 24use MooseX::AttributeHelpers::Number;
190b1c02 25use MooseX::AttributeHelpers::String;
063fae5e 26use MooseX::AttributeHelpers::Bool;
457dc4fb 27use MooseX::AttributeHelpers::Collection::List;
22d869ff 28use MooseX::AttributeHelpers::Collection::Array;
29use MooseX::AttributeHelpers::Collection::Hash;
9a976497 30use MooseX::AttributeHelpers::Collection::ImmutableHash;
31use MooseX::AttributeHelpers::Collection::Bag;
22d869ff 32
331;
34
35__END__
36
37=pod
38
39=head1 NAME
40
6af1e11b 41MooseX::AttributeHelpers - [DEPRECATED] Extend your attribute interfaces
42
43=head1 MIGRATION GUIDE
44
45This module started it's life as an experiment that has lately been migrated
46to core in a slightly different form: L<Moose::Meta::Attribute::Native>
47
48We have written a short L<MooseX::AttributeHelpers::MigrationGuide> to help you
49migrate your code
fa4df2e6 50
22d869ff 51=head1 SYNOPSIS
52
e295d072 53 package MyClass;
54 use Moose;
5431dff2 55 use MooseX::AttributeHelpers;
e295d072 56
5431dff2 57 has 'mapping' => (
e295d072 58 metaclass => 'Collection::Hash',
59 is => 'rw',
5431dff2 60 isa => 'HashRef[Str]',
e295d072 61 default => sub { {} },
62 provides => {
63 exists => 'exists_in_mapping',
64 keys => 'ids_in_mapping',
65 get => 'get_mapping',
66 set => 'set_mapping',
67 },
c43a2317 68 curries => {
3656a0d7 69 set => { set_quantity => [ 'quantity' ] }
c43a2317 70 }
e295d072 71 );
72
696d4dc7 73
e295d072 74 # ...
75
76 my $obj = MyClass->new;
c43a2317 77 $obj->set_quantity(10); # quantity => 10
78 $obj->set_mapping(4, 'foo'); # 4 => 'foo'
79 $obj->set_mapping(5, 'bar'); # 5 => 'bar'
80 $obj->set_mapping(6, 'baz'); # 6 => 'baz'
e295d072 81
e295d072 82
83 # prints 'bar'
84 print $obj->get_mapping(5) if $obj->exists_in_mapping(5);
85
86 # prints '4, 5, 6'
87 print join ', ', $obj->ids_in_mapping;
88
22d869ff 89=head1 DESCRIPTION
90
e295d072 91While L<Moose> attributes provide you with a way to name your accessors,
92readers, writers, clearers and predicates, this library provides commonly
93used attribute helper methods for more specific types of data.
94
95As seen in the L</SYNOPSIS>, you specify the extension via the
96C<metaclass> parameter. Available meta classes are:
97
c43a2317 98=head1 PARAMETERS
99
100=head2 provides
101
102This points to a hashref that uses C<provider> for the keys and
3656a0d7 103C<method> for the values. The method will be added to
c43a2317 104the object itself and do what you want.
105
106=head2 curries
107
108This points to a hashref that uses C<provider> for the keys and
696d4dc7 109has two choices for the value:
110
111You can supply C<< {method => [ @args ]} >> for the values. The method will be
112added to the object itself (always using C<@args> as the beginning arguments).
113
114Another approach to curry a method provider is to supply a coderef instead of an
115arrayref. The code ref takes C<$self>, C<$body>, and any additional arguments
116passed to the final method.
117
118 # ...
119
120 curries => {
121 grep => {
122 times_with_day => sub {
123 my ($self, $body, $datetime) = @_;
124 $body->($self, sub { $_->ymd eq $datetime->ymd });
125 }
126 }
127 }
128
129 # ...
130
131 $obj->times_with_day(DateTime->now); # takes datetime argument, checks day
132
c43a2317 133
134=head1 METHOD PROVIDERS
135
e295d072 136=over
137
138=item L<Number|MooseX::AttributeHelpers::Number>
139
140Common numerical operations.
141
46ff42eb 142=item L<String|MooseX::AttributeHelpers::String>
143
144Common methods for string operations.
145
e295d072 146=item L<Counter|MooseX::AttributeHelpers::Counter>
147
148Methods for incrementing and decrementing a counter attribute.
149
c9fd9db5 150=item L<Bool|MooseX::AttributeHelpers::Bool>
ebef5ea9 151
152Common methods for boolean values.
153
e295d072 154=item L<Collection::Hash|MooseX::AttributeHelpers::Collection::Hash>
155
156Common methods for hash references.
157
46ff42eb 158=item L<Collection::ImmutableHash|MooseX::AttributeHelpers::Collection::ImmutableHash>
159
160Common methods for inspecting hash references.
161
e295d072 162=item L<Collection::Array|MooseX::AttributeHelpers::Collection::Array>
163
164Common methods for array references.
165
72a41843 166=item L<Collection::List|MooseX::AttributeHelpers::Collection::List>
457dc4fb 167
168Common list methods for array references.
169
e295d072 170=back
171
5431dff2 172=head1 CAVEAT
173
174This is an early release of this module. Right now it is in great need
175of documentation and tests in the test suite. However, we have used this
c91a1347 176module to great success at C<$work> where it has been tested very thoroughly
5431dff2 177and deployed into a major production site.
178
179I plan on getting better docs and tests in the next few releases, but until
180then please refer to the few tests we do have and feel free email and/or
181message me on irc.perl.org if you have any questions.
182
183=head1 TODO
184
185We need tests and docs badly.
186
22d869ff 187=head1 BUGS
188
189All complex software has bugs lurking in it, and this module is no
190exception. If you find a bug please either email me, or add the bug
191to cpan-RT.
192
193=head1 AUTHOR
194
195Stevan Little E<lt>stevan@iinteractive.comE<gt>
196
5431dff2 197B<with contributions from:>
198
199Robert (rlb3) Boone
200
e8013350 201Paul (frodwith) Driver
202
203Shawn (Sartak) Moore
204
5431dff2 205Chris (perigrin) Prather
206
207Robert (phaylon) Sedlacek
208
38abf787 209Tom (dec) Lanyon
210
eca30395 211Yuval Kogman
212
ebef5ea9 213Jason May
214
491b1b07 215Cory (gphat) Watson
216
1245fd8e 217Florian (rafl) Ragwitz
218
8e08f322 219Evan Carroll
220
3dd561ff 221Jesse (doy) Luehrs
222
22d869ff 223=head1 COPYRIGHT AND LICENSE
224
9c5d164e 225Copyright 2007-2009 by Infinity Interactive, Inc.
22d869ff 226
227L<http://www.iinteractive.com>
228
229This library is free software; you can redistribute it and/or modify
230it under the same terms as Perl itself.
231
e295d072 232=cut