File Coverage

blib/lib/ArrayDataRole/Source/Array.pm
Criterion Covered Total %
statement 36 42 85.7
branch 10 18 55.5
condition n/a
subroutine 11 12 91.6
pod 0 8 0.0
total 57 80 71.2


line stmt bran cond sub pod time code
1             package ArrayDataRole::Source::Array;
2              
3 1     1   502 use strict;
  1         3  
  1         30  
4 1     1   27 use 5.010001;
  1         4  
5 1     1   5 use Role::Tiny;
  1         2  
  1         6  
6 1     1   156 use Role::Tiny::With;
  1         3  
  1         540  
7             with 'ArrayDataRole::Spec::Basic';
8              
9             our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
10             our $DATE = '2021-12-01'; # DATE
11             our $DIST = 'ArrayDataRoles-Standard'; # DIST
12             our $VERSION = '0.007'; # VERSION
13              
14             sub new {
15 1     1 0 124 my ($class, %args) = @_;
16              
17 1 50       7 my $ary = delete $args{array} or die "Please specify 'array' argument";
18              
19 1 50       5 die "Unknown argument(s): ". join(", ", sort keys %args)
20             if keys %args;
21              
22 1         8 bless {
23             array => $ary,
24             pos => 0,
25             }, $class;
26             }
27              
28             sub get_next_item {
29 5     5 0 58 my $self = shift;
30 5 100       10 die "StopIteration" unless $self->{pos} < @{ $self->{array} };
  5         29  
31 4         23 $self->{array}->[ $self->{pos}++ ];
32             }
33              
34             sub has_next_item {
35 2     2 0 9 my $self = shift;
36 2         5 $self->{pos} < @{ $self->{array} };
  2         14  
37             }
38              
39             sub reset_iterator {
40 2     2 0 10 my $self = shift;
41 2         10 $self->{pos} = 0;
42             }
43              
44             sub get_iterator_pos {
45 0     0 0 0 my $self = shift;
46 0         0 $self->{pos};
47             }
48              
49             sub get_item_count {
50 1     1 0 4 my $self = shift;
51 1         2 scalar @{ $self->{array} };
  1         6  
52             }
53              
54             sub get_item_at_pos {
55 2     2 0 45 my ($self, $pos) = @_;
56 2 50       7 if ($pos < 0) {
57 0 0       0 die "Out of range" unless -$pos <= @{ $self->{array} };
  0         0  
58             } else {
59 2 100       4 die "Out of range" unless $pos < @{ $self->{array} };
  2         18  
60             }
61 1         5 $self->{array}->[ $pos ];
62             }
63              
64             sub has_item_at_pos {
65 2     2 0 6 my ($self, $pos) = @_;
66 2 50       8 if ($pos < 0) {
67 0 0       0 return -$pos <= @{ $self->{array} } ? 1:0;
  0         0  
68             } else {
69 2 100       5 return $pos < @{ $self->{array} } ? 1:0;
  2         13  
70             }
71             }
72              
73             1;
74             # ABSTRACT: Get array data from a Perl array
75              
76             __END__