File Coverage

blib/lib/MooseX/AttributeHelpers.pm
Criterion Covered Total %
statement 1 3 33.3
branch n/a
condition n/a
subroutine 1 1 100.0
pod n/a
total 2 4 50.0


line stmt bran cond sub pod time code
1              
2             package MooseX::AttributeHelpers;
3              
4             our $VERSION = '0.23';
5             $VERSION = eval $VERSION;
6             our $AUTHORITY = 'cpan:STEVAN';
7              
8 14     14   550433 use Moose 0.56 ();
  0            
  0            
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