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