File Coverage

blib/lib/Protocol/XMLRPC/Value/Boolean.pm
Criterion Covered Total %
statement 60 60 100.0
branch 18 22 81.8
condition 2 3 66.6
subroutine 25 25 100.0
pod 3 4 75.0
total 108 114 94.7


line stmt bran cond sub pod time code
1             package Protocol::XMLRPC::Value::Boolean;
2              
3 9     9   939 use strict;
  9         13  
  9         446  
4 9     9   45 use warnings;
  9         14  
  9         332  
5              
6 9     9   45 use base 'Protocol::XMLRPC::Value';
  9         12  
  9         3962  
7              
8 1     1 1 759 sub type {'boolean'}
9              
10             sub parse {
11 5     5 0 333 my $class = shift;
12 5         7 my $string = shift;
13              
14 5 100 66     42 die "Invalid 'Boolean' value"
15             unless defined $string && $string =~ m/^(?:0|false|1|true)$/;
16              
17 4         11 return $class->new($string, @_);
18             }
19              
20             sub value {
21 27     27 1 45 my $self = shift;
22              
23 27 100       55 if (@_) {
24 13         15 my $value = shift;
25              
26 13 100       49 if (ref($value) eq 'SCALAR') {
27 4 100       10 $value = $$value ? 1 : 0;
28             }
29             else {
30 9 100       566 $value = $value eq 'true' ? 1 : $value eq 'false' ? 0 : !!$value;
    100          
31             }
32              
33 13 100       52 $self->{value} =
34             $value
35             ? Protocol::XMLRPC::Value::_True->new
36             : Protocol::XMLRPC::Value::_False->new;
37              
38 13         32 return $self;
39             }
40              
41 14         60 return $self->{value};
42             }
43              
44             sub to_string {
45 6     6 1 28 my $self = shift;
46              
47 6         13 my $value = $self->value;
48              
49 6         16 return "$value";
50             }
51              
52             package Protocol::XMLRPC::Value::_True;
53              
54 9     9   59 use overload '""' => sub {'true'}, fallback => 1;
  9     3   37  
  9         96  
  3         13  
55 9     9   1121 use overload 'bool' => sub {1}, fallback => 1;
  9     2   26  
  9         55  
  2         54  
56 9 50   9   718 use overload 'eq' => sub { $_[1] eq 'true' ? 1 : 0; }, fallback => 1;
  9     1   14  
  9         46  
  1         5  
57 9 50   9   681 use overload '==' => sub { $_[1] == 1 ? 1 : 0; }, fallback => 1;
  9     1   16  
  9         64  
  1         5  
58              
59 7     7   81 sub new { bless {}, $_[0] }
60              
61             package Protocol::XMLRPC::Value::_False;
62              
63 9     9   963 use overload '""' => sub {'false'}, fallback => 1;
  9     3   13  
  9         108  
  3         15  
64 9     9   680 use overload 'bool' => sub {0}, fallback => 1;
  9     2   13  
  9         83  
  2         8  
65 9 50   9   652 use overload 'eq' => sub { $_[1] eq 'false' ? 1 : 0; }, fallback => 1;
  9     1   17  
  9         51  
  1         7  
66 9 50   9   653 use overload '==' => sub { $_[1] == 0 ? 1 : 0; }, fallback => 1;
  9     1   14  
  9         51  
  1         6  
67              
68 6     6   86 sub new { bless {}, $_[0] }
69              
70             1;
71             __END__