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 - Extend your attribute interfaces (deprecated)
47 use MooseX::AttributeHelpers;
50 metaclass => 'Collection::Hash',
52 isa => 'HashRef[Str]',
53 default => sub { {} },
55 exists => 'exists_in_mapping',
56 keys => 'ids_in_mapping',
61 set => { set_quantity => [ 'quantity' ] }
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'
76 print $obj->get_mapping(5) if $obj->exists_in_mapping(5);
79 print join ', ', $obj->ids_in_mapping;
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.>
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.
91 As seen in the L</SYNOPSIS>, you specify the extension via the
92 C<metaclass> parameter. Available meta classes are:
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.
104 This points to a hashref that uses C<provider> for the keys and
105 has two choices for the value:
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).
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.
118 times_with_day => sub {
119 my ($self, $body, $datetime) = @_;
120 $body->($self, sub { $_->ymd eq $datetime->ymd });
127 $obj->times_with_day(DateTime->now); # takes datetime argument, checks day
130 =head1 METHOD PROVIDERS
134 =item L<Number|MooseX::AttributeHelpers::Number>
136 Common numerical operations.
138 =item L<String|MooseX::AttributeHelpers::String>
140 Common methods for string operations.
142 =item L<Counter|MooseX::AttributeHelpers::Counter>
144 Methods for incrementing and decrementing a counter attribute.
146 =item L<Bool|MooseX::AttributeHelpers::Bool>
148 Common methods for boolean values.
150 =item L<Collection::Hash|MooseX::AttributeHelpers::Collection::Hash>
152 Common methods for hash references.
154 =item L<Collection::ImmutableHash|MooseX::AttributeHelpers::Collection::ImmutableHash>
156 Common methods for inspecting hash references.
158 =item L<Collection::Array|MooseX::AttributeHelpers::Collection::Array>
160 Common methods for array references.
162 =item L<Collection::List|MooseX::AttributeHelpers::Collection::List>
164 Common list methods for array references.
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.
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.
181 We need tests and docs badly.
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
191 Stevan Little E<lt>stevan@iinteractive.comE<gt>
193 B<with contributions from:>
197 Paul (frodwith) Driver
201 Chris (perigrin) Prather
203 Robert (phaylon) Sedlacek
213 Florian (rafl) Ragwitz
219 =head1 COPYRIGHT AND LICENSE
221 Copyright 2007-2009 by Infinity Interactive, Inc.
223 L<http://www.iinteractive.com>
225 This library is free software; you can redistribute it and/or modify
226 it under the same terms as Perl itself.