| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | package WWW::Jawbone::Up::JSON; | 
| 2 |  |  |  |  |  |  |  | 
| 3 | 6 |  |  | 6 |  | 106 | use 5.010; | 
|  | 6 |  |  |  |  | 19 |  | 
|  | 6 |  |  |  |  | 295 |  | 
| 4 | 6 |  |  | 6 |  | 31 | use strict; | 
|  | 6 |  |  |  |  | 9 |  | 
|  | 6 |  |  |  |  | 163 |  | 
| 5 | 6 |  |  | 6 |  | 30 | use warnings; | 
|  | 6 |  |  |  |  | 11 |  | 
|  | 6 |  |  |  |  | 135 |  | 
| 6 |  |  |  |  |  |  |  | 
| 7 | 6 |  |  | 6 |  | 1349 | use Carp; | 
|  | 6 |  |  |  |  | 1259 |  | 
|  | 6 |  |  |  |  | 482 |  | 
| 8 | 6 |  |  | 6 |  | 36 | use DateTime; | 
|  | 6 |  |  |  |  | 11 |  | 
|  | 6 |  |  |  |  | 321 |  | 
| 9 |  |  |  |  |  |  |  | 
| 10 |  |  |  |  |  |  | sub patch { | 
| 11 | 173 |  |  | 173 | 0 | 272 | my ($class, $method, $code) = @_; | 
| 12 |  |  |  |  |  |  |  | 
| 13 | 6 |  |  | 6 |  | 44 | no strict 'refs'; | 
|  | 6 |  |  |  |  | 11 |  | 
|  | 6 |  |  |  |  | 3253 |  | 
| 14 | 173 |  |  |  |  | 188 | *{ $class . '::' . $method } = $code; | 
|  | 173 |  |  |  |  | 1238 |  | 
| 15 |  |  |  |  |  |  | } | 
| 16 |  |  |  |  |  |  |  | 
| 17 |  |  |  |  |  |  | sub add_accessors { | 
| 18 | 27 |  |  | 27 | 0 | 53 | my $class = shift; | 
| 19 |  |  |  |  |  |  |  | 
| 20 | 27 |  |  |  |  | 83 | foreach my $arg (@_) { | 
| 21 | 123 | 100 |  |  |  | 299 | if (ref $arg eq '') { | 
|  |  | 50 |  |  |  |  |  | 
| 22 | 104 |  |  | 30 |  | 531 | $class->patch($arg, sub { my $self = shift; return $self->{$arg} }); | 
|  | 30 |  |  |  |  | 18489 |  | 
|  | 30 |  |  |  |  | 270 |  | 
| 23 |  |  |  |  |  |  | } elsif (ref $arg eq 'HASH') { | 
| 24 | 19 |  |  |  |  | 62 | foreach my $name (keys %$arg) { | 
| 25 | 21 |  |  |  |  | 42 | my $value = $arg->{$name}; | 
| 26 | 21 |  |  | 11 |  | 94 | $class->patch($name, sub { my $self = shift; return $self->{$value} }); | 
|  | 11 |  |  |  |  | 24 |  | 
|  | 11 |  |  |  |  | 90 |  | 
| 27 |  |  |  |  |  |  | } | 
| 28 |  |  |  |  |  |  | } else { | 
| 29 | 0 |  |  |  |  | 0 | croak "Invalid argument type: " . ref $arg; | 
| 30 |  |  |  |  |  |  | } | 
| 31 |  |  |  |  |  |  | } | 
| 32 |  |  |  |  |  |  | } | 
| 33 |  |  |  |  |  |  |  | 
| 34 |  |  |  |  |  |  | sub add_subclass { | 
| 35 | 18 |  |  | 18 | 0 | 44 | my ($class, $method, $subclass) = @_; | 
| 36 |  |  |  |  |  |  |  | 
| 37 |  |  |  |  |  |  | $class->patch( | 
| 38 |  |  |  |  |  |  | $method => sub { | 
| 39 | 4 |  |  | 4 |  | 16 | my $self = shift; | 
| 40 |  |  |  |  |  |  |  | 
| 41 | 4 | 50 |  |  |  | 312 | if (ref $self->{$method} ne $subclass) { | 
| 42 | 4 |  |  | 2 |  | 710 | eval "use $subclass"; | 
|  | 2 |  |  | 2 |  | 767 |  | 
|  | 2 |  |  |  |  | 5 |  | 
|  | 2 |  |  |  |  | 41 |  | 
|  | 2 |  |  |  |  | 899 |  | 
|  | 2 |  |  |  |  | 7 |  | 
|  | 2 |  |  |  |  | 40 |  | 
| 43 | 4 | 50 |  |  |  | 23 | croak $@ if $@; | 
| 44 | 4 |  |  |  |  | 35 | $self->{$method} = $subclass->new($self->{$method}); | 
| 45 |  |  |  |  |  |  | } | 
| 46 |  |  |  |  |  |  |  | 
| 47 | 4 |  |  |  |  | 21 | return $self->{$method}; | 
| 48 | 18 |  |  |  |  | 114 | }); | 
| 49 |  |  |  |  |  |  | } | 
| 50 |  |  |  |  |  |  |  | 
| 51 |  |  |  |  |  |  | sub add_time_accessors { | 
| 52 | 12 |  |  | 12 | 0 | 25 | my $class = shift; | 
| 53 |  |  |  |  |  |  |  | 
| 54 | 12 |  |  |  |  | 30 | foreach my $method (@_) { | 
| 55 |  |  |  |  |  |  | $class->patch( | 
| 56 |  |  |  |  |  |  | $method => sub { | 
| 57 | 5 |  |  | 5 |  | 37623 | my $self = shift; | 
| 58 | 5 |  |  |  |  | 32 | return DateTime->from_epoch( | 
| 59 |  |  |  |  |  |  | epoch     => $self->{ 'time_' . $method }, | 
| 60 |  |  |  |  |  |  | time_zone => $self->timezone, | 
| 61 |  |  |  |  |  |  | ); | 
| 62 | 30 |  |  |  |  | 244 | }); | 
| 63 |  |  |  |  |  |  | } | 
| 64 |  |  |  |  |  |  | } | 
| 65 |  |  |  |  |  |  |  | 
| 66 |  |  |  |  |  |  | sub new { | 
| 67 | 10 |  |  | 10 | 0 | 25 | my ($class, $json) = @_; | 
| 68 |  |  |  |  |  |  |  | 
| 69 | 10 |  |  |  |  | 174 | return bless $json, $class; | 
| 70 |  |  |  |  |  |  | } | 
| 71 |  |  |  |  |  |  |  | 
| 72 |  |  |  |  |  |  | 1; |