File Coverage

blib/lib/ArrayDataRole/Source/Array.pm
Criterion Covered Total %
statement 33 39 84.6
branch 10 18 55.5
condition n/a
subroutine 10 11 90.9
pod 0 8 0.0
total 53 76 69.7


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