make github the primary repository
[gitmo/Moose.git] / lib / Moose / Meta / Method / Accessor / Native / Array / natatime.pm
1 package Moose::Meta::Method::Accessor::Native::Array::natatime;
2
3 use strict;
4 use warnings;
5
6 use List::MoreUtils ();
7 use Params::Util ();
8
9 use Moose::Role;
10
11 with 'Moose::Meta::Method::Accessor::Native::Reader';
12
13 sub _minimum_arguments { 1 }
14
15 sub _maximum_arguments { 2 }
16
17 sub _inline_check_arguments {
18     my $self = shift;
19
20     return (
21         'if (!defined($_[0]) || $_[0] !~ /^\d+$/) {',
22             $self->_inline_throw_error(
23                 '"The n value passed to natatime must be an integer"',
24             ) . ';',
25         '}',
26         'if (@_ == 2 && !Params::Util::_CODELIKE($_[1])) {',
27             $self->_inline_throw_error(
28                 '"The second argument passed to natatime must be a code '
29               . 'reference"',
30             ) . ';',
31         '}',
32     );
33 }
34
35 sub _inline_return_value {
36     my $self = shift;
37     my ($slot_access) = @_;
38
39     return (
40         'my $iter = List::MoreUtils::natatime($_[0], @{ (' . $slot_access . ') });',
41         'if ($_[1]) {',
42             'while (my @vals = $iter->()) {',
43                 '$_[1]->(@vals);',
44             '}',
45         '}',
46         'else {',
47             'return $iter;',
48         '}',
49     );
50 }
51
52 # Not called, but needed to satisfy the Reader role
53 sub _return_value { }
54
55 no Moose::Role;
56
57 1;