bump version to 1.14
[gitmo/Moose.git] / lib / Moose / Meta / Attribute / Native / MethodProvider / Array.pm
index 64975af..b4a4971 100644 (file)
@@ -1,7 +1,10 @@
 package Moose::Meta::Attribute::Native::MethodProvider::Array;
 use Moose::Role;
 
-our $VERSION = '0.89_01';
+use List::Util;
+use List::MoreUtils;
+
+our $VERSION = '1.14';
 $VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
@@ -23,11 +26,7 @@ sub first : method {
     my ( $attr, $reader, $writer ) = @_;
     return sub {
         my ( $instance, $predicate ) = @_;
-        foreach my $val ( @{ $reader->($instance) } ) {
-            local $_ = $val;
-            return $val if $predicate->();
-        }
-        return;
+        List::Util::first { $predicate->() } @{ $reader->($instance) };
     };
 }
 
@@ -39,6 +38,15 @@ sub map : method {
     };
 }
 
+sub reduce : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        my ( $instance, $f ) = @_;
+        our ($a, $b);
+        List::Util::reduce { $f->($a, $b) } @{ $reader->($instance) };
+    };
+}
+
 sub sort : method {
     my ( $attr, $reader, $writer ) = @_;
     return sub {
@@ -62,6 +70,14 @@ sub sort : method {
     };
 }
 
+sub shuffle : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        my ( $instance ) = @_;
+        List::Util::shuffle @{ $reader->($instance) };
+    };
+}
+
 sub grep : method {
     my ( $attr, $reader, $writer ) = @_;
     return sub {
@@ -70,6 +86,14 @@ sub grep : method {
     };
 }
 
+sub uniq : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        my ( $instance ) = @_;
+        List::MoreUtils::uniq @{ $reader->($instance) };
+    };
+}
+
 sub elements : method {
     my ( $attr, $reader, $writer ) = @_;
     return sub {
@@ -317,6 +341,21 @@ sub sort_in_place : method {
     };
 }
 
+sub natatime : method {
+    my ( $attr, $reader, $writer ) = @_;
+    return sub {
+        my ( $instance, $n, $f ) = @_;
+        my $it = List::MoreUtils::natatime($n, @{ $reader->($instance) });
+        return $it unless $f;
+
+        while (my @vals = $it->()) {
+            $f->(@vals);
+        }
+
+        return;
+    };
+}
+
 1;
 
 __END__
@@ -325,12 +364,12 @@ __END__
 
 =head1 NAME
 
-Moose::Meta::Attribute::Native::MethodProvider::Array
+Moose::Meta::Attribute::Native::MethodProvider::Array - role providing method generators for Array trait
 
 =head1 DESCRIPTION
 
 This is a role which provides the method generators for
-L<Moose::Meta::Attribute::Trait::Native::Array>. Please check there for
+L<Moose::Meta::Attribute::Native::Trait::Array>. Please check there for
 documentation on what methods are provided.
 
 =head1 METHODS
@@ -343,9 +382,7 @@ documentation on what methods are provided.
 
 =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.
+See L<Moose/BUGS> for details on reporting bugs.
 
 =head1 AUTHOR