X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FAttribute%2FNative%2FMethodProvider%2FArray.pm;h=974f46861b5df1b7786092c9b13aee0e2996ecb1;hb=55d05fb16429c2150b5337b1a0130ae334e129d0;hp=9a6dd13c6458eb59e9f1b5e71dcd0558aad2b5dd;hpb=a163f54f1bc90a8b575263f7185970fe2dc828b4;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/Attribute/Native/MethodProvider/Array.pm b/lib/Moose/Meta/Attribute/Native/MethodProvider/Array.pm index 9a6dd13..974f468 100644 --- a/lib/Moose/Meta/Attribute/Native/MethodProvider/Array.pm +++ b/lib/Moose/Meta/Attribute/Native/MethodProvider/Array.pm @@ -1,7 +1,10 @@ package Moose::Meta::Attribute::Native::MethodProvider::Array; use Moose::Role; -our $VERSION = '0.89'; +use List::Util; +use List::MoreUtils; + +our $VERSION = '1.12'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -12,7 +15,7 @@ sub count : method { }; } -sub empty : method { +sub is_empty : method { my ( $attr, $reader, $writer ) = @_; return sub { scalar @{ $reader->( $_[0] ) } ? 0 : 1; @@ -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,49 +70,43 @@ sub sort : method { }; } -sub grep : method { +sub shuffle : 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) }; + my ( $instance ) = @_; + List::Util::shuffle @{ $reader->($instance) }; }; } -sub join : method { +sub grep : method { my ( $attr, $reader, $writer ) = @_; return sub { - my ( $instance, $separator ) = @_; - join $separator, @{ $reader->($instance) }; + my ( $instance, $predicate ) = @_; + CORE::grep { $predicate->() } @{ $reader->($instance) }; }; } -sub head : method { +sub uniq : method { my ( $attr, $reader, $writer ) = @_; return sub { - $reader->( $_[0] )->[0]; + my ( $instance ) = @_; + List::MoreUtils::uniq @{ $reader->($instance) }; }; } -sub tail : method { +sub elements : method { my ( $attr, $reader, $writer ) = @_; return sub { - my $arr = $reader->( $_[0] ); - return @{ $arr }[1..$#{ $arr }]; + my ($instance) = @_; + @{ $reader->($instance) }; }; } -sub last : method { +sub join : method { my ( $attr, $reader, $writer ) = @_; return sub { - $reader->( $_[0] )->[-1]; + my ( $instance, $separator ) = @_; + join $separator, @{ $reader->($instance) }; }; } @@ -339,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__ @@ -347,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. Please check there for +L. Please check there for documentation on what methods are provided. =head1 METHODS @@ -365,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 for details on reporting bugs. =head1 AUTHOR