File Coverage

blib/lib/Archive/Har/Entry/Response.pm
Criterion Covered Total %
statement 18 154 11.6
branch 0 58 0.0
condition 0 6 0.0
subroutine 6 20 30.0
pod 11 12 91.6
total 35 250 14.0


line stmt bran cond sub pod time code
1             package Archive::Har::Entry::Response;
2              
3 1     1   6 use warnings;
  1         2  
  1         35  
4 1     1   5 use strict;
  1         2  
  1         19  
5 1     1   5 use Carp();
  1         2  
  1         15  
6 1     1   5 use Archive::Har::Entry::Header();
  1         1  
  1         15  
7 1     1   5 use Archive::Har::Entry::Cookie();
  1         2  
  1         14  
8 1     1   620 use Archive::Har::Entry::Response::Content();
  1         2  
  1         1480  
9              
10             our $VERSION = 0.19;
11              
12 0     0     sub _DOES_NOT_APPLY { return -1 }
13              
14             sub new {
15 0     0 1   my ( $class, $params ) = @_;
16 0           my $self = {};
17 0           bless $self, $class;
18 0 0         if ( defined $params ) {
19 0           $self->status( $params->{status} );
20 0           $self->status_text( $params->{statusText} );
21 0           $self->http_version( $params->{httpVersion} );
22 0           my @cookies;
23 0           foreach my $cookie ( @{ $params->{cookies} } ) {
  0            
24 0           push @cookies, Archive::Har::Entry::Cookie->new($cookie);
25             }
26 0           $self->cookies( \@cookies );
27 0           my @headers;
28 0           foreach my $header ( @{ $params->{headers} } ) {
  0            
29 0           push @headers, Archive::Har::Entry::Header->new($header);
30             }
31 0           $self->headers( \@headers );
32             $self->content(
33 0           Archive::Har::Entry::Response::Content->new( $params->{content} ) );
34 0           $self->redirect_url( $params->{redirectURL} );
35 0           $self->headers_size( $params->{headersSize} );
36 0           $self->body_size( $params->{bodySize} );
37 0 0         if ( defined $params->{comment} ) {
38 0           $self->comment( $params->{comment} );
39             }
40 0           foreach my $key ( sort { $a cmp $b } keys %{$params} ) {
  0            
  0            
41 0 0         if ( $key =~ /^_[[:alnum:]]+$/smx ) { # private fields
42 0           $self->$key( $params->{$key} );
43             }
44             }
45             }
46 0           return $self;
47             }
48              
49             sub status {
50 0     0 1   my ( $self, $new ) = @_;
51 0           my $old = $self->{status};
52 0 0         if ( @_ > 1 ) {
53 0           $self->{status} = $new;
54             }
55 0 0         if ( defined $old ) {
56 0           return $old;
57             }
58             else {
59 0           return 0;
60             }
61             }
62              
63             sub status_text {
64 0     0 1   my ( $self, $new ) = @_;
65 0           my $old = $self->{statusText};
66 0 0         if ( @_ > 1 ) {
67 0           $self->{statusText} = $new;
68             }
69 0 0         if ( defined $old ) {
70 0           return $old;
71             }
72             else {
73 0           return 'Unknown';
74             }
75             }
76              
77             sub http_version {
78 0     0 1   my ( $self, $new ) = @_;
79 0           my $old = $self->{httpVersion};
80 0 0         if ( @_ > 1 ) {
81 0           $self->{httpVersion} = $new;
82             }
83 0 0         if ( defined $old ) {
84 0           return $old;
85             }
86             else {
87 0           return 'Unknown';
88             }
89             }
90              
91             sub headers {
92 0     0 1   my ( $self, $new ) = @_;
93 0           my $old = $self->{headers};
94 0 0         if ( @_ > 1 ) {
95 0           $self->{headers} = $new;
96             }
97 0 0         if ( defined $old ) {
98 0           return @{$old};
  0            
99             }
100             else {
101 0           return ();
102             }
103             }
104              
105             sub cookies {
106 0     0 1   my ( $self, $new ) = @_;
107 0           my $old = $self->{cookies};
108 0 0         if ( @_ > 1 ) {
109 0           $self->{cookies} = $new;
110             }
111 0 0         if ( defined $old ) {
112 0           return @{$old};
  0            
113             }
114             else {
115 0           return ();
116             }
117             }
118              
119             sub content {
120 0     0 1   my ( $self, $new ) = @_;
121 0           my $old = $self->{content};
122 0 0         if ( @_ > 1 ) {
123 0           $self->{content} = Archive::Har::Entry::Response::Content->new($new);
124             }
125 0           return $old;
126             }
127              
128             sub redirect_url {
129 0     0 1   my ( $self, $new ) = @_;
130 0           my $old = $self->{redirectURL};
131 0 0         if ( @_ > 1 ) {
132 0           $self->{redirectURL} = $new;
133             }
134 0           return $old;
135             }
136              
137             sub headers_size {
138 0     0 1   my ( $self, $new ) = @_;
139 0           my $old = $self->{headersSize};
140 0 0         if ( @_ > 1 ) {
141 0 0         if ( defined $new ) {
142 0           $self->{headersSize} = $new + 0;
143             }
144             else {
145 0           $self->{headersSize} = _DOES_NOT_APPLY();
146             }
147             }
148 0 0 0       if ( ( defined $old ) && ( $old == _DOES_NOT_APPLY() ) ) {
149 0           return;
150             }
151             else {
152 0           return $old;
153             }
154             }
155              
156             sub body_size {
157 0     0 1   my ( $self, $new ) = @_;
158 0           my $old = $self->{bodySize};
159 0 0         if ( @_ > 1 ) {
160 0 0         if ( defined $new ) {
161 0           $self->{bodySize} = $new + 0;
162             }
163             else {
164 0           $self->{bodySize} = _DOES_NOT_APPLY();
165             }
166             }
167 0 0 0       if ( ( defined $old ) && ( $old == _DOES_NOT_APPLY() ) ) {
168 0           return;
169             }
170             else {
171 0           return $old;
172             }
173             }
174              
175             sub comment {
176 0     0 1   my ( $self, $new ) = @_;
177 0           my $old = $self->{comment};
178 0 0         if ( @_ > 1 ) {
179 0           $self->{comment} = $new;
180             }
181 0           return $old;
182             }
183              
184             sub AUTOLOAD {
185 0     0     my ( $self, $new ) = @_;
186              
187 0           my $name = $Archive::Har::Entry::Response::AUTOLOAD;
188 0           $name =~ s/.*://smx; # strip fully-qualified portion
189              
190 0           my $old;
191 0 0         if ( $name =~ /^_[[:alnum:]]+$/smx ) { # private fields
192 0           $old = $self->{$name};
193 0 0         if ( @_ > 1 ) {
194 0           $self->{$name} = $new;
195             }
196             }
197             else {
198 0           Carp::croak(
199             "$name is not specified in the HAR 1.2 spec and does not start with an underscore"
200             );
201             }
202 0           return $old;
203             }
204              
205             sub TO_JSON {
206 0     0 0   my ($self) = @_;
207 0           my $json = {};
208 0           $json->{status} = $self->status();
209 0           $json->{statusText} = $self->status_text();
210 0           $json->{httpVersion} = $self->http_version();
211 0           $json->{cookies} = [ $self->cookies() ];
212 0           $json->{headers} = [ $self->headers() ];
213 0           $json->{content} = $self->content();
214 0           $json->{redirectURL} = $self->redirect_url();
215 0 0         if ( defined $self->headers_size() ) {
216 0           $json->{headersSize} = $self->headers_size();
217             }
218             else {
219 0           $json->{headersSize} = _DOES_NOT_APPLY();
220             }
221 0           $json->{headersSize} += 0;
222 0 0         if ( defined $self->body_size() ) {
223 0           $json->{bodySize} = $self->body_size();
224             }
225             else {
226 0           $json->{bodySize} = _DOES_NOT_APPLY();
227             }
228 0           $json->{bodySize} += 0;
229 0 0         if ( defined $self->comment() ) {
230 0           $json->{comment} = $self->comment();
231             }
232 0           foreach my $key ( sort { $a cmp $b } keys %{$self} ) {
  0            
  0            
233 0 0         next if ( !defined $self->{$key} );
234 0 0         if ( $key =~ /^_[[:alnum:]]+$/smx ) { # private fields
235 0           $json->{$key} = $self->{$key};
236             }
237             }
238 0           return $json;
239             }
240              
241             1;
242             __END__