bump version to 0.89_01
[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
9039e8ec 5our $VERSION = '0.89_01';
e3c07b19 6$VERSION = eval $VERSION;
7our $AUTHORITY = 'cpan:STEVAN';
8
c466e58f 9use Moose::Meta::Attribute::Native::MethodProvider::Array;
e3c07b19 10
c466e58f 11with 'Moose::Meta::Attribute::Native::Trait';
e3c07b19 12
13has 'method_provider' => (
14 is => 'ro',
15 isa => 'ClassName',
16 predicate => 'has_method_provider',
c466e58f 17 default => 'Moose::Meta::Attribute::Native::MethodProvider::Array'
e3c07b19 18);
19
2e069f5a 20sub _helper_type { 'ArrayRef' }
e3c07b19 21
22no Moose::Role;
23
e3c07b19 241;
25
26__END__
27
28=pod
29
30=head1 NAME
31
c466e58f 32Moose::Meta::Attribute::Native::Trait::Array
e3c07b19 33
34=head1 SYNOPSIS
35
33f819e1 36 package Stuff;
37 use Moose;
33f819e1 38
39 has 'options' => (
40 traits => ['Array'],
41 is => 'ro',
42 isa => 'ArrayRef[Str]',
43 default => sub { [] },
9610c1d2 44 handles => {
45 all_options => 'elements',
46 map_options => 'map',
47 filter_options => 'grep',
48 find_option => 'first',
49 get_option => 'get',
50 join_options => 'join',
51 count_options => 'count',
52 has_no_options => 'is_empty',
53 sorted_options => 'sort',
54 },
33f819e1 55 );
56
57 no Moose;
58 1;
80683705 59
e3c07b19 60=head1 DESCRIPTION
61
62This module provides an Array attribute which provides a number of
80683705 63array operations.
33f819e1 64
65=head1 PROVIDED METHODS
66
67These methods are implemented in
68L<Moose::Meta::Attribute::Native::MethodProvider::Array>.
69
70=over 4
71
72=item B<count>
73
74Returns the number of elements in the array.
75
76 $stuff = Stuff->new;
77 $stuff->options(["foo", "bar", "baz", "boo"]);
78
79 my $count = $stuff->count_options;
80 print "$count\n"; # prints 4
81
1853a27e 82=item B<is_empty>
33f819e1 83
80683705 84Returns a boolean value indicating whether or not the array has any elements.
33f819e1 85
af44c00c 86 $stuff->has_no_options ? die "No options!\n" : print "Good boy.\n";
33f819e1 87
cd50e921 88=item B<elements>
89
90Returns all of the elements of the array.
91
92 my @option = $stuff->all_options;
93 print "@options\n"; # prints "foo bar baz boo"
94
95=item B<get($index)>
96
97Returns an element of the array by its index. You can also use negative index
98numbers, just as with Perl's core array handling.
99
100 my $option = $stuff->get_option(1);
101 print "$option\n"; # prints "bar"
102
103=item B<pop>
104
105=item B<push($value)>
106
107=item B<shift>
108
109=item B<unshift($value)>
110
111=item B<splice($offset, $length, @values)>
112
113These methods are all equivalent to the Perl core functions of the same name.
114
391c761c 115=item B<first( sub { ... } )>
33f819e1 116
80683705 117This method returns the first item matching item in the array. The matching is
118done with a subroutine reference you pass to this method. The reference will
119be called against each element in the array until one matches or all elements
120have been checked.
33f819e1 121
c9edbf05 122 my $found = $stuff->find_option( sub { /^b/ } );
33f819e1 123 print "$found\n"; # prints "bar"
124
cd50e921 125=item B<grep( sub { ... } )>
33f819e1 126
80683705 127This method returns every element matching a given criteria, just like Perl's
128core C<grep> function. This method requires a subroutine which implements the
129matching logic.
33f819e1 130
c9edbf05 131 my @found = $stuff->filter_options( sub { /^b/ } );
33f819e1 132 print "@found\n"; # prints "bar baz boo"
133
cd50e921 134=item B<map( sub { ... } )>
33f819e1 135
80683705 136This method transforms every element in the array and returns a new array,
137just like Perl's core C<map> function. This method requires a subroutine which
138implements the transformation.
33f819e1 139
c9edbf05 140 my @mod_options = $stuff->map_options( sub { $_ . "-tag" } );
33f819e1 141 print "@mod_options\n"; # prints "foo-tag bar-tag baz-tag boo-tag"
142
cd50e921 143=item B<sort( sub { ... } )>
33f819e1 144
80683705 145Returns a the array in sorted order.
33f819e1 146
80683705 147You can provide an optional subroutine reference to sort with (as you can with
148Perl's core C<sort> function). However, instead of using C<$a> and C<$b>, you
149will need to use C<$_[0]> and C<$_[1]> instead.
33f819e1 150
151 # ascending ASCIIbetical
152 my @sorted = $stuff->sort_options();
153
154 # Descending alphabetical order
155 my @sorted_options = $stuff->sort_options( sub { lc $_[1] cmp lc $_[0] } );
156 print "@sorted_options\n"; # prints "foo boo baz bar"
157
cd50e921 158=item B<sort_in_place>
33f819e1 159
cd50e921 160Sorts the array I<in place>, modifying the value of the attribute.
33f819e1 161
cd50e921 162You can provide an optional subroutine reference to sort with (as you can with
163Perl's core C<sort> function). However, instead of using C<$a> and C<$b>, you
164will need to use C<$_[0]> and C<$_[1]> instead.
33f819e1 165
cd50e921 166=item B<join($str)>
33f819e1 167
80683705 168Joins every element of the array using the separator given as argument, just
169like Perl's core C<join> function.
33f819e1 170
171 my $joined = $stuff->join_options( ':' );
172 print "$joined\n"; # prints "foo:bar:baz:boo"
173
cd50e921 174=item B<set($index, $value)>
33f819e1 175
cd50e921 176Given an index and a value, sets the specified array element's value.
33f819e1 177
cd50e921 178=item B<delete($index)>
179
180Removes the element at the given index from the array.
181
182=item B<insert($index, $value)>
183
184Inserts a new element into the array at the given index.
185
186=item B<clear>
187
188Empties the entire array, like C<@array = ()>.
33f819e1 189
33f819e1 190=item B<accessor>
191
80683705 192This method provides a get/set accessor for the array, based on array indexes.
193If passed one argument, it returns the value at the specified index. If
194passed two arguments, it sets the value of the specified index.
33f819e1 195
196=back
e3c07b19 197
198=head1 METHODS
199
200=over 4
201
202=item B<meta>
203
204=item B<method_provider>
205
206=item B<has_method_provider>
207
e3c07b19 208=back
209
210=head1 BUGS
211
212All complex software has bugs lurking in it, and this module is no
213exception. If you find a bug please either email me, or add the bug
214to cpan-RT.
215
216=head1 AUTHOR
217
218Stevan Little E<lt>stevan@iinteractive.comE<gt>
219
220=head1 COPYRIGHT AND LICENSE
221
222Copyright 2007-2009 by Infinity Interactive, Inc.
223
224L<http://www.iinteractive.com>
225
226This library is free software; you can redistribute it and/or modify
227it under the same terms as Perl itself.
228
229=cut