Bump version to 1.9900 for new version numbering scheme
[gitmo/Moose.git] / lib / Moose / Meta / Method / Accessor / Native / Array / insert.pm
1 package Moose::Meta::Method::Accessor::Native::Array::insert;
2
3 use strict;
4 use warnings;
5
6 our $VERSION = '1.9900';
7 $VERSION = eval $VERSION;
8 our $AUTHORITY = 'cpan:STEVAN';
9
10 use Moose::Role;
11
12 with 'Moose::Meta::Method::Accessor::Native::Array::Writer' => {
13     -excludes => [
14         qw(
15             _minimum_arguments
16             _maximum_arguments
17             _inline_coerce_new_values
18             _new_members
19             _inline_optimized_set_new_value
20             _return_value
21             )
22     ]
23 };
24
25 sub _minimum_arguments { 2 }
26
27 sub _maximum_arguments { 2 }
28
29 sub _adds_members { 1 }
30
31 sub _potential_value {
32     my $self = shift;
33     my ($slot_access) = @_;
34
35     return '(do { '
36              . 'my @potential = @{ (' . $slot_access . ') }; '
37              . 'splice @potential, $_[0], 0, $_[1]; '
38              . '\@potential; '
39          . '})';
40 }
41
42 # We need to override this because while @_ can be written to, we cannot write
43 # directly to $_[1].
44 sub _inline_coerce_new_values {
45     my $self = shift;
46
47     return unless $self->associated_attribute->should_coerce;
48
49     return unless $self->_tc_member_type_can_coerce;
50
51     return '@_ = ($_[0], $member_tc_obj->coerce($_[1]));';
52 };
53
54 sub _new_members { '$_[1]' }
55
56 sub _inline_optimized_set_new_value {
57     my $self = shift;
58     my ($inv, $new, $slot_access) = @_;
59
60     return 'splice @{ (' . $slot_access . ') }, $_[0], 0, $_[1];';
61 }
62
63 sub _return_value {
64     my $self = shift;
65     my ($slot_access) = @_;
66
67     return $slot_access . '->[ $_[0] ]';
68 }
69
70 no Moose::Role;
71
72 1;