bump version to 1.17
[gitmo/Moose.git] / lib / Moose / Meta / Method / Accessor / Native / Array / push.pm
index b567cac..3e1b21c 100644 (file)
@@ -3,57 +3,41 @@ package Moose::Meta::Method::Accessor::Native::Array::push;
 use strict;
 use warnings;
 
-our $VERSION = '1.13';
+our $VERSION = '1.17';
 $VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
-use base 'Moose::Meta::Method::Accessor::Native::Array::Writer';
+use Moose::Role;
 
-sub _generate_method {
-    my $self = shift;
+with 'Moose::Meta::Method::Accessor::Native::Array::Writer' => {
+    -excludes => [
+        qw(
+            _inline_optimized_set_new_value
+            _return_value
+            )
+    ]
+};
 
-    my $inv = '$self';
+sub _adds_members { 1 }
 
-    my $slot_access = $self->_inline_get($inv);
+sub _potential_value {
+    my ( $self, $slot_access ) = @_;
 
-    my $code = 'sub {';
-    $code .= "\n" . $self->_inline_pre_body(@_);
-
-    $code .= "\n" . 'my $self = shift;';
-
-    $code .= "\n" . $self->_inline_check_lazy($inv);
-
-    $code .= "\n" . $self->_inline_curried_arguments;
-
-    $code
-        .= "\n"
-        . $self->_inline_throw_error(
-        q{"Cannot call push without any arguments"})
-        . " unless \@_;";
-
-    my $potential_new_val;
-    if ( $self->_constraint_must_be_checked ) {
-        $code .= "\n" . "my \@new_val = ( \@{ $slot_access }, \@_ );";
-        $potential_new_val = '\\@new_val';
-    }
-    else {
-        $potential_new_val = "[ \@{ $slot_access }, \@_ ];";
-    }
-
-    $code .= "\n" . $self->_inline_check_coercion($potential_new_val);
-    $code .= "\n" . $self->_inline_check_constraint($potential_new_val);
-
-    $code .= "\n"
-        . $self->_inline_get_old_value_for_trigger( $inv, '@_' );
+    return "[ \@{ ($slot_access) }, \@_ ]";
+}
 
-    $code .= "\n" . $self->_inline_store( $inv, $potential_new_val );
+sub _inline_optimized_set_new_value {
+    my ( $self, $inv, $new, $slot_access ) = @_;
 
-    $code .= "\n" . $self->_inline_post_body(@_);
-    $code .= "\n" . $self->_inline_trigger( $inv, '@_', '@old' );
+    return "push \@{ ($slot_access) }, \@_";
+}
 
-    $code .= "\n}";
+sub _return_value {
+    my ( $self, $slot_access ) = @_;
 
-    return $code;
+    return "return scalar \@{ ($slot_access) }";
 }
 
+no Moose::Role;
+
 1;