File Coverage

blib/lib/API/Wunderlist.pm
Criterion Covered Total %
statement 9 24 37.5
branch n/a
condition n/a
subroutine 3 5 60.0
pod 0 2 0.0
total 12 31 38.7


line stmt bran cond sub pod time code
1             # ABSTRACT: Wunderlist.com API Client
2             package API::Wunderlist;
3              
4 1     1   1503 use Data::Object::Class;
  1         24922  
  1         9  
5 1     1   2373 use Data::Object::Signatures;
  1         259291  
  1         11  
6              
7 1         5 use Data::Object::Library qw(
8             Str
9 1     1   9032 );
  1         2  
10              
11             extends 'API::Client';
12              
13             our $VERSION = '0.06'; # VERSION
14              
15             our $DEFAULT_URL = "https://a.wunderlist.com";
16              
17             # ATTRIBUTES
18              
19             has client_id => (
20             is => 'rw',
21             isa => Str,
22             required => 1,
23             );
24              
25             has access_token => (
26             is => 'rw',
27             isa => Str,
28             required => 1,
29             );
30              
31             # DEFAULTS
32              
33             has '+identifier' => (
34             default => 'API::Wunderlist (Perl)',
35             required => 0,
36             );
37              
38             has '+url' => (
39             default => $DEFAULT_URL,
40             required => 0,
41             );
42              
43             has '+version' => (
44             default => 1,
45             required => 0,
46             );
47              
48             # CONSTRUCTION
49              
50             after BUILD => method {
51              
52             my $identifier = $self->identifier;
53             my $client_id = $self->client_id;
54             my $access_token = $self->access_token;
55             my $version = $self->version;
56             my $agent = $self->user_agent;
57             my $url = $self->url;
58              
59             $agent->transactor->name($identifier);
60              
61             $url->path("/api/v$version");
62              
63             return $self;
64              
65             };
66              
67             # METHODS
68              
69 0     0 0   method PREPARE ($ua, $tx, %args) {
  0            
  0            
70              
71 0           my $headers = $tx->req->headers;
72 0           my $url = $tx->req->url;
73              
74             # default headers
75 0           $headers->header('X-Client-ID' => $self->client_id);
76 0           $headers->header('X-Access-Token' => $self->access_token);
77 0           $headers->header('Content-Type' => 'application/json');
78              
79             }
80              
81 0     0 0   method resource (@segments) {
  0            
  0            
82              
83             # build new resource instance
84 0           my $instance = __PACKAGE__->new(
85             debug => $self->debug,
86             fatal => $self->fatal,
87             retries => $self->retries,
88             timeout => $self->timeout,
89             user_agent => $self->user_agent,
90             identifier => $self->identifier,
91             client_id => $self->client_id,
92             access_token => $self->access_token,
93             version => $self->version,
94             );
95              
96             # resource locator
97 0           my $url = $instance->url;
98              
99             # modify resource locator if possible
100 0           $url->path(join '/', $self->url->path, @segments);
101              
102             # return resource instance
103 0           return $instance;
104              
105             }
106              
107             1;
108              
109             __END__