File Coverage

blib/lib/Docker/Registry/RequestBuilder.pm
Criterion Covered Total %
statement 23 25 92.0
branch 8 10 80.0
condition 6 9 66.6
subroutine 5 5 100.0
pod 0 1 0.0
total 42 50 84.0


line stmt bran cond sub pod time code
1             package Docker::Registry::RequestBuilder;
2 5     5   40 use Moo;
  5         12  
  5         170  
3              
4 5     5   2010 use Docker::Registry::Request;
  5         13  
  5         170  
5 5     5   32 use Docker::Registry::Types qw(DockerRegistryURI);
  5         12  
  5         77  
6              
7             has url => (is => 'ro', coerce => 1, isa => DockerRegistryURI, required => 1);
8             has api_base => (is => 'ro', default => 'v2');
9              
10             sub build_request {
11 15     15 0 37891 my ($self, $call) = @_;
12 15         49 my $request;
13              
14 15         48 my $url_params = $self->_build_url_params($call);
15              
16 15 100       361 if (ref($call) eq 'Docker::Registry::Call::Repositories') {
    50          
17 7         226 $request = Docker::Registry::Request->new(
18             method => 'GET',
19             url => (join '/', $self->url, $self->api_base, "_catalog$url_params"),
20             );
21              
22             } elsif (ref($call) eq 'Docker::Registry::Call::RepositoryTags') {
23 8         83 $request = Docker::Registry::Request->new(
24             method => 'GET',
25             url => (join '/', $self->url, $self->api_base, $call->repository, "tags/list$url_params"),
26             );
27             } else {
28 0         0 Docker::Exception->throw(
29             message => sprintf("Unknown call class: %s", ref($call)),
30             );
31             }
32              
33 15         1391 return $request;
34             }
35              
36             sub _build_url_params {
37 15     15   35 my ($self, $call) = @_;
38 15         71 my $url_params = URI->new();
39              
40 15 100 100     907 if ($call->n or $call->last) {
41 2 100 66     23 if ($call->n and !$call->last) {
    50 33        
42 1         8 $url_params->query_form(n => $call->n);
43             } elsif (!$call->n and $call->last) {
44 1         6 $url_params->query_form(last => $call->last);
45             } else {
46 0         0 $url_params->query_form(last => $call->last, n => $call->n);
47             }
48             }
49              
50 15         232 return $url_params->as_string;
51             }
52              
53              
54             1;