package Moose::Meta::Attribute::Native::MethodProvider::Array;
use Moose::Role;
-our $VERSION = '0.89';
+use List::Util;
+use List::MoreUtils;
+
+our $VERSION = '1.04';
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
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) };
};
}
};
}
+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 {
};
}
-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) };
};
}
};
}
+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__
=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
=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