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-10'; # DATE
5             our $DIST = 'ArrayDataRoles-Standard'; # DIST
6             our $VERSION = '0.006'; # VERSION
7              
8 1     1   536 use 5.010001;
  1         4  
9 1     1   5 use Role::Tiny;
  1         2  
  1         6  
10 1     1   157 use Role::Tiny::With;
  1         2  
  1         476  
11             with 'ArrayDataRole::Spec::Basic';
12              
13             sub new {
14 1     1 0 122 my ($class, %args) = @_;
15              
16 1 50       5 my $ary = delete $args{array} or die "Please specify 'array' argument";
17              
18 1 50       6 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 54 my $self = shift;
29 5 100       9 die "StopIteration" unless $self->{pos} < @{ $self->{array} };
  5         28  
30 4         23 $self->{array}->[ $self->{pos}++ ];
31             }
32              
33             sub has_next_item {
34 2     2 0 7 my $self = shift;
35 2         4 $self->{pos} < @{ $self->{array} };
  2         11  
36             }
37              
38             sub reset_iterator {
39 2     2 0 9 my $self = shift;
40 2         9 $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 3 my $self = shift;
50 1         3 scalar @{ $self->{array} };
  1         6  
51             }
52              
53             sub get_item_at_pos {
54 2     2 0 35 my ($self, $pos) = @_;
55 2 50       6 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         16  
59             }
60 1         5 $self->{array}->[ $pos ];
61             }
62              
63             sub has_item_at_pos {
64 2     2 0 7 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       4 return $pos < @{ $self->{array} } ? 1:0;
  2         12  
69             }
70             }
71              
72             1;
73             # ABSTRACT: Get array data from a Perl array
74              
75             __END__