File Coverage

blib/lib/API/Github.pm
Criterion Covered Total %
statement 18 32 56.2
branch n/a
condition n/a
subroutine 6 8 75.0
pod 0 2 0.0
total 24 42 57.1


line stmt bran cond sub pod time code
1             # ABSTRACT: Github.com API Client
2             package API::Github;
3              
4 1     1   1477 use namespace::autoclean -except => 'has';
  1         19292  
  1         6  
5              
6 1     1   749 use Data::Object::Class;
  1         14626  
  1         9  
7 1     1   2335 use Data::Object::Class::Syntax;
  1         6312  
  1         3  
8 1     1   883 use Data::Object::Signatures;
  1         241378  
  1         10  
9              
10 1     1   8658 use Data::Object qw(load);
  1         2  
  1         94  
11 1     1   6 use Data::Object::Library qw(Str);
  1         2  
  1         5  
12              
13             extends 'API::Client';
14              
15             our $VERSION = '0.05'; # VERSION
16              
17             our $DEFAULT_URL = "https://api.github.com";
18              
19             # ATTRIBUTES
20              
21             has username => rw;
22             has token => rw;
23              
24             # CONSTRAINTS
25              
26             req username => Str;
27             req token => Str;
28              
29             # DEFAULTS
30              
31             def identifier => 'API::Github (Perl)';
32             def url => method { load('Mojo::URL')->new($DEFAULT_URL) };
33             def version => 1;
34              
35             # CONSTRUCTION
36              
37             after BUILD => method {
38             my $identifier = $self->identifier;
39             my $username = $self->username;
40             my $token = $self->token;
41             my $version = $self->version;
42              
43             my $userinfo = "$username:$token";
44             my $agent = $self->user_agent;
45             my $url = $self->url;
46              
47             $agent->transactor->name($identifier);
48             $url->userinfo($userinfo);
49              
50             return $self;
51             };
52              
53 0     0 0   method PREPARE ($ua, $tx, %args) {
  0            
  0            
54 0           my $headers = $tx->req->headers;
55 0           my $url = $tx->req->url;
56              
57             # default headers
58 0           $headers->header('Content-Type' => 'application/json');
59              
60 0           return $self;
61             }
62              
63 0     0 0   method resource (@segments) {
  0            
  0            
64             # build new resource instance
65 0           my $instance = __PACKAGE__->new(
66             debug => $self->debug,
67             fatal => $self->fatal,
68             retries => $self->retries,
69             timeout => $self->timeout,
70             user_agent => $self->user_agent,
71             identifier => $self->identifier,
72             username => $self->username,
73             token => $self->token,
74             version => $self->version,
75             );
76              
77             # resource locator
78 0           my $url = $instance->url;
79              
80             # modify resource locator if possible
81 0           $url->path(join '/', $self->url->path, @segments);
82              
83             # return resource instance
84 0           return $instance;
85             }
86              
87             1;
88              
89             __END__