bump version to 1.15
[gitmo/Moose.git] / lib / Moose / Meta / Attribute / Native / Trait / Array.pm
CommitLineData
e3c07b19 1
c466e58f 2package Moose::Meta::Attribute::Native::Trait::Array;
e3c07b19 3use Moose::Role;
4
efa728b4 5our $VERSION = '1.15';
e3c07b19 6$VERSION = eval $VERSION;
7our $AUTHORITY = 'cpan:STEVAN';
8
a7821be5 9use Moose::Meta::Method::Accessor::Native::Array::accessor;
10use Moose::Meta::Method::Accessor::Native::Array::clear;
f7fd22b6 11use Moose::Meta::Method::Accessor::Native::Array::count;
a7821be5 12use Moose::Meta::Method::Accessor::Native::Array::delete;
f7fd22b6 13use Moose::Meta::Method::Accessor::Native::Array::elements;
14use Moose::Meta::Method::Accessor::Native::Array::first;
910684ee 15use Moose::Meta::Method::Accessor::Native::Array::get;
16use Moose::Meta::Method::Accessor::Native::Array::grep;
a7821be5 17use Moose::Meta::Method::Accessor::Native::Array::insert;
f7fd22b6 18use Moose::Meta::Method::Accessor::Native::Array::is_empty;
910684ee 19use Moose::Meta::Method::Accessor::Native::Array::join;
f7fd22b6 20use Moose::Meta::Method::Accessor::Native::Array::map;
a7821be5 21use Moose::Meta::Method::Accessor::Native::Array::natatime;
22use Moose::Meta::Method::Accessor::Native::Array::pop;
f7fd22b6 23use Moose::Meta::Method::Accessor::Native::Array::push;
910684ee 24use Moose::Meta::Method::Accessor::Native::Array::reduce;
a7821be5 25use Moose::Meta::Method::Accessor::Native::Array::set;
26use Moose::Meta::Method::Accessor::Native::Array::shift;
910684ee 27use Moose::Meta::Method::Accessor::Native::Array::shuffle;
a7821be5 28use Moose::Meta::Method::Accessor::Native::Array::splice;
910684ee 29use Moose::Meta::Method::Accessor::Native::Array::sort;
a7821be5 30use Moose::Meta::Method::Accessor::Native::Array::sort_in_place;
910684ee 31use Moose::Meta::Method::Accessor::Native::Array::uniq;
a7821be5 32use Moose::Meta::Method::Accessor::Native::Array::unshift;
f7fd22b6 33
c466e58f 34with 'Moose::Meta::Attribute::Native::Trait';
e3c07b19 35
2e069f5a 36sub _helper_type { 'ArrayRef' }
e3c07b19 37
38no Moose::Role;
39
e3c07b19 401;
41
42__END__
43
44=pod
45
46=head1 NAME
47
2420461c 48Moose::Meta::Attribute::Native::Trait::Array - Helper trait for ArrayRef attributes
e3c07b19 49
50=head1 SYNOPSIS
51
33f819e1 52 package Stuff;
53 use Moose;
33f819e1 54
55 has 'options' => (
56 traits => ['Array'],
57 is => 'ro',
58 isa => 'ArrayRef[Str]',
59 default => sub { [] },
9610c1d2 60 handles => {
61 all_options => 'elements',
39e17fef 62 add_option => 'push',
9610c1d2 63 map_options => 'map',
64 filter_options => 'grep',
65 find_option => 'first',
66 get_option => 'get',
67 join_options => 'join',
68 count_options => 'count',
39e17fef 69 has_options => 'count',
9610c1d2 70 has_no_options => 'is_empty',
71 sorted_options => 'sort',
72 },
33f819e1 73 );
74
75 no Moose;
76 1;
80683705 77
e3c07b19 78=head1 DESCRIPTION
79
80This module provides an Array attribute which provides a number of
80683705 81array operations.
33f819e1 82
83=head1 PROVIDED METHODS
84
33f819e1 85=over 4
86
87=item B<count>
88
89Returns the number of elements in the array.
90
91 $stuff = Stuff->new;
92 $stuff->options(["foo", "bar", "baz", "boo"]);
93
94 my $count = $stuff->count_options;
95 print "$count\n"; # prints 4
96
1853a27e 97=item B<is_empty>
33f819e1 98
276828fa 99Returns a boolean value that is true when the array has no elements.
33f819e1 100
af44c00c 101 $stuff->has_no_options ? die "No options!\n" : print "Good boy.\n";
33f819e1 102
cd50e921 103=item B<elements>
104
105Returns all of the elements of the array.
106
107 my @option = $stuff->all_options;
108 print "@options\n"; # prints "foo bar baz boo"
109
110=item B<get($index)>
111
112Returns an element of the array by its index. You can also use negative index
113numbers, just as with Perl's core array handling.
114
115 my $option = $stuff->get_option(1);
116 print "$option\n"; # prints "bar"
117
118=item B<pop>
119
39e17fef 120=item B<push($value1, $value2, value3 ...)>
cd50e921 121
122=item B<shift>
123
39e17fef 124=item B<unshift($value1, $value2, value3 ...)>
cd50e921 125
126=item B<splice($offset, $length, @values)>
127
128These methods are all equivalent to the Perl core functions of the same name.
129
391c761c 130=item B<first( sub { ... } )>
33f819e1 131
7960bcc0 132This method returns the first item matching item in the array, just like
133L<List::Util>'s C<first> function. The matching is done with a subroutine
134reference you pass to this method. The reference will be called against each
135element in the array until one matches or all elements have been checked.
33f819e1 136
c9edbf05 137 my $found = $stuff->find_option( sub { /^b/ } );
33f819e1 138 print "$found\n"; # prints "bar"
139
cd50e921 140=item B<grep( sub { ... } )>
33f819e1 141
80683705 142This method returns every element matching a given criteria, just like Perl's
143core C<grep> function. This method requires a subroutine which implements the
144matching logic.
33f819e1 145
c9edbf05 146 my @found = $stuff->filter_options( sub { /^b/ } );
33f819e1 147 print "@found\n"; # prints "bar baz boo"
148
cd50e921 149=item B<map( sub { ... } )>
33f819e1 150
80683705 151This method transforms every element in the array and returns a new array,
152just like Perl's core C<map> function. This method requires a subroutine which
153implements the transformation.
33f819e1 154
c9edbf05 155 my @mod_options = $stuff->map_options( sub { $_ . "-tag" } );
33f819e1 156 print "@mod_options\n"; # prints "foo-tag bar-tag baz-tag boo-tag"
157
7960bcc0 158=item B<reduce( sub { ... } )>
159
160This method condenses an array into a single value, by passing a function the
161value so far and the next value in the array, just like L<List::Util>'s
162C<reduce> function. The reducing is done with a subroutine reference you pass
163to this method.
164
165 my $found = $stuff->reduce_options( sub { $_[0] . $_[1] } );
166 print "$found\n"; # prints "foobarbazboo"
167
cd50e921 168=item B<sort( sub { ... } )>
33f819e1 169
80683705 170Returns a the array in sorted order.
33f819e1 171
80683705 172You can provide an optional subroutine reference to sort with (as you can with
173Perl's core C<sort> function). However, instead of using C<$a> and C<$b>, you
174will need to use C<$_[0]> and C<$_[1]> instead.
33f819e1 175
176 # ascending ASCIIbetical
177 my @sorted = $stuff->sort_options();
178
179 # Descending alphabetical order
180 my @sorted_options = $stuff->sort_options( sub { lc $_[1] cmp lc $_[0] } );
181 print "@sorted_options\n"; # prints "foo boo baz bar"
182
cd50e921 183=item B<sort_in_place>
33f819e1 184
cd50e921 185Sorts the array I<in place>, modifying the value of the attribute.
33f819e1 186
cd50e921 187You can provide an optional subroutine reference to sort with (as you can with
188Perl's core C<sort> function). However, instead of using C<$a> and C<$b>, you
189will need to use C<$_[0]> and C<$_[1]> instead.
33f819e1 190
7960bcc0 191=item B<shuffle>
192
193Returns the array, with indices in random order, like C<shuffle> from
194L<List::Util>.
195
196=item B<uniq>
197
198Returns the array, with all duplicate elements removed, like C<uniq> from
199L<List::MoreUtils>.
200
cd50e921 201=item B<join($str)>
33f819e1 202
80683705 203Joins every element of the array using the separator given as argument, just
204like Perl's core C<join> function.
33f819e1 205
206 my $joined = $stuff->join_options( ':' );
207 print "$joined\n"; # prints "foo:bar:baz:boo"
208
cd50e921 209=item B<set($index, $value)>
33f819e1 210
cd50e921 211Given an index and a value, sets the specified array element's value.
33f819e1 212
cd50e921 213=item B<delete($index)>
214
215Removes the element at the given index from the array.
216
217=item B<insert($index, $value)>
218
219Inserts a new element into the array at the given index.
220
221=item B<clear>
222
223Empties the entire array, like C<@array = ()>.
33f819e1 224
33f819e1 225=item B<accessor>
226
80683705 227This method provides a get/set accessor for the array, based on array indexes.
228If passed one argument, it returns the value at the specified index. If
229passed two arguments, it sets the value of the specified index.
33f819e1 230
7960bcc0 231=item B<natatime($n, $code)>
232
233This method returns an iterator which, on each call, returns C<$n> more items
234from the array, in order, like C<natatime> from L<List::MoreUtils>. A coderef
235can optionally be provided; it will be called on each group of C<$n> elements
236in the array.
237
33f819e1 238=back
e3c07b19 239
240=head1 METHODS
241
242=over 4
243
244=item B<meta>
245
e3c07b19 246=back
247
248=head1 BUGS
249
d4048ef3 250See L<Moose/BUGS> for details on reporting bugs.
e3c07b19 251
252=head1 AUTHOR
253
254Stevan Little E<lt>stevan@iinteractive.comE<gt>
255
256=head1 COPYRIGHT AND LICENSE
257
258Copyright 2007-2009 by Infinity Interactive, Inc.
259
260L<http://www.iinteractive.com>
261
262This library is free software; you can redistribute it and/or modify
263it under the same terms as Perl itself.
264
265=cut