File Coverage

blib/lib/Data/ZPath/NodeList.pm
Criterion Covered Total %
statement 37 37 100.0
branch 5 8 62.5
condition 2 6 33.3
subroutine 12 12 100.0
pod 7 8 87.5
total 63 71 88.7


line stmt bran cond sub pod time code
1 8     8   280352 use strict;
  8         18  
  8         398  
2 8     8   44 use warnings;
  8         14  
  8         674  
3              
4             package Data::ZPath::NodeList;
5              
6 8     8   52 use Scalar::Util qw(blessed);
  8         14  
  8         5435  
7              
8             our $VERSION = '0.001000';
9              
10             sub new {
11 39     39 0 151 my ( $class, @nodes ) = @_;
12 39         295 return bless \@nodes, $class;
13             }
14              
15             sub _new_or_list {
16 379     379   869 my ( $class, @nodes ) = @_;
17 379 100       2427 wantarray ? @nodes : $class->new( @nodes );
18             }
19              
20             sub all {
21 24     24 1 471 my ( $self ) = @_;
22 24         115 return @$self;
23             }
24              
25             sub values {
26 2     2 1 9 my ( $self ) = @_;
27 2         11 return map $_->value, @$self;
28             }
29              
30             sub first {
31 9     9 1 46 my ( $self ) = @_;
32 9         62 return $self->[0];
33             }
34              
35             sub last {
36 3     3 1 10 my ( $self ) = @_;
37 3         17 return $self->[-1];
38             }
39              
40             sub find {
41 2     2 1 680 require Data::ZPath;
42 2         9 my ( $self, $zpath ) = @_;
43 2 50       17 $zpath = Data::ZPath->new( $zpath ) unless blessed($zpath);
44              
45 2         11 return ref($self)->_new_or_list( map $_->find($zpath), $self->all );
46             }
47              
48             sub grep {
49 1     1 1 10 my ( $self, $cb ) = @_;
50             ref($self)->_new_or_list( grep {
51 1         5 my $node = $_;
  3         12  
52 3         7 local $_ = $node->value;
53 3         8 $cb->();
54             } $self->all );
55             }
56              
57             sub map {
58 1     1 1 10 my ( $self, $cb ) = @_;
59             ref($self)->_new_or_list( map {
60 1         5 my $node = $_;
  3         6  
61 3         9 local $_ = $node->value;
62             map {
63 3         8 my $new = $_;
  3         14  
64 3 50 33     19 blessed($new) && $new->isa('Data::ZPath::NodeList') ? $new->all :
    50 33        
65             blessed($new) && $new->isa('Data::ZPath::Node') ? $new :
66             Data::ZPath::Node->from_root( $new )
67             } $cb->();
68             } $self->all );
69             }
70              
71             1;
72              
73             __END__