File Coverage

blib/lib/Protocol/XMLRPC/Value/Struct.pm
Criterion Covered Total %
statement 51 52 98.0
branch 3 4 75.0
condition n/a
subroutine 10 11 90.9
pod 6 6 100.0
total 70 73 95.8


line stmt bran cond sub pod time code
1             package Protocol::XMLRPC::Value::Struct;
2              
3 8     8   789 use strict;
  8         16  
  8         277  
4 8     8   42 use warnings;
  8         20  
  8         236  
5              
6 8     8   528 use Protocol::XMLRPC::ValueFactory;
  8         13  
  8         367  
7              
8 8     8   43 use overload '""' => sub { shift->to_string }, fallback => 1;
  8     0   15  
  8         99  
  0         0  
9              
10 1     1 1 387 sub type {'struct'}
11              
12             sub new {
13 7     7 1 9 my $class = shift;
14              
15 7         9 my @values;
16              
17 7 100       22 if (@_ == 1) {
18 4 50       11 @values = ref($_[0]) eq 'HASH' ? %{$_[0]} : ($_[0]);
  4         14  
19             }
20             else {
21 3         5 @values = @_;
22             }
23              
24 7         11 my $self = {};
25 7         17 bless $self, $class;
26              
27 7         79 $self->{_members} = [];
28              
29 7         22 for (my $i = 0; $i < @values; $i += 2) {
30 6         11 my $name = $values[$i];
31 6         10 my $value = $values[$i + 1];
32              
33 6         14 $self->add_member($name => $value);
34             }
35              
36 7         19 return $self;
37             }
38              
39             sub add_member {
40 8     8 1 11 my $self = shift;
41 8         12 my ($key, $value) = @_;
42              
43 8         10 push @{$self->{_members}},
  8         31  
44             ($key => Protocol::XMLRPC::ValueFactory->build($value));
45             }
46              
47             sub members {
48 13     13 1 20 my $self = shift;
49              
50 13         14 return {@{$self->{_members}}};
  13         74  
51             }
52              
53             sub value {
54 5     5 1 6 my $self = shift;
55              
56 5         8 my $hash = {};
57 5         8 for (my $i = 0; $i < @{$self->{_members}}; $i += 2) {
  13         32  
58 8         14 my $name = $self->{_members}->[$i];
59 8         22 my $value = $self->{_members}->[$i + 1]->value;
60              
61 8         18 $hash->{$name} = $value;
62             }
63              
64 5         24 return $hash;
65             }
66              
67             sub to_string {
68 8     8 1 36 my $self = shift;
69              
70 8         9 my $string = '';
71              
72 8         11 for (my $i = 0; $i < @{$self->{_members}}; $i += 2) {
  20         46  
73 12         15 my $name = $self->{_members}->[$i];
74 12         34 my $value = $self->{_members}->[$i + 1]->to_string;
75              
76 12         35 $string .= "$name$value";
77             }
78              
79 8         15 $string .= '';
80              
81 8         35 return $string;
82             }
83              
84             1;
85             __END__