merge List into Array and ImmutableHash into Hash
Jesse Luehrs [Fri, 10 Jul 2009 02:08:48 +0000 (21:08 -0500)]
lib/Moose/AttributeHelpers.pm
lib/Moose/Meta/Attribute/Trait/Native/ImmutableHash.pm [deleted file]
lib/Moose/Meta/Attribute/Trait/Native/List.pm [deleted file]
lib/Moose/Meta/Attribute/Trait/Native/MethodProvider/Array.pm
lib/Moose/Meta/Attribute/Trait/Native/MethodProvider/Hash.pm
lib/Moose/Meta/Attribute/Trait/Native/MethodProvider/ImmutableHash.pm [deleted file]
lib/Moose/Meta/Attribute/Trait/Native/MethodProvider/List.pm [deleted file]
t/070_attribute_helpers/205_trait_list.t

index 1e7d6b3..7301167 100644 (file)
@@ -11,10 +11,8 @@ use Moose::Meta::Attribute::Trait::Native::Bool;
 use Moose::Meta::Attribute::Trait::Native::Counter;
 use Moose::Meta::Attribute::Trait::Native::Number;
 use Moose::Meta::Attribute::Trait::Native::String;
-use Moose::Meta::Attribute::Trait::Native::List;
 use Moose::Meta::Attribute::Trait::Native::Array;
 use Moose::Meta::Attribute::Trait::Native::Hash;
-use Moose::Meta::Attribute::Trait::Native::ImmutableHash;
 
 1;
 
diff --git a/lib/Moose/Meta/Attribute/Trait/Native/ImmutableHash.pm b/lib/Moose/Meta/Attribute/Trait/Native/ImmutableHash.pm
deleted file mode 100644 (file)
index 9f35512..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-
-package Moose::Meta::Attribute::Trait::Native::ImmutableHash;
-use Moose::Role;
-
-our $VERSION   = '0.87';
-$VERSION = eval $VERSION;
-our $AUTHORITY = 'cpan:STEVAN';
-
-use Moose::Meta::Attribute::Trait::Native::MethodProvider::ImmutableHash;
-
-with 'Moose::Meta::Attribute::Trait::Native::Collection';
-
-has 'method_provider' => (
-    is        => 'ro',
-    isa       => 'ClassName',
-    predicate => 'has_method_provider',
-    default   => 'Moose::Meta::Attribute::Trait::Native::MethodProvider::ImmutableHash'
-);
-
-sub _helper_type { 'HashRef' }
-
-no Moose::Role;
-
-package # hide me from search.cpan.org
-    Moose::Meta::Attribute::Custom::Trait::ImmutableHash;
-sub register_implementation {
-    'Moose::Meta::Attribute::Trait::Native::ImmutableHash'
-}
-
-
-1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Moose::Meta::Attribute::Trait::Native::ImmutableHash
-
-=head1 SYNOPSIS
-
-  package Stuff;
-  use Moose;
-  use Moose::AttributeHelpers;
-
-  has 'options' => (
-      metaclass => 'ImmutableHash',
-      is        => 'ro',
-      isa       => 'HashRef[Str]',
-      default   => sub { {} },
-      handles  => {
-          get_option      => 'get',
-          has_options     => 'empty',
-          get_option_list => 'keys',
-      }
-  );
-
-=head1 DESCRIPTION
-
-This module provides a immutable HashRef attribute which provides a number of
-hash-line operations. See L<Moose::Meta::Attribute::Trait::Native::MethodProvider::ImmutableHash>
-for more details.
-
-=head1 METHODS
-
-=over 4
-
-=item B<meta>
-
-=item B<method_provider>
-
-=item B<has_method_provider>
-
-=back
-
-=head1 BUGS
-
-All complex software has bugs lurking in it, and this module is no
-exception. If you find a bug please either email me, or add the bug
-to cpan-RT.
-
-=head1 AUTHOR
-
-Stevan Little E<lt>stevan@iinteractive.comE<gt>
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 2007-2009 by Infinity Interactive, Inc.
-
-L<http://www.iinteractive.com>
-
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
diff --git a/lib/Moose/Meta/Attribute/Trait/Native/List.pm b/lib/Moose/Meta/Attribute/Trait/Native/List.pm
deleted file mode 100644 (file)
index 180bff0..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-
-package Moose::Meta::Attribute::Trait::Native::List;
-use Moose::Role;
-
-our $VERSION   = '0.87';
-$VERSION = eval $VERSION;
-our $AUTHORITY = 'cpan:STEVAN';
-
-use Moose::Meta::Attribute::Trait::Native::MethodProvider::List;
-
-with 'Moose::Meta::Attribute::Trait::Native::Collection';
-
-has 'method_provider' => (
-    is        => 'ro',
-    isa       => 'ClassName',
-    predicate => 'has_method_provider',
-    default   => 'Moose::Meta::Attribute::Trait::Native::MethodProvider::List'
-);
-
-sub _helper_type { 'ArrayRef' }
-
-no Moose::Role;
-
-package # hide me from search.cpan.org
-    Moose::Meta::Attribute::Custom::Trait::List;
-sub register_implementation {
-    'Moose::Meta::Attribute::Trait::Native::List'
-}
-
-
-1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Moose::Meta::Attribute::Trait::Native::List
-
-=head1 SYNOPSIS
-
-  package Stuff;
-  use Moose;
-  use Moose::AttributeHelpers;
-
-  has 'options' => (
-      metaclass => 'List',
-      is        => 'ro',
-      isa       => 'ArrayRef[Int]',
-      default   => sub { [] },
-      handles   => {
-          map_options    => 'map',
-          filter_options => 'grep',
-      }
-  );
-
-=head1 DESCRIPTION
-
-This module provides an List attribute which provides a number of
-list operations. See L<Moose::Meta::Attribute::Trait::Native::MethodProvider::List>
-for more details.
-
-=head1 METHODS
-
-=over 4
-
-=item B<meta>
-
-=item B<method_provider>
-
-=item B<has_method_provider>
-
-=back
-
-=head1 BUGS
-
-All complex software has bugs lurking in it, and this module is no
-exception. If you find a bug please either email me, or add the bug
-to cpan-RT.
-
-=head1 AUTHOR
-
-Stevan Little E<lt>stevan@iinteractive.comE<gt>
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 2007-2009 by Infinity Interactive, Inc.
-
-L<http://www.iinteractive.com>
-
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
index d302645..5e5ac72 100644 (file)
@@ -5,7 +5,92 @@ our $VERSION   = '0.87';
 $VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
-with 'Moose::Meta::Attribute::Trait::Native::MethodProvider::List';
+sub count : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        scalar @{ $reader->( $_[0] ) };
+    };
+}
+
+sub empty : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        scalar @{ $reader->( $_[0] ) } ? 1 : 0;
+    };
+}
+
+sub find : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        my ( $instance, $predicate ) = @_;
+        foreach my $val ( @{ $reader->($instance) } ) {
+            return $val if $predicate->($val);
+        }
+        return;
+    };
+}
+
+sub map : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        my ( $instance, $f ) = @_;
+        CORE::map { $f->($_) } @{ $reader->($instance) };
+    };
+}
+
+sub sort : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        my ( $instance, $predicate ) = @_;
+        die "Argument must be a code reference"
+            if $predicate && ref $predicate ne 'CODE';
+
+        if ($predicate) {
+            CORE::sort { $predicate->( $a, $b ) } @{ $reader->($instance) };
+        }
+        else {
+            CORE::sort @{ $reader->($instance) };
+        }
+    };
+}
+
+sub grep : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        my ( $instance, $predicate ) = @_;
+        CORE::grep { $predicate->($_) } @{ $reader->($instance) };
+    };
+}
+
+sub elements : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        my ($instance) = @_;
+        @{ $reader->($instance) };
+    };
+}
+
+sub join : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        my ( $instance, $separator ) = @_;
+        join $separator, @{ $reader->($instance) };
+    };
+}
+
+sub first : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        $reader->( $_[0] )->[0];
+    };
+}
+
+sub last : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        $reader->( $_[0] )->[-1];
+    };
+}
 
 sub push : method {
     my ( $attr, $reader, $writer ) = @_;
@@ -248,6 +333,36 @@ __END__
 
 Moose::Meta::Attribute::Trait::Native::MethodProvider::Array
 
+=head1 SYNOPSIS
+
+   package Stuff;
+   use Moose;
+   use Moose::AttributeHelpers;
+
+   has 'options' => (
+       metaclass  => 'Array',
+       is         => 'rw',
+       isa        => 'ArrayRef[Str]',
+       default    => sub { [] },
+       auto_deref => 1,
+       handles   => {
+           all_options       => 'elements',
+           map_options       => 'map',
+           filter_options    => 'grep',
+           find_option       => 'find',
+           first_option      => 'first',
+           last_option       => 'last',
+           get_option        => 'get',
+           join_options      => 'join',
+           count_options     => 'count',
+           do_i_have_options => 'empty',
+           sorted_options    => 'sort',
+       }
+   );
+
+   no Moose;
+   1;
+
 =head1 DESCRIPTION
 
 This is a role which provides the method generators for
@@ -263,13 +378,102 @@ L<Moose::Meta::Attribute::Trait::Native::Array>.
 
 =head1 PROVIDED METHODS
 
-This module also consumes the B<List> method providers, to
-see those provided methods, refer to that documentation.
-
 =over 4
 
+=item B<count>
+
+Returns the number of elements in the array.
+
+   $stuff = Stuff->new;
+   $stuff->options(["foo", "bar", "baz", "boo"]);
+
+   my $count = $stuff->count_options;
+   print "$count\n"; # prints 4
+
+=item B<empty>
+
+If the array is populated, returns true. Otherwise, returns false.
+
+   $stuff->do_i_have_options ? print "Good boy.\n" : die "No options!\n" ;
+
+=item B<find>
+
+This method accepts a subroutine reference as its argument. That sub
+will receive each element of the array in turn. If it returns true for
+an element, that element will be returned by the C<find> method.
+
+   my $found = $stuff->find_option( sub { $_[0] =~ /^b/ } );
+   print "$found\n"; # prints "bar"
+
+=item B<grep>
+
+This method accepts a subroutine reference as its argument. This
+method returns every element for which that subroutine reference
+returns a true value.
+
+   my @found = $stuff->filter_options( sub { $_[0] =~ /^b/ } );
+   print "@found\n"; # prints "bar baz boo"
+
+=item B<map>
+
+This method accepts a subroutine reference as its argument. The
+subroutine will be executed for each element of the array. It is
+expected to return a modified version of that element. The return
+value of the method is a list of the modified options.
+
+   my @mod_options = $stuff->map_options( sub { $_[0] . "-tag" } );
+   print "@mod_options\n"; # prints "foo-tag bar-tag baz-tag boo-tag"
+
+=item B<sort>
+
+Sorts and returns the elements of the array.
+
+You can provide an optional subroutine reference to sort with (as you
+can with the core C<sort> function). However, instead of using C<$a>
+and C<$b>, you will need to use C<$_[0]> and C<$_[1]> instead.
+
+   # ascending ASCIIbetical
+   my @sorted = $stuff->sort_options();
+
+   # Descending alphabetical order
+   my @sorted_options = $stuff->sort_options( sub { lc $_[1] cmp lc $_[0] } );
+   print "@sorted_options\n"; # prints "foo boo baz bar"
+
+=item B<elements>
+
+Returns all of the elements of the array
+
+   my @option = $stuff->all_options;
+   print "@options\n"; # prints "foo bar baz boo"
+
+=item B<join>
+
+Joins every element of the array using the separator given as argument.
+
+   my $joined = $stuff->join_options( ':' );
+   print "$joined\n"; # prints "foo:bar:baz:boo"
+
 =item B<get>
 
+Returns an element of the array by its index.
+
+   my $option = $stuff->get_option(1);
+   print "$option\n"; # prints "bar"
+
+=item B<first>
+
+Returns the first element of the array.
+
+   my $first = $stuff->first_option;
+   print "$first\n"; # prints "foo"
+
+=item B<last>
+
+Returns the last element of the array.
+
+   my $last = $stuff->last_option;
+   print "$last\n"; # prints "boo"
+
 =item B<pop>
 
 =item B<push>
index 8cf1f6c..173de8b 100644 (file)
@@ -5,7 +5,65 @@ our $VERSION   = '0.87';
 $VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
-with 'Moose::Meta::Attribute::Trait::Native::MethodProvider::ImmutableHash';
+sub exists : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub { CORE::exists $reader->( $_[0] )->{ $_[1] } ? 1 : 0 };
+}
+
+sub defined : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub { CORE::defined $reader->( $_[0] )->{ $_[1] } ? 1 : 0 };
+}
+
+sub get : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        if ( @_ == 2 ) {
+            $reader->( $_[0] )->{ $_[1] };
+        }
+        else {
+            my ( $self, @keys ) = @_;
+            @{ $reader->($self) }{@keys};
+        }
+    };
+}
+
+sub keys : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub { CORE::keys %{ $reader->( $_[0] ) } };
+}
+
+sub values : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub { CORE::values %{ $reader->( $_[0] ) } };
+}
+
+sub kv : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        my $h = $reader->( $_[0] );
+        map { [ $_, $h->{$_} ] } CORE::keys %{$h};
+    };
+}
+
+sub elements : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        my $h = $reader->( $_[0] );
+        map { $_, $h->{$_} } CORE::keys %{$h};
+    };
+}
+
+sub count : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub { scalar CORE::keys %{ $reader->( $_[0] ) } };
+}
+
+sub empty : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub { scalar CORE::keys %{ $reader->( $_[0] ) } ? 1 : 0 };
+}
+
 
 sub set : method {
     my ( $attr, $reader, $writer ) = @_;
@@ -149,28 +207,20 @@ L<Moose::Meta::Attribute::Trait::Native::ImmutableHash> role.
 
 =item B<count>
 
-Returns the number of elements in the hash.
-
-=item B<delete>
-
-Removes the element with the given key
-
-=item B<defined>
-
-Returns true if the value of a given key is defined
+Returns the number of elements in the list.
 
 =item B<empty>
 
 If the list is populated, returns true. Otherwise, returns false.
 
-=item B<clear>
-
-Unsets the hash entirely.
-
 =item B<exists>
 
 Returns true if the given key is present in the hash
 
+=item B<defined>
+
+Returns true if the value of a given key is defined
+
 =item B<get>
 
 Returns an element of the hash by its key.
@@ -179,17 +229,29 @@ Returns an element of the hash by its key.
 
 Returns the list of keys in the hash.
 
-=item B<set>
-
-Sets the element in the hash at the given key to the given value.
-
 =item B<values>
 
 Returns the list of values in the hash.
 
 =item B<kv>
 
-Returns the  key, value pairs in the hash
+Returns the key, value pairs in the hash as array references
+
+=item B<elements>
+
+Returns the key, value pairs in the hash as a flattened list
+
+=item B<delete>
+
+Removes the element with the given key
+
+=item B<clear>
+
+Unsets the hash entirely.
+
+=item B<set>
+
+Sets the element in the hash at the given key to the given value.
 
 =item B<accessor>
 
diff --git a/lib/Moose/Meta/Attribute/Trait/Native/MethodProvider/ImmutableHash.pm b/lib/Moose/Meta/Attribute/Trait/Native/MethodProvider/ImmutableHash.pm
deleted file mode 100644 (file)
index 1ea1fef..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-package Moose::Meta::Attribute::Trait::Native::MethodProvider::ImmutableHash;
-use Moose::Role;
-
-our $VERSION   = '0.87';
-$VERSION = eval $VERSION;
-our $AUTHORITY = 'cpan:STEVAN';
-
-sub exists : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub { CORE::exists $reader->( $_[0] )->{ $_[1] } ? 1 : 0 };
-}
-
-sub defined : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub { CORE::defined $reader->( $_[0] )->{ $_[1] } ? 1 : 0 };
-}
-
-sub get : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub {
-        if ( @_ == 2 ) {
-            $reader->( $_[0] )->{ $_[1] };
-        }
-        else {
-            my ( $self, @keys ) = @_;
-            @{ $reader->($self) }{@keys};
-        }
-    };
-}
-
-sub keys : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub { CORE::keys %{ $reader->( $_[0] ) } };
-}
-
-sub values : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub { CORE::values %{ $reader->( $_[0] ) } };
-}
-
-sub kv : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub {
-        my $h = $reader->( $_[0] );
-        map { [ $_, $h->{$_} ] } CORE::keys %{$h};
-    };
-}
-
-sub elements : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub {
-        my $h = $reader->( $_[0] );
-        map { $_, $h->{$_} } CORE::keys %{$h};
-    };
-}
-
-sub count : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub { scalar CORE::keys %{ $reader->( $_[0] ) } };
-}
-
-sub empty : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub { scalar CORE::keys %{ $reader->( $_[0] ) } ? 1 : 0 };
-}
-
-1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Moose::Meta::Attribute::Trait::Native::MethodProvider::ImmutableHash
-
-=head1 DESCRIPTION
-
-This is a role which provides the method generators for
-L<Moose::Meta::Attribute::Trait::Native::ImmutableHash>.
-
-=head1 METHODS
-
-=over 4
-
-=item B<meta>
-
-=back
-
-=head1 PROVIDED METHODS
-
-=over 4
-
-=item B<count>
-
-Returns the number of elements in the list.
-
-=item B<empty>
-
-If the list is populated, returns true. Otherwise, returns false.
-
-=item B<exists>
-
-Returns true if the given key is present in the hash
-
-=item B<defined>
-
-Returns true if the value of a given key is defined
-
-=item B<get>
-
-Returns an element of the hash by its key.
-
-=item B<keys>
-
-Returns the list of keys in the hash.
-
-=item B<values>
-
-Returns the list of values in the hash.
-
-=item B<kv>
-
-Returns the key, value pairs in the hash as array references
-
-=item B<elements>
-
-Returns the key, value pairs in the hash as a flattened list
-
-=back
-
-=head1 BUGS
-
-All complex software has bugs lurking in it, and this module is no
-exception. If you find a bug please either email me, or add the bug
-to cpan-RT.
-
-=head1 AUTHOR
-
-Stevan Little E<lt>stevan@iinteractive.comE<gt>
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 2007-2009 by Infinity Interactive, Inc.
-
-L<http://www.iinteractive.com>
-
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
diff --git a/lib/Moose/Meta/Attribute/Trait/Native/MethodProvider/List.pm b/lib/Moose/Meta/Attribute/Trait/Native/MethodProvider/List.pm
deleted file mode 100644 (file)
index 3c340b5..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-package Moose::Meta::Attribute::Trait::Native::MethodProvider::List;
-use Moose::Role;
-
-our $VERSION   = '0.87';
-$VERSION = eval $VERSION;
-our $AUTHORITY = 'cpan:STEVAN';
-
-sub count : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub {
-        scalar @{ $reader->( $_[0] ) };
-    };
-}
-
-sub empty : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub {
-        scalar @{ $reader->( $_[0] ) } ? 1 : 0;
-    };
-}
-
-sub find : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub {
-        my ( $instance, $predicate ) = @_;
-        foreach my $val ( @{ $reader->($instance) } ) {
-            return $val if $predicate->($val);
-        }
-        return;
-    };
-}
-
-sub map : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub {
-        my ( $instance, $f ) = @_;
-        CORE::map { $f->($_) } @{ $reader->($instance) };
-    };
-}
-
-sub sort : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub {
-        my ( $instance, $predicate ) = @_;
-        die "Argument must be a code reference"
-            if $predicate && ref $predicate ne 'CODE';
-
-        if ($predicate) {
-            CORE::sort { $predicate->( $a, $b ) } @{ $reader->($instance) };
-        }
-        else {
-            CORE::sort @{ $reader->($instance) };
-        }
-    };
-}
-
-sub grep : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub {
-        my ( $instance, $predicate ) = @_;
-        CORE::grep { $predicate->($_) } @{ $reader->($instance) };
-    };
-}
-
-sub elements : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub {
-        my ($instance) = @_;
-        @{ $reader->($instance) };
-    };
-}
-
-sub join : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub {
-        my ( $instance, $separator ) = @_;
-        join $separator, @{ $reader->($instance) };
-    };
-}
-
-sub get : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub {
-        $reader->( $_[0] )->[ $_[1] ];
-    };
-}
-
-sub first : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub {
-        $reader->( $_[0] )->[0];
-    };
-}
-
-sub last : method {
-    my ( $attr, $reader, $writer ) = @_;
-    return sub {
-        $reader->( $_[0] )->[-1];
-    };
-}
-
-1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Moose::Meta::Attribute::Trait::Native::MethodProvider::List
-
-=head1 SYNOPSIS
-
-   package Stuff;
-   use Moose;
-   use Moose::AttributeHelpers;
-
-   has 'options' => (
-       metaclass  => 'List',
-       is         => 'rw',
-       isa        => 'ArrayRef[Str]',
-       default    => sub { [] },
-       auto_deref => 1,
-       handles   => {
-           all_options       => 'elements',
-           map_options       => 'map',
-           filter_options    => 'grep',
-           find_option       => 'find',
-           first_option      => 'first',
-           last_option       => 'last',
-           get_option        => 'get',
-           join_options      => 'join',
-           count_options     => 'count',
-           do_i_have_options => 'empty',
-           sorted_options    => 'sort',
-       }
-   );
-
-   no Moose;
-   1;
-
-=head1 DESCRIPTION
-
-This is a role which provides the method generators for
-L<Moose::Meta::Attribute::Trait::Native::List>.
-
-=head1 METHODS
-
-=over 4
-
-=item B<meta>
-
-=back
-
-=head1 PROVIDED METHODS
-
-=over 4
-
-=item B<count>
-
-Returns the number of elements in the list.
-
-   $stuff = Stuff->new;
-   $stuff->options(["foo", "bar", "baz", "boo"]);
-
-   my $count = $stuff->count_options;
-   print "$count\n"; # prints 4
-
-=item B<empty>
-
-If the list is populated, returns true. Otherwise, returns false.
-
-   $stuff->do_i_have_options ? print "Good boy.\n" : die "No options!\n" ;
-
-=item B<find>
-
-This method accepts a subroutine reference as its argument. That sub
-will receive each element of the list in turn. If it returns true for
-an element, that element will be returned by the C<find> method.
-
-   my $found = $stuff->find_option( sub { $_[0] =~ /^b/ } );
-   print "$found\n"; # prints "bar"
-
-=item B<grep>
-
-This method accepts a subroutine reference as its argument. This
-method returns every element for which that subroutine reference
-returns a true value.
-
-   my @found = $stuff->filter_options( sub { $_[0] =~ /^b/ } );
-   print "@found\n"; # prints "bar baz boo"
-
-=item B<map>
-
-This method accepts a subroutine reference as its argument. The
-subroutine will be executed for each element of the list. It is
-expected to return a modified version of that element. The return
-value of the method is a list of the modified options.
-
-   my @mod_options = $stuff->map_options( sub { $_[0] . "-tag" } );
-   print "@mod_options\n"; # prints "foo-tag bar-tag baz-tag boo-tag"
-
-=item B<sort>
-
-Sorts and returns the elements of the list.
-
-You can provide an optional subroutine reference to sort with (as you
-can with the core C<sort> function). However, instead of using C<$a>
-and C<$b>, you will need to use C<$_[0]> and C<$_[1]> instead.
-
-   # ascending ASCIIbetical
-   my @sorted = $stuff->sort_options();
-
-   # Descending alphabetical order
-   my @sorted_options = $stuff->sort_options( sub { lc $_[1] cmp lc $_[0] } );
-   print "@sorted_options\n"; # prints "foo boo baz bar"
-
-=item B<elements>
-
-Returns all of the elements of the list
-
-   my @option = $stuff->all_options;
-   print "@options\n"; # prints "foo bar baz boo"
-
-=item B<join>
-
-Joins every element of the list using the separator given as argument.
-
-   my $joined = $stuff->join_options( ':' );
-   print "$joined\n"; # prints "foo:bar:baz:boo"
-
-=item B<get>
-
-Returns an element of the list by its index.
-
-   my $option = $stuff->get_option(1);
-   print "$option\n"; # prints "bar"
-
-=item B<first>
-
-Returns the first element of the list.
-
-   my $first = $stuff->first_option;
-   print "$first\n"; # prints "foo"
-
-=item B<last>
-
-Returns the last element of the list.
-
-   my $last = $stuff->last_option;
-   print "$last\n"; # prints "boo"
-
-=back
-
-=head1 BUGS
-
-All complex software has bugs lurking in it, and this module is no
-exception. If you find a bug please either email me, or add the bug
-to cpan-RT.
-
-=head1 AUTHOR
-
-Stevan Little E<lt>stevan@iinteractive.comE<gt>
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 2007-2009 by Infinity Interactive, Inc.
-
-L<http://www.iinteractive.com>
-
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
index d3ca58e..e72f509 100644 (file)
@@ -16,7 +16,7 @@ my $up;
     use Moose::AttributeHelpers;
 
     has '_options' => (
-        traits   => ['List'],
+        traits   => ['Array'],
         is       => 'ro',
         isa      => 'ArrayRef[Int]',
         init_arg => 'options',
@@ -112,7 +112,7 @@ is_deeply( [ $stuff->descending ], [ reverse 1 .. 10 ] );
 ## test the meta
 
 my $options = $stuff->meta->get_attribute('_options');
-does_ok( $options, 'Moose::Meta::Attribute::Trait::Native::List' );
+does_ok( $options, 'Moose::Meta::Attribute::Trait::Native::Array' );
 
 is_deeply(
     $options->handles,