| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | package App::Mowyw::Datasource::Array; | 
| 2 |  |  |  |  |  |  |  | 
| 3 | 3 |  |  | 3 |  | 4308 | use strict; | 
|  | 3 |  |  |  |  | 9 |  | 
|  | 3 |  |  |  |  | 128 |  | 
| 4 | 3 |  |  | 3 |  | 18 | use warnings; | 
|  | 3 |  |  |  |  | 6 |  | 
|  | 3 |  |  |  |  | 90 |  | 
| 5 | 3 |  |  | 3 |  | 15 | use base 'App::Mowyw::Datasource'; | 
|  | 3 |  |  |  |  | 16 |  | 
|  | 3 |  |  |  |  | 357 |  | 
| 6 | 3 |  |  | 3 |  | 19 | use Scalar::Util qw(reftype); | 
|  | 3 |  |  |  |  | 14 |  | 
|  | 3 |  |  |  |  | 334 |  | 
| 7 |  |  |  |  |  |  |  | 
| 8 | 3 |  |  | 3 |  | 20 | use Carp qw(confess); | 
|  | 3 |  |  |  |  | 5 |  | 
|  | 3 |  |  |  |  | 1136 |  | 
| 9 |  |  |  |  |  |  | #use Data::Dumper; | 
| 10 |  |  |  |  |  |  |  | 
| 11 |  |  |  |  |  |  | sub new { | 
| 12 | 7 |  |  | 7 | 0 | 15 | my ($class, $opts) = @_; | 
| 13 | 7 | 100 |  |  |  | 45 | my $self = bless { OPTIONS => $opts, INDEX => 0 },  ref $class ? ref $class : $class; | 
| 14 |  |  |  |  |  |  |  | 
| 15 |  |  |  |  |  |  | #    print Dumper $opts; | 
| 16 | 7 | 100 |  |  |  | 281 | $self->{DATA} = $opts->{source} or confess "Mandatory option 'source' is missing\n"; | 
| 17 | 6 | 100 |  |  |  | 41 | if (reftype($self->{DATA}) ne 'ARRAY'){ | 
| 18 | 1 |  |  |  |  | 138 | confess "Source must be an array"; | 
| 19 |  |  |  |  |  |  | } | 
| 20 | 5 | 100 |  |  |  | 22 | if (exists $opts->{limit}){ | 
| 21 | 1 |  |  |  |  | 3 | $self->{remaining} = $opts->{limit}; | 
| 22 |  |  |  |  |  |  | } | 
| 23 | 5 |  |  |  |  | 21 | return $self; | 
| 24 |  |  |  |  |  |  | } | 
| 25 |  |  |  |  |  |  |  | 
| 26 |  |  |  |  |  |  | sub is_exhausted { | 
| 27 | 21 |  |  | 21 | 0 | 2398 | my $self = shift; | 
| 28 | 21 | 100 | 100 |  |  | 89 | return 1 if (exists $self->{remaining} && $self->{remaining} == 0); | 
| 29 | 20 |  |  |  |  | 25 | return scalar(@{$self->{DATA}}) <= $self->{INDEX} | 
|  | 20 |  |  |  |  | 106 |  | 
| 30 |  |  |  |  |  |  | } | 
| 31 |  |  |  |  |  |  |  | 
| 32 |  |  |  |  |  |  | sub get { | 
| 33 | 15 |  |  | 15 | 0 | 25 | my $self = shift; | 
| 34 | 15 | 100 |  |  |  | 54 | $self->{remaining}-- if exists $self->{remaining}; | 
| 35 | 15 |  |  |  |  | 65 | return $self->{DATA}[$self->{INDEX}]; | 
| 36 |  |  |  |  |  |  | } | 
| 37 |  |  |  |  |  |  |  | 
| 38 |  |  |  |  |  |  | sub next { | 
| 39 | 13 |  |  | 13 | 0 | 5977 | shift->{INDEX}++; | 
| 40 |  |  |  |  |  |  | } | 
| 41 |  |  |  |  |  |  |  | 
| 42 |  |  |  |  |  |  | sub reset { | 
| 43 | 2 |  |  | 2 | 0 | 7 | shift->{INDEX} = 0; | 
| 44 |  |  |  |  |  |  | } | 
| 45 |  |  |  |  |  |  |  | 
| 46 |  |  |  |  |  |  | 1; |