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