File Coverage

blib/lib/XML/TinyXML/Selector/XPath/Context.pm
Criterion Covered Total %
statement 13 13 100.0
branch n/a
condition n/a
subroutine 4 4 100.0
pod 0 1 0.0
total 17 18 94.4


line stmt bran cond sub pod time code
1             # Internal use only
2             package XML::TinyXML::Selector::XPath::Context;
3              
4 4     4   24 use strict;
  4         8  
  4         225  
5 4     4   24 use warnings;
  4         7  
  4         3524  
6              
7             our $VERSION = '0.34';
8              
9             our %Operators = (
10             '+' => sub { $_[0] + $_[1] },
11             '-' => sub { $_[0] - $_[1] },
12             '=' => sub { ($_[0] == $_[1]) },
13             '!=' => sub { ($_[0] != $_[1]) },
14             '<' => sub { ($_[0] < $_[1]) },
15             '<=' => sub { ($_[0] <= $_[1]) },
16             '>' => sub { ($_[0] > $_[1]) },
17             '>=' => sub { ($_[0] >= $_[1]) },
18             '*' => sub { $_[0] * $_[1] },
19             'and' => sub {
20             if (ref($_[0]) and ref($_[0]) eq "ARRAY") {
21             return scalar(@{$_[0]})?[@{$_[0]}, @{$_[1]}]:[];
22             } else {
23             return($_[0] && $_[1])
24             }
25             },
26             'or' => sub {
27             if (ref($_[0]) and ref($_[0]) eq "ARRAY") {
28             return scalar(@{$_[0]})?$_[0]:$_[1];
29             } else {
30             return($_[0] || $_[1])
31             }
32             },
33             'mod' => sub { ($_[0] % $_[1]) },
34             'div' => sub { $_[0]
35             ? $_[1]
36             ? $_[0] / $_[1]
37             : undef
38             : $_[1]
39             ? 0
40             : undef
41             }
42             );
43              
44             sub new {
45 121     121 0 193 my ($class, $xml) = @_;
46 121         399 my $self = { xml => $xml,
47             operators => \%Operators,
48             items => [$xml->rootNodes]
49             };
50 121         538 return bless $self, $class;
51             }
52              
53             sub AUTOLOAD
54             {
55 360     360   560 my $self = shift;
56 360         447 our $AUTOLOAD;
57 360         1272 my $method = (split('::', $AUTOLOAD))[-1];
58 360         1795 return $self->{$method};
59             }
60              
61             1;