File Coverage

blib/lib/Protocol/Yadis/Document/Service/Element.pm
Criterion Covered Total %
statement 44 44 100.0
branch 16 16 100.0
condition 6 6 100.0
subroutine 10 10 100.0
pod 6 6 100.0
total 82 82 100.0


line stmt bran cond sub pod time code
1             package Protocol::Yadis::Document::Service::Element;
2              
3 6     6   24054 use strict;
  6         12  
  6         214  
4 6     6   31 use warnings;
  6         28  
  6         294  
5              
6 6     6   1769 use overload '""' => sub { shift->to_string }, fallback => 1;
  6     13   1191  
  6         51  
  13         32  
7              
8             sub new {
9 9     9 1 25 my $class = shift;
10              
11 9         29 my $self = {@_};
12 9         23 bless $self, $class;
13              
14 9   100     104 $self->{name} ||= '';
15 9   100     638 $self->{content} ||= '';
16 9   100     40 $self->{attrs} ||= [];
17              
18 9         35 return $self;
19             }
20              
21 112 100   112 1 342 sub name { defined $_[1] ? $_[0]->{name} = $_[1] : $_[0]->{name} }
22 23 100   23 1 72 sub content { defined $_[1] ? $_[0]->{content} = $_[1] : $_[0]->{content} }
23 121 100   121 1 304 sub attrs { defined $_[1] ? $_[0]->{attrs} = $_[1] : $_[0]->{attrs} }
24              
25             sub attr {
26 76     76 1 84 my $self = shift;
27 76         80 my $name = shift;
28 76         78 my $value = shift;
29              
30 76         117 my $attrs = $self->attrs;
31              
32 76         90 my $i = 0;
33 76         233 for (; $i < @$attrs; $i += 2) {
34 18 100       46 last if $attrs->[$i] eq $name;
35             }
36              
37 76 100       128 if ($value) {
38 4 100       8 if ($i >= @$attrs) {
39 1         4 push @$attrs, ($name => $value);
40             }
41             else {
42 3         7 $attrs->[$i + 1] = $value;
43             }
44 4         9 return $self;
45             }
46              
47 72 100       261 return if $i >= @$attrs;
48              
49 11         40 return $attrs->[$i + 1];
50             }
51              
52             sub to_string {
53 13     13 1 17 my $self = shift;
54              
55 13         26 my $name = $self->name;
56 13 100       39 return '' unless $name;
57              
58 12         17 my $attrs = '';
59 12         18 for (my $i = 0; $i < @{$self->attrs}; $i += 2) {
  22         35  
60 10         14 $attrs .= ' ';
61 10         20 $attrs .= $self->attrs->[$i] . '="' . $self->attrs->[$i + 1] . '"';
62             }
63 12         21 my $content = $self->content;
64              
65 12         73 return "<$name$attrs>$content";
66             }
67              
68             1;
69             __END__