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