File Coverage

blib/lib/WebService/Pixela/Graph.pm
Criterion Covered Total %
statement 92 98 93.8
branch 43 56 76.7
condition 13 24 54.1
subroutine 15 16 93.7
pod 9 11 81.8
total 172 205 83.9


line stmt bran cond sub pod time code
1             package WebService::Pixela::Graph;
2 6     6   207492 use 5.010001;
  6         26  
3 6     6   31 use strict;
  6         11  
  6         107  
4 6     6   28 use warnings;
  6         19  
  6         147  
5 6     6   29 use Carp qw/croak/;
  6         12  
  6         7297  
6              
7             our $VERSION = "0.021";
8              
9             sub new {
10 44     44 0 8288 my ($class,$pixela_client) = @_;
11 44         128 return bless +{
12             client => $pixela_client,
13             }, $class;
14             }
15              
16              
17             sub client {
18 29     29 0 3725 my $self = shift;
19 29         105 return $self->{client};
20             }
21              
22             sub id {
23 48     48 1 7698 my $self = shift;
24 48 100       128 if (@_){
25 16         31 $self->{id} = shift;
26 16         50 return $self;
27             }
28 32         101 return $self->{id};
29             }
30              
31             sub create {
32 8     8 1 5079 my ($self,%args) = @_;
33 8         17 my $params = {};
34              
35             #check id
36 8   66     27 $params->{id} = $args{id} // $self->id();
37 8 100       187 croak 'require id' unless $params->{id};
38              
39             #check name unit
40 7   66     12 map { $params->{$_} = $args{$_} // croak "require $_" } (qw/name unit/);
  13         183  
41              
42             # check type
43 5 100       83 croak 'require type' unless $args{type};
44             map {
45 4 100       7 if ( $args{type} =~ /^$_$/i){
  8         94  
46 3         17 $params->{type} = lc($args{type});
47             }
48             } (qw/int float/);
49              
50 4 100       86 croak 'invalid type' unless $params->{type};
51              
52             # check color
53 3 100       79 croak 'require color' unless $args{color};
54 2         7 $params->{color} = _color_validate($args{color});
55 2 100       91 croak 'invalid color' unless $params->{color};
56              
57             #no check timezone...
58 1 50       3 $params->{timezone} = $args{timezone} if $args{timezone};
59              
60 1         4 my $path = 'users/'.$self->client->username.'/graphs';
61 1         12 $self->id($params->{id});
62 1         3 return $self->client->request_with_xuser_in_header('POST',$path,$params);
63             }
64              
65              
66             sub get {
67 2     2 1 8 my $self = shift;
68 2         5 my $res = $self->client->request_with_xuser_in_header('GET',('users/'.$self->client->username.'/graphs'));
69 2 100       22 return $self->client->decode() ? $res->{graphs} : $res;
70             }
71              
72              
73             sub get_svg {
74 4     4 1 1669 my ($self, %args) = @_;
75 4   100     41 my $id = $args{id} // $self->id;
76 4 100       97 croak 'require graph id' unless $id;
77              
78 3         6 my $query = {};
79 3 100       10 $query->{date} = $args{date} if $args{date};
80 3 100       9 $query->{mode} = $args{mode} if $args{mode};
81              
82 3         8 my $path = 'users/'.$self->client->username.'/graphs/'.$id;
83              
84 3         21 return $self->client->query_request('GET',$path,$query);
85             }
86              
87             sub update {
88 2     2 1 46 my ($self,%arg) = @_;
89 2         6 my $client = $self->client;
90              
91 2   66     10 my $id = $arg{id} // $self->id;
92 2 100       82 croak 'require graph id' unless $id;
93              
94 1         3 my $params = {};
95 1 100       2 map { $params->{$_} = $arg{$_} if $arg{$_} } (qw/name unit timezone/);
  3         17  
96              
97             #color invalid -> croak
98 1 50       3 if ($arg{color}){
99 1         4 $params->{color} = _color_validate($arg{color});
100 1 50       5 croak 'invalid color' unless $params->{color};
101             }
102              
103 1 50       13 if ($arg{purge_cache_urls}){
104 1 50       6 if (ref($arg{purge_cache_urls}) ne 'ARRAY'){
105 0         0 croak 'invalid types for purge_cache_urls';
106             }
107 1         3 $params->{purgeCacheURLs} = $arg{purge_cache_urls};
108             }
109              
110 1 50       4 $params->{selfSufficient} = $arg{self_sufficient} if defined $arg{self_sufficient};
111              
112 1         5 return $client->request_with_xuser_in_header('PUT',('users/'.$client->username.'/graphs/'.$id),$params);
113             }
114              
115             sub delete {
116 0     0 1 0 my ($self,$id) = @_;
117 0         0 my $client = $self->client;
118              
119 0   0     0 $id //= $self->id;
120 0 0       0 croak 'require graph id' unless $id;
121              
122 0         0 return $client->request_with_xuser_in_header('DELETE',('users/'.$client->username.'/graphs/'.$id));
123             }
124              
125             sub html {
126 3     3 1 13 my ($self,%args) = @_;
127              
128 3         8 my $client = $self->client;
129              
130 3   66     10 my $id = $args{id} // $self->id;
131 3 50       8 croak 'require graph id' unless $id;
132              
133 3         8 my $path = $client->base_url . 'v1/users/'.$client->username.'/graphs/'.$id.'.html';
134              
135 3 100       30 if ($args{line}){
136 1         3 $path .= '?mode=line';
137             }
138              
139 3         25 return $path;
140             }
141              
142             sub pixels {
143 2     2 1 12 my ($self,%args) = @_;
144              
145 2   33     7 my $id = $args{id} // $self->id;
146 2 50       6 croak 'require id' unless $id;
147              
148 2         4 my $params = {};
149 2 50       8 $params->{to} = $args{to} if $args{to};
150 2 50       6 $params->{from} = $args{from} if $args{from};
151              
152 2         7 my $path = 'users/'.$self->client->username.'/graphs/'.$id.'/pixels';
153 2         25 my $res = $self->client->request_with_xuser_in_header('GET',$path,$params);
154              
155 2 100       15 return $self->client->decode() ? $res->{pixels} : $res;
156             }
157              
158             sub stats {
159 1     1 1 18 my ($self, $id) = @_;
160              
161 1         4 my $client = $self->client;
162              
163 1   33     4 $id //= $self->id;
164 1 50       5 croak 'require graph id' unless $id;
165              
166 1         3 my $path = 'users/'.$self->client->username.'/graphs/'.$id.'/stats';
167 1         8 return $self->client->request('GET',$path);
168             }
169              
170             sub _color_validate {
171 3     3   5 my $check_color = shift;
172             map {
173 3 100       6 if ($check_color =~ /^$_$/i){
  12         101  
174 2         8 return lc($check_color);
175             }
176             } (qw/shibafu momiji sora ichou ajisai kuro/);
177 1         3 return undef;
178             }
179              
180             1;
181             __END__