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