fix up some abstracts
[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
c466e58f 5with 'Moose::Meta::Attribute::Native::Trait';
e3c07b19 6
2e069f5a 7sub _helper_type { 'ArrayRef' }
e3c07b19 8
9no Moose::Role;
10
e3c07b19 111;
12
e818d161 13# ABSTRACT: Helper trait for ArrayRef attributes
ad46f524 14
e3c07b19 15__END__
16
17=pod
18
e3c07b19 19=head1 SYNOPSIS
20
33f819e1 21 package Stuff;
22 use Moose;
33f819e1 23
24 has 'options' => (
e132fd56 25 traits => ['Array'],
26 is => 'ro',
27 isa => 'ArrayRef[Str]',
28 default => sub { [] },
29 handles => {
30 all_options => 'elements',
31 add_option => 'push',
32 map_options => 'map',
33 filter_options => 'grep',
34 find_option => 'first',
35 get_option => 'get',
36 join_options => 'join',
37 count_options => 'count',
38 has_options => 'count',
39 has_no_options => 'is_empty',
40 sorted_options => 'sort',
41 },
33f819e1 42 );
43
44 no Moose;
45 1;
80683705 46
e3c07b19 47=head1 DESCRIPTION
48
7795e4de 49This trait provides native delegation methods for array references.
50
51=head1 DEFAULT TYPE
52
53If you don't provide an C<isa> value for your attribute, it will default to
54C<ArrayRef>.
33f819e1 55
56=head1 PROVIDED METHODS
57
33f819e1 58=over 4
59
e132fd56 60=item * B<count>
33f819e1 61
62Returns the number of elements in the array.
63
e132fd56 64 $stuff = Stuff->new;
65 $stuff->options( [ "foo", "bar", "baz", "boo" ] );
33f819e1 66
e132fd56 67 print $stuff->count_options; # prints 4
33f819e1 68
e132fd56 69This method does not accept any arguments.
70
71=item * B<is_empty>
33f819e1 72
276828fa 73Returns a boolean value that is true when the array has no elements.
33f819e1 74
e132fd56 75 $stuff->has_no_options ? die "No options!\n" : print "Good boy.\n";
76
77This method does not accept any arguments.
78
79=item * B<elements>
33f819e1 80
e132fd56 81Returns all of the elements of the array as an array (not an array reference).
cd50e921 82
e132fd56 83 my @option = $stuff->all_options;
84 print "@options\n"; # prints "foo bar baz boo"
cd50e921 85
e132fd56 86This method does not accept any arguments.
cd50e921 87
e132fd56 88=item * B<get($index)>
cd50e921 89
90Returns an element of the array by its index. You can also use negative index
91numbers, just as with Perl's core array handling.
92
e132fd56 93 my $option = $stuff->get_option(1);
94 print "$option\n"; # prints "bar"
95
96If the specified element does not exist, this will return C<undef>.
97
ea867421 98This method accepts just one argument.
e132fd56 99
100=item * B<pop>
101
102Just like Perl's builtin C<pop>.
103
104This method does not accept any arguments.
105
106=item * B<push($value1, $value2, value3 ...)>
107
108Just like Perl's builtin C<push>. Returns the number of elements in the new
109array.
110
111This method accepts any number of arguments.
112
113=item * B<shift>
cd50e921 114
e132fd56 115Just like Perl's builtin C<shift>.
cd50e921 116
e132fd56 117This method does not accept any arguments.
cd50e921 118
e132fd56 119=item * B<unshift($value1, $value2, value3 ...)>
cd50e921 120
e132fd56 121Just like Perl's builtin C<unshift>. Returns the number of elements in the new
122array.
cd50e921 123
e132fd56 124This method accepts any number of arguments.
cd50e921 125
e132fd56 126=item * B<splice($offset, $length, @values)>
cd50e921 127
e132fd56 128Just like Perl's builtin C<splice>. In scalar context, this returns the last
129element removed, or C<undef> if no elements were removed. In list context,
130this returns all the elements removed from the array.
131
132This method requires at least one argument.
133
134=item * B<first( sub { ... } )>
33f819e1 135
7960bcc0 136This method returns the first item matching item in the array, just like
137L<List::Util>'s C<first> function. The matching is done with a subroutine
e132fd56 138reference you pass to this method. The subroutine will be called against each
7960bcc0 139element in the array until one matches or all elements have been checked.
33f819e1 140
e132fd56 141 my $found = $stuff->find_option( sub {/^b/} );
142 print "$found\n"; # prints "bar"
143
144This method requires a single argument.
33f819e1 145
e132fd56 146=item * B<grep( sub { ... } )>
33f819e1 147
80683705 148This method returns every element matching a given criteria, just like Perl's
149core C<grep> function. This method requires a subroutine which implements the
150matching logic.
33f819e1 151
e132fd56 152 my @found = $stuff->filter_options( sub {/^b/} );
153 print "@found\n"; # prints "bar baz boo"
33f819e1 154
e132fd56 155This method requires a single argument.
156
157=item * B<map( sub { ... } )>
33f819e1 158
80683705 159This method transforms every element in the array and returns a new array,
160just like Perl's core C<map> function. This method requires a subroutine which
161implements the transformation.
33f819e1 162
e132fd56 163 my @mod_options = $stuff->map_options( sub { $_ . "-tag" } );
164 print "@mod_options\n"; # prints "foo-tag bar-tag baz-tag boo-tag"
165
166This method requires a single argument.
33f819e1 167
e132fd56 168=item * B<reduce( sub { ... } )>
7960bcc0 169
e132fd56 170This method turns an array into a single value, by passing a function the
7960bcc0 171value so far and the next value in the array, just like L<List::Util>'s
172C<reduce> function. The reducing is done with a subroutine reference you pass
173to this method.
174
e132fd56 175 my $found = $stuff->reduce_options( sub { $_[0] . $_[1] } );
176 print "$found\n"; # prints "foobarbazboo"
177
178This method requires a single argument.
7960bcc0 179
e132fd56 180=item * B<sort>
33f819e1 181
e132fd56 182=item * B<sort( sub { ... } )>
183
184Returns the elements of the array in sorted order.
33f819e1 185
80683705 186You can provide an optional subroutine reference to sort with (as you can with
e132fd56 187Perl's core C<sort> function). However, instead of using C<$a> and C<$b> in
188this subroutine, you will need to use C<$_[0]> and C<$_[1]>.
189
190 # ascending ASCIIbetical
191 my @sorted = $stuff->sort_options();
192
193 # Descending alphabetical order
194 my @sorted_options = $stuff->sort_options( sub { lc $_[1] cmp lc $_[0] } );
195 print "@sorted_options\n"; # prints "foo boo baz bar"
33f819e1 196
e132fd56 197This method accepts a single argument.
33f819e1 198
e132fd56 199=item * B<sort_in_place>
33f819e1 200
e132fd56 201=item * B<sort_in_place( sub { ... } )>
33f819e1 202
cd50e921 203Sorts the array I<in place>, modifying the value of the attribute.
33f819e1 204
cd50e921 205You can provide an optional subroutine reference to sort with (as you can with
206Perl's core C<sort> function). However, instead of using C<$a> and C<$b>, you
207will need to use C<$_[0]> and C<$_[1]> instead.
33f819e1 208
e132fd56 209This method does not define a return value.
7960bcc0 210
e132fd56 211This method accepts a single argument.
212
213=item * B<shuffle>
214
215Returns the elements of the array in random order, like C<shuffle> from
7960bcc0 216L<List::Util>.
217
e132fd56 218This method does not accept any arguments.
219
220=item * B<uniq>
7960bcc0 221
e132fd56 222Returns the array with all duplicate elements removed, like C<uniq> from
7960bcc0 223L<List::MoreUtils>.
224
e132fd56 225This method does not accept any arguments.
226
227=item * B<join($str)>
33f819e1 228
80683705 229Joins every element of the array using the separator given as argument, just
230like Perl's core C<join> function.
33f819e1 231
e132fd56 232 my $joined = $stuff->join_options(':');
233 print "$joined\n"; # prints "foo:bar:baz:boo"
234
235This method requires a single argument.
33f819e1 236
e132fd56 237=item * B<set($index, $value)>
33f819e1 238
cd50e921 239Given an index and a value, sets the specified array element's value.
33f819e1 240
e132fd56 241This method returns the value at C<$index> after the set.
242
243This method requires two arguments.
244
245=item * B<delete($index)>
cd50e921 246
247Removes the element at the given index from the array.
248
e132fd56 249This method returns the deleted value. Note that if no value exists, it will
250return C<undef>.
251
252This method requires one argument.
253
254=item * B<insert($index, $value)>
cd50e921 255
256Inserts a new element into the array at the given index.
257
e132fd56 258This method returns the new value at C<$index>.
259
260This method requires two arguments.
261
262=item * B<clear>
cd50e921 263
264Empties the entire array, like C<@array = ()>.
33f819e1 265
e132fd56 266This method does not define a return value.
267
268This method does not accept any arguments.
269
270=item * B<accessor($index)>
271
272=item * B<accessor($index, $value)>
33f819e1 273
80683705 274This method provides a get/set accessor for the array, based on array indexes.
275If passed one argument, it returns the value at the specified index. If
276passed two arguments, it sets the value of the specified index.
33f819e1 277
e132fd56 278When called as a setter, this method returns the new value at C<$index>.
279
280This method accepts one or two arguments.
281
282=item * B<natatime($n)>
283
284=item * B<natatime($n, $code)>
7960bcc0 285
286This method returns an iterator which, on each call, returns C<$n> more items
287from the array, in order, like C<natatime> from L<List::MoreUtils>. A coderef
288can optionally be provided; it will be called on each group of C<$n> elements
289in the array.
290
e132fd56 291This method accepts one or two arguments.
e3c07b19 292
e3c07b19 293=back
294
295=head1 BUGS
296
d4048ef3 297See L<Moose/BUGS> for details on reporting bugs.
e3c07b19 298
e3c07b19 299=cut