File Coverage

blib/lib/Protocol/XMLRPC/MethodCall.pm
Criterion Covered Total %
statement 9 9 100.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 12 12 100.0


line stmt bran cond sub pod time code
1             package Protocol::XMLRPC::MethodCall;
2              
3 2     2   931 use strict;
  2         6  
  2         66  
4 2     2   11 use warnings;
  2         4  
  2         64  
5              
6 2     2   13 use base 'Protocol::XMLRPC::Method';
  2         3  
  2         1352  
7              
8             use Protocol::XMLRPC::ValueFactory;
9             require Carp;
10              
11             sub new {
12             my $self = shift->SUPER::new(@_);
13              
14             $self->{params} ||= [];
15              
16             Carp::croak('name is required') unless $self->name;
17              
18             return $self;
19             }
20              
21             sub name { defined $_[1] ? $_[0]->{name} = $_[1] : $_[0]->{name} }
22             sub params { defined $_[1] ? $_[0]->{params} = $_[1] : $_[0]->{params} }
23              
24             sub add_param {
25             my $self = shift;
26             my $param = shift;
27              
28             my $value = Protocol::XMLRPC::ValueFactory->build($param);
29             return unless defined $value;
30              
31             push @{$self->params}, $value;
32             }
33              
34             sub _parse_document {
35             my $class = shift;
36             my ($doc) = @_;
37              
38             my ($method_call) = $doc->getElementsByTagName('methodCall');
39             return unless $method_call;
40              
41             my ($name) = $method_call->getElementsByTagName('methodName');
42             return unless $name;
43              
44             my $self = $class->new(name => $name->textContent);
45              
46             if (my ($params) = $method_call->getElementsByTagName('params')) {
47             my @params = $params->getElementsByTagName('param');
48             foreach my $param (@params) {
49             my ($value) = $param->getElementsByTagName('value');
50              
51             if (defined(my $param = $self->_parse_value($value))) {
52             push @{$self->params}, $param;
53             }
54             else {
55             Carp::croak("Could not parse value of " . $value->serialize);
56             }
57             }
58             }
59              
60             return $self;
61             }
62              
63             sub to_string {
64             my $self = shift;
65              
66             my $method_name = $self->name;
67              
68             my $string = qq|$method_name|;
69              
70             $string .= '';
71              
72             foreach my $params (@{$self->params}) {
73             $string .= '' . $params->to_string . "";
74             }
75              
76             $string .= '';
77              
78             $string .= '';
79              
80             return $string;
81             }
82              
83             1;
84             __END__