1 package MooseX::AttributeHelpers::MethodProvider::Array;
5 our $AUTHORITY = 'cpan:STEVAN';
7 with 'MooseX::AttributeHelpers::MethodProvider::List';
10 my ($attr, $reader, $writer) = @_;
12 if ($attr->has_type_constraint && $attr->type_constraint->isa('Moose::Meta::TypeConstraint::Parameterized')) {
13 my $container_type_constraint = $attr->type_constraint->type_parameter;
15 my $instance = CORE::shift;
16 $container_type_constraint->check($_)
17 || confess "Value " . ($_||'undef') . " did not pass container type constraint"
19 CORE::push @{$reader->($instance)} => @_;
24 my $instance = CORE::shift;
25 CORE::push @{$reader->($instance)} => @_;
31 my ($attr, $reader, $writer) = @_;
33 CORE::pop @{$reader->($_[0])}
37 sub unshift : method {
38 my ($attr, $reader, $writer) = @_;
39 if ($attr->has_type_constraint && $attr->type_constraint->isa('Moose::Meta::TypeConstraint::Parameterized')) {
40 my $container_type_constraint = $attr->type_constraint->type_parameter;
42 my $instance = CORE::shift;
43 $container_type_constraint->check($_)
44 || confess "Value " . ($_||'undef') . " did not pass container type constraint"
46 CORE::unshift @{$reader->($instance)} => @_;
51 my $instance = CORE::shift;
52 CORE::unshift @{$reader->($instance)} => @_;
58 my ($attr, $reader, $writer) = @_;
60 CORE::shift @{$reader->($_[0])}
65 my ($attr, $reader, $writer) = @_;
67 $reader->($_[0])->[$_[1]]
72 my ($attr, $reader, $writer) = @_;
73 if ($attr->has_type_constraint && $attr->type_constraint->isa('Moose::Meta::TypeConstraint::Parameterized')) {
74 my $container_type_constraint = $attr->type_constraint->type_parameter;
76 ($container_type_constraint->check($_[2]))
77 || confess "Value " . ($_[2]||'undef') . " did not pass container type constraint";
78 $reader->($_[0])->[$_[1]] = $_[2]
83 $reader->($_[0])->[$_[1]] = $_[2]
89 my ($attr, $reader, $writer) = @_;
91 @{$reader->($_[0])} = ()
96 my ($attr, $reader, $writer) = @_;
98 CORE::splice @{$reader->($_[0])}, $_[1], 1;
102 sub insert : method {
103 my ($attr, $reader, $writer) = @_;
104 if ($attr->has_type_constraint && $attr->type_constraint->isa('Moose::Meta::TypeConstraint::Parameterized')) {
105 my $container_type_constraint = $attr->type_constraint->type_parameter;
107 ($container_type_constraint->check($_[2]))
108 || confess "Value " . ($_[2]||'undef') . " did not pass container type constraint";
109 CORE::splice @{$reader->($_[0])}, $_[1], 0, $_[2];
114 CORE::splice @{$reader->($_[0])}, $_[1], 0, $_[2];
127 MooseX::AttributeHelpers::MethodProvider::Array
131 This is a role which provides the method generators for
132 L<MooseX::AttributeHelpers::Collection::Array>.
142 =head1 PROVIDED METHODS
144 This module also consumes the B<List> method providers, to
145 see those provied methods, refer to that documentation.
171 All complex software has bugs lurking in it, and this module is no
172 exception. If you find a bug please either email me, or add the bug
177 Stevan Little E<lt>stevan@iinteractive.comE<gt>
179 =head1 COPYRIGHT AND LICENSE
181 Copyright 2007-2008 by Infinity Interactive, Inc.
183 L<http://www.iinteractive.com>
185 This library is free software; you can redistribute it and/or modify
186 it under the same terms as Perl itself.