2 package MooseX::AttributeHelpers;
5 $VERSION = eval $VERSION;
6 our $AUTHORITY = 'cpan:STEVAN';
10 use MooseX::AttributeHelpers::Meta::Method::Provided;
11 use MooseX::AttributeHelpers::Meta::Method::Curried;
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;
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;
41 MooseX::AttributeHelpers - [DEPRECATED] Extend your attribute interfaces
43 =head1 MIGRATION GUIDE
45 This module started it's life as an experiment that has lately been migrated
46 to core in a slightly different form: L<Moose::Meta::Attribute::Native>
48 We have written a short L<MooseX::AttributeHelpers::MigrationGuide> to help you
55 use MooseX::AttributeHelpers;
58 metaclass => 'Collection::Hash',
60 isa => 'HashRef[Str]',
61 default => sub { {} },
63 exists => 'exists_in_mapping',
64 keys => 'ids_in_mapping',
69 set => { set_quantity => [ 'quantity' ] }
76 my $obj = MyClass->new;
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'
84 print $obj->get_mapping(5) if $obj->exists_in_mapping(5);
87 print join ', ', $obj->ids_in_mapping;
91 While L<Moose> attributes provide you with a way to name your accessors,
92 readers, writers, clearers and predicates, this library provides commonly
93 used attribute helper methods for more specific types of data.
95 As seen in the L</SYNOPSIS>, you specify the extension via the
96 C<metaclass> parameter. Available meta classes are:
102 This points to a hashref that uses C<provider> for the keys and
103 C<method> for the values. The method will be added to
104 the object itself and do what you want.
108 This points to a hashref that uses C<provider> for the keys and
109 has two choices for the value:
111 You can supply C<< {method => [ @args ]} >> for the values. The method will be
112 added to the object itself (always using C<@args> as the beginning arguments).
114 Another approach to curry a method provider is to supply a coderef instead of an
115 arrayref. The code ref takes C<$self>, C<$body>, and any additional arguments
116 passed to the final method.
122 times_with_day => sub {
123 my ($self, $body, $datetime) = @_;
124 $body->($self, sub { $_->ymd eq $datetime->ymd });
131 $obj->times_with_day(DateTime->now); # takes datetime argument, checks day
134 =head1 METHOD PROVIDERS
138 =item L<Number|MooseX::AttributeHelpers::Number>
140 Common numerical operations.
142 =item L<String|MooseX::AttributeHelpers::String>
144 Common methods for string operations.
146 =item L<Counter|MooseX::AttributeHelpers::Counter>
148 Methods for incrementing and decrementing a counter attribute.
150 =item L<Bool|MooseX::AttributeHelpers::Bool>
152 Common methods for boolean values.
154 =item L<Collection::Hash|MooseX::AttributeHelpers::Collection::Hash>
156 Common methods for hash references.
158 =item L<Collection::ImmutableHash|MooseX::AttributeHelpers::Collection::ImmutableHash>
160 Common methods for inspecting hash references.
162 =item L<Collection::Array|MooseX::AttributeHelpers::Collection::Array>
164 Common methods for array references.
166 =item L<Collection::List|MooseX::AttributeHelpers::Collection::List>
168 Common list methods for array references.
174 This is an early release of this module. Right now it is in great need
175 of documentation and tests in the test suite. However, we have used this
176 module to great success at C<$work> where it has been tested very thoroughly
177 and deployed into a major production site.
179 I plan on getting better docs and tests in the next few releases, but until
180 then please refer to the few tests we do have and feel free email and/or
181 message me on irc.perl.org if you have any questions.
185 We need tests and docs badly.
189 All complex software has bugs lurking in it, and this module is no
190 exception. If you find a bug please either email me, or add the bug
195 Stevan Little E<lt>stevan@iinteractive.comE<gt>
197 B<with contributions from:>
201 Paul (frodwith) Driver
205 Chris (perigrin) Prather
207 Robert (phaylon) Sedlacek
217 Florian (rafl) Ragwitz
223 =head1 COPYRIGHT AND LICENSE
225 Copyright 2007-2009 by Infinity Interactive, Inc.
227 L<http://www.iinteractive.com>
229 This library is free software; you can redistribute it and/or modify
230 it under the same terms as Perl itself.