Prep for version 0.12_01 release to match Moose & MOP dev releases.
[gitmo/MooseX-AttributeHelpers.git] / lib / MooseX / AttributeHelpers / MethodProvider / List.pm
CommitLineData
457dc4fb 1package MooseX::AttributeHelpers::MethodProvider::List;
2use Moose::Role;
3
38430345 4our $VERSION = '0.12_01';
5$VERSION = eval $VERSION;
457dc4fb 6our $AUTHORITY = 'cpan:STEVAN';
7
8sub count : method {
9 my ($attr, $reader, $writer) = @_;
10 return sub {
11 scalar @{$reader->($_[0])}
12 };
13}
14
15sub empty : method {
16 my ($attr, $reader, $writer) = @_;
17 return sub {
facf2175 18 scalar @{$reader->($_[0])} ? 1 : 0
457dc4fb 19 };
20}
21
22sub find : method {
23 my ($attr, $reader, $writer) = @_;
24 return sub {
25 my ($instance, $predicate) = @_;
26 foreach my $val (@{$reader->($instance)}) {
27 return $val if $predicate->($val);
28 }
29 return;
30 };
31}
32
33sub map : method {
34 my ($attr, $reader, $writer) = @_;
35 return sub {
36 my ($instance, $f) = @_;
37 CORE::map { $f->($_) } @{$reader->($instance)}
38 };
39}
40
41sub grep : method {
42 my ($attr, $reader, $writer) = @_;
43 return sub {
44 my ($instance, $predicate) = @_;
45 CORE::grep { $predicate->($_) } @{$reader->($instance)}
46 };
47}
48
6f60a71e 49sub elements : method {
50 my ($attr, $reader, $writer) = @_;
51 return sub {
c80e1668 52 my ($instance) = @_;
6f60a71e 53 @{$reader->($instance)}
54 };
55}
56
654096bc 57sub join : method {
58 my ($attr, $reader, $writer) = @_;
59 return sub {
60 my ($instance, $separator) = @_;
61 join $separator, @{$reader->($instance)}
62 };
63}
64
b77cfe61 65sub get : method {
66 my ($attr, $reader, $writer) = @_;
67 return sub {
68 $reader->($_[0])->[$_[1]]
69 };
70}
71
72sub first : method {
73 my ($attr, $reader, $writer) = @_;
74 return sub {
75 $reader->($_[0])->[0]
76 };
77}
78
79sub last : method {
80 my ($attr, $reader, $writer) = @_;
81 return sub {
82 $reader->($_[0])->[-1]
83 };
84}
85
457dc4fb 861;
87
88__END__
89
90=pod
91
92=head1 NAME
93
94MooseX::AttributeHelpers::MethodProvider::List
95
96=head1 DESCRIPTION
97
98This is a role which provides the method generators for
99L<MooseX::AttributeHelpers::Collection::List>.
100
101=head1 METHODS
102
103=over 4
104
105=item B<meta>
106
107=back
108
109=head1 PROVIDED METHODS
110
111=over 4
112
113=item B<count>
114
115=item B<empty>
116
117=item B<find>
118
119=item B<grep>
120
121=item B<map>
122
6f60a71e 123=item B<elements>
124
654096bc 125=item B<join>
126
b77cfe61 127=item B<get>
128
129=item B<first>
130
131=item B<last>
132
457dc4fb 133=back
134
135=head1 BUGS
136
137All complex software has bugs lurking in it, and this module is no
138exception. If you find a bug please either email me, or add the bug
139to cpan-RT.
140
141=head1 AUTHOR
142
143Stevan Little E<lt>stevan@iinteractive.comE<gt>
144
145=head1 COPYRIGHT AND LICENSE
146
99c62fb8 147Copyright 2007-2008 by Infinity Interactive, Inc.
457dc4fb 148
149L<http://www.iinteractive.com>
150
151This library is free software; you can redistribute it and/or modify
152it under the same terms as Perl itself.
153
154=cut