File Coverage

blib/lib/Archive/Har/Page.pm
Criterion Covered Total %
statement 12 95 12.6
branch 0 44 0.0
condition 0 5 0.0
subroutine 4 12 33.3
pod 5 7 71.4
total 21 163 12.8


line stmt bran cond sub pod time code
1             package Archive::Har::Page;
2              
3 1     1   4 use warnings;
  1         8  
  1         29  
4 1     1   5 use strict;
  1         2  
  1         18  
5 1     1   4 use Carp();
  1         2  
  1         19  
6 1     1   574 use Archive::Har::Page::PageTimings();
  1         2  
  1         1016  
7              
8             our $VERSION = 0.19;
9              
10             sub new {
11 0     0 0   my ( $class, $params ) = @_;
12 0           my $self = {};
13 0           bless $self, $class;
14 0 0         if ( defined $params ) {
15 0           $self->id( $params->{id} );
16 0 0         if ( defined $params->{title} ) {
17 0           $self->title( $params->{title} );
18             }
19 0 0         if ( defined $params->{startedDateTime} ) {
20 0           $self->started_date_time( $params->{startedDateTime} );
21             }
22             $self->page_timings(
23             Archive::Har::Page::PageTimings->new(
24             $params->{pageTimings} || {}
25             )
26 0   0       );
27 0 0         if ( defined $params->{comment} ) {
28 0           $self->comment( $params->{comment} );
29             }
30 0           foreach my $key ( sort { $a cmp $b } keys %{$params} ) {
  0            
  0            
31 0 0         if ( $key =~ /^_[[:alnum:]]+$/smx ) { # private fields
32 0           $self->$key( $params->{$key} );
33             }
34             }
35             }
36 0           return $self;
37             }
38              
39             sub id {
40 0     0 1   my ( $self, $new ) = @_;
41 0           my $old = $self->{id};
42 0 0         if ( @_ > 1 ) {
43 0           $self->{id} = $new;
44             }
45 0           return $old;
46             }
47              
48             sub title {
49 0     0 1   my ( $self, $new ) = @_;
50 0           my $old = $self->{title};
51 0 0         if ( @_ > 1 ) {
52 0           $self->{title} = $new;
53             }
54 0 0         if ( defined $old ) {
55 0           return $old;
56             }
57             else {
58 0           return;
59             }
60             }
61              
62             sub started_date_time {
63 0     0 1   my ( $self, $new ) = @_;
64 0           my $old = $self->{startedDateTime};
65 0 0         if ( @_ > 1 ) {
66 0 0         if ( defined $new ) {
67 0           my $date_regex = qr/\d{4}[-]\d{2}[-]\d{2}/smx;
68 0           my $time_regex = qr/\d{2}:\d{2}:\d{2}[.]\d+/smx;
69 0           my $zone_regex = qr/(?:[+]\d{2}:\d{2}|Z)/smx;
70 0 0         if ( $new =~ /^${date_regex}T${time_regex}${zone_regex}$/smx ) {
71 0           $self->{startedDateTime} = $new;
72             }
73             else {
74 0           Carp::croak('started_date_time is not formatted correctly');
75             }
76             }
77             else {
78 0           $self->{startedDateTime} = '0000-00-00T00:00:00.0+00:00';
79             }
80             }
81 0 0 0       if ( ( defined $old ) && ( $old eq '0000-00-00T00:00:00.0+00:00' ) ) {
82 0           return;
83             }
84             else {
85 0           return $old;
86             }
87             }
88              
89             sub page_timings {
90 0     0 1   my ( $self, $new ) = @_;
91 0           my $old = $self->{pageTimings};
92 0 0         if ( @_ > 1 ) {
93 0           $self->{pageTimings} = $new;
94             }
95 0           return $old;
96             }
97              
98             sub comment {
99 0     0 1   my ( $self, $new ) = @_;
100 0           my $old = $self->{comment};
101 0 0         if ( @_ > 1 ) {
102 0           $self->{comment} = $new;
103             }
104 0           return $old;
105             }
106              
107             sub AUTOLOAD {
108 0     0     my ( $self, $new ) = @_;
109              
110 0           my $name = $Archive::Har::Page::AUTOLOAD;
111 0           $name =~ s/.*://smx; # strip fully-qualified portion
112              
113 0           my $old;
114 0 0         if ( $name =~ /^_[[:alnum:]]+$/smx ) { # private fields
115 0           $old = $self->{$name};
116 0 0         if ( @_ > 1 ) {
117 0           $self->{$name} = $new;
118             }
119             }
120             else {
121 0           Carp::croak(
122             "$name is not specified in the HAR 1.2 spec and does not start with an underscore"
123             );
124             }
125 0           return $old;
126             }
127              
128             sub TO_JSON {
129 0     0 0   my ($self) = @_;
130 0           my $json = { pageTimings => $self->page_timings(), };
131 0 0         if ( defined $self->title() ) {
132 0           $json->{title} = $self->title();
133             }
134             else {
135 0           $json->{title} = 'Unknown';
136             }
137 0 0         if ( defined $self->started_date_time() ) {
138 0           $json->{startedDateTime} = $self->started_date_time();
139             }
140             else {
141 0           $json->{startedDateTime} = '0000-00-00T00:00:00.0+00:00';
142             }
143 0 0         if ( defined $self->id() ) {
144 0           $json->{id} = $self->id();
145             }
146 0 0         if ( defined $self->comment() ) {
147 0           $json->{comment} = $self->comment();
148             }
149 0           foreach my $key ( sort { $a cmp $b } keys %{$self} ) {
  0            
  0            
150 0 0         next if ( !defined $self->{$key} );
151 0 0         if ( $key =~ /^_[[:alnum:]]+$/smx ) { # private fields
152 0           $json->{$key} = $self->{$key};
153             }
154             }
155 0           return $json;
156             }
157              
158             1;
159             __END__