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 4     4   311469 use strict;
  4         9  
  4         177  
4 4     4   81 use 5.010001;
  4         14  
5 4     4   444 use Role::Tiny;
  4         5754  
  4         27  
6 4     4   1363 use Role::Tiny::With;
  4         283  
  4         2326  
7             with 'ArrayDataRole::Spec::Basic';
8              
9             our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
10             our $DATE = '2024-05-06'; # DATE
11             our $DIST = 'ArrayDataRoles-Standard'; # DIST
12             our $VERSION = '0.010'; # VERSION
13              
14             sub new {
15 1     1 0 452715 my ($class, %args) = @_;
16              
17 1 50       5 my $ary = delete $args{array} or die "Please specify 'array' argument";
18              
19 1 50       3 die "Unknown argument(s): ". join(", ", sort keys %args)
20             if keys %args;
21              
22 1         11 bless {
23             array => $ary,
24             pos => 0,
25             }, $class;
26             }
27              
28             sub get_next_item {
29 5     5 0 43 my $self = shift;
30 5 100       8 die "StopIteration" unless $self->{pos} < @{ $self->{array} };
  5         23  
31 4         16 $self->{array}->[ $self->{pos}++ ];
32             }
33              
34             sub has_next_item {
35 2     2 0 5 my $self = shift;
36 2         3 $self->{pos} < @{ $self->{array} };
  2         16  
37             }
38              
39             sub reset_iterator {
40 2     2 0 8 my $self = shift;
41 2         6 $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 2 my $self = shift;
51 1         2 scalar @{ $self->{array} };
  1         4  
52             }
53              
54             sub get_item_at_pos {
55 2     2 0 30 my ($self, $pos) = @_;
56 2 50       4 if ($pos < 0) {
57 0 0       0 die "Out of range" unless -$pos <= @{ $self->{array} };
  0         0  
58             } else {
59 2 100       3 die "Out of range" unless $pos < @{ $self->{array} };
  2         12  
60             }
61 1         4 $self->{array}->[ $pos ];
62             }
63              
64             sub has_item_at_pos {
65 2     2 0 5 my ($self, $pos) = @_;
66 2 50       6 if ($pos < 0) {
67 0 0       0 return -$pos <= @{ $self->{array} } ? 1:0;
  0         0  
68             } else {
69 2 100       3 return $pos < @{ $self->{array} } ? 1:0;
  2         10  
70             }
71             }
72              
73             1;
74             # ABSTRACT: Get array data from a Perl array
75              
76             __END__