File Coverage

blib/lib/Pod/WSDL/Writer.pm
Criterion Covered Total %
statement 75 102 73.5
branch 12 36 33.3
condition 7 20 35.0
subroutine 15 18 83.3
pod 7 12 58.3
total 116 188 61.7


line stmt bran cond sub pod time code
1             package Pod::WSDL::Writer;
2              
3 9     9   49402 use strict;
  9         19  
  9         319  
4 9     9   48 use warnings;
  9         17  
  9         545  
5 9     9   13424 use XML::Writer;
  9         170732  
  9         320  
6 9     9   9442 use Pod::WSDL::Utils ':writexml';
  9         27  
  9         15287  
7              
8             our $AUTOLOAD;
9             our $VERSION = "0.05";
10              
11             our $INDENT_CHAR = "\t";
12             our $NL_CHAR = "\n";
13              
14             sub new {
15 11     11 1 1292 my ($pkg, %data) = @_;
16              
17 11   100     88 $data{pretty} ||= 0;
18 11   100     49 $data{withDocumentation} ||= 0;
19            
20 11         24 my $outStr = "";
21              
22 11         157 my $me = bless {
23             _pretty => $data{pretty},
24             _withDocumentation => $data{withDocumentation},
25             _outStr => \$outStr,
26             _writer => undef,
27             _indent => 1,
28             _lastTag => '',
29             _faultMessageWritten => {},
30             _emptyMessageWritten => 0,
31             }, $pkg;
32            
33 11         38 $me->prepare;
34              
35 11         488 return $me;
36            
37             }
38              
39             sub wrNewLine {
40 14     14 1 20 my $me = shift;
41 14         17 my $cnt = shift;
42              
43 14   50     58 $cnt ||= 1;
44              
45 14 100       51 return unless $me->{_pretty};
46              
47 1         8 $me->{_writer}->characters($NL_CHAR x $cnt);
48             }
49              
50             sub wrElem {
51 11     11 1 473 my $me = shift;
52 11         18 my $type = shift;
53              
54 11 50       33 if ($me->{_pretty}) {
55 0 0 0     0 if ($me->{_lastTag} eq $START_PREFIX_NAME and ($type eq $START_PREFIX_NAME or $type eq $EMPTY_PREFIX_NAME)) {
    0 0        
      0        
56 0         0 $me->{_indent}++;
57             } elsif ($me->{_lastTag} ne $START_PREFIX_NAME and $type eq $END_PREFIX_NAME) {
58 0         0 $me->{_indent}--;
59             }
60            
61 0         0 $me->{_lastTag} = $type;
62              
63 0         0 $me->{_writer}->characters($INDENT_CHAR x $me->{_indent});
64             }
65              
66 11         15 $type .= 'Tag';
67 11         41 $me->{_writer}->$type(@_);
68              
69 11         608 $me->wrNewLine;
70             }
71              
72             sub wrDoc {
73 4     4 1 14 my $me = shift;
74              
75 4 100       17 return unless $me->{_withDocumentation};
76              
77 2         3 my $txt = shift;
78 2         6 my %args = @_;
79 2         3 my $useAnnotation = 0;
80 2         4 my $docTagName = "wsdl:documentation";
81            
82 2 50 33     7 if (%args and $args{useAnnotation}) {
83 0         0 $useAnnotation = 1;
84 0         0 $docTagName = "documentation";
85             }
86              
87              
88 2   50     6 $txt ||= '';
89 2         10 $txt =~ s/\s+$//;
90            
91 2 50       6 return unless $txt;
92            
93 2 0       6 $me->{_writer}->characters($INDENT_CHAR x ($me->{_indent} + ($me->{_lastTag} eq $START_PREFIX_NAME ? 1 : 0))) if $me->{_pretty};
    50          
94              
95 2 50       3 if ($useAnnotation) {
96 0         0 $me->{_writer}->startTag("annotation") ;
97 0         0 $me->wrNewLine;
98 0         0 $me->{_indent}++;
99 0 0       0 $me->{_writer}->characters($INDENT_CHAR x ($me->{_indent} + ($me->{_lastTag} eq $START_PREFIX_NAME ? 1 : 0))) if $me->{_pretty};
    0          
100             }
101            
102 2         9 $me->{_writer}->startTag($docTagName);
103 2         75 $me->{_writer}->characters($txt);
104 2         42 $me->{_writer}->endTag($docTagName);
105              
106 2 50       42 if ($useAnnotation) {
107 0         0 $me->wrNewLine;
108 0         0 $me->{_indent}--;
109 0 0       0 $me->{_writer}->characters($INDENT_CHAR x ($me->{_indent} + ($me->{_lastTag} eq $START_PREFIX_NAME ? 1 : 0))) if $me->{_pretty};
    0          
110 0         0 $me->{_writer}->endTag("annotation");
111             }
112            
113 2         6 $me->wrNewLine;
114             }
115              
116             sub output {
117 8     8 1 2605 my $me = shift;
118 8         11 return ${$me->{_outStr}};
  8         50  
119             }
120              
121             sub prepare {
122 11     11 0 16 my $me = shift;
123 11         23 ${$me->{_outStr}} = "";
  11         37  
124 11         20 $me->{_emptyMessageWritten} = 0;
125 11         73 $me->{_writer} = new XML::Writer(OUTPUT => $me->{_outStr});
126 11         2166 $me->{_writer}->xmlDecl("UTF-8");
127             }
128              
129             sub withDocumentation {
130 2     2 0 169 my $me = shift;
131 2         4 my $arg = shift;
132            
133 2 50       6 if (defined $arg) {
134 2         7 $me->{_withDocumentation} = $arg;
135 2         5 return $me;
136             } else {
137 0         0 return $me->{_withDocumentation};
138             }
139             }
140              
141             sub pretty {
142 0     0 0 0 my $me = shift;
143 0         0 my $arg = shift;
144            
145 0 0       0 if (defined $arg) {
146 0         0 $me->{_pretty} = $arg;
147 0         0 return $me;
148             } else {
149 0         0 return $me->{_pretty};
150             }
151             }
152              
153             sub registerWrittenFaultMessage {
154 1     1 1 2 my $me = shift;
155 1         2 my $arg = shift;
156            
157 1         5 return $me->{_faultMessageWritten}->{$arg} = 1;
158             }
159              
160             sub faultMessageWritten {
161 1     1 1 2 my $me = shift;
162 1         2 my $arg = shift;
163            
164 1         5 return $me->{_faultMessageWritten}->{$arg};
165             }
166              
167             sub registerWrittenEmptyMessage {
168 0     0 0 0 my $me = shift;
169            
170 0         0 return $me->{_emptyMessageWritten} = 1;
171             }
172              
173             sub emptyMessageWritten {
174 0     0 0 0 my $me = shift;
175            
176 0         0 return $me->{_emptyMessageWritten};
177             }
178              
179             sub AUTOLOAD {
180 3     3   6 my $me = shift;
181            
182 3         6 my $method = $AUTOLOAD;
183 3         16 $method =~ s/.*:://;
184              
185 3 50       9 if ($method eq "DESTROY"){
186 0         0 return;
187             } else {
188 9     9   74 no strict 'refs';
  9         20  
  9         773  
189 3         37 $me->{_writer}->$method(@_);
190             }
191             }
192              
193             1;
194             __END__