package MooseX::AttributeHelpers::MethodProvider::Array;
use Moose::Role;
-our $VERSION = '0.14';
+our $VERSION = '0.17';
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
my ( $self, $i, $j, @elems ) = @_;
($container_type_constraint->check($_))
|| confess "Value " . (defined($_) ? $_ : 'undef') . " did not pass container type constraint" for @elems;
- CORE::splice @{$self->$reader()}, $i, $j, @elems;
+ CORE::splice @{$reader->($self)}, $i, $j, @elems;
};
}
else {
return sub {
my ( $self, $i, $j, @elems ) = @_;
- CORE::splice @{$self->$reader()}, $i, $j, @elems;
+ CORE::splice @{$reader->($self)}, $i, $j, @elems;
};
}
}
+sub sort_in_place : method {
+ my ($attr, $reader, $writer) = @_;
+ return sub {
+ my ($instance, $predicate) = @_;
+
+ die "Argument must be a code reference"
+ if $predicate && ref $predicate ne 'CODE';
+
+ my @sorted;
+ if ($predicate) {
+ @sorted = CORE::sort { $predicate->($a, $b) } @{$reader->($instance)};
+ }
+ else {
+ @sorted = CORE::sort @{$reader->($instance)};
+ }
+
+ $writer->($instance, \@sorted);
+ };
+}
+
1;
__END__
=head1 NAME
MooseX::AttributeHelpers::MethodProvider::Array
-
+
=head1 DESCRIPTION
This is a role which provides the method generators for
=item B<splice>
+=item B<sort_in_place>
+
+Sorts the array I<in place>, modifying the value of the attribute.
+
+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.
+
=back
=head1 BUGS