File Coverage

blib/lib/WebService/Akeneo/Paginator.pm
Criterion Covered Total %
statement 8 26 30.7
branch 0 4 0.0
condition 0 15 0.0
subroutine 3 4 75.0
pod 0 1 0.0
total 11 50 22.0


line stmt bran cond sub pod time code
1             package WebService::Akeneo::Paginator;
2             $WebService::Akeneo::Paginator::VERSION = '0.001';
3 3     3   45 use v5.38;
  3         12  
4              
5 3     3   18 use Object::Pad;
  3         6  
  3         24  
6 3     3   469 use Mojo::URL;
  3         8  
  3         19  
7              
8             class WebService::Akeneo::Paginator 0.001;
9              
10             field $transport :param; # WebService::Akeneo::Transport
11              
12 0     0 0   method collect ($path, %params) {
  0            
  0            
  0            
  0            
13 0   0       my $limit = delete($params{limit}) // 100;
14 0   0       my $page = delete($params{page}) // 1;
15 0           my $query = { %params, limit=>$limit, page=>$page };
16              
17 0           my $acc = [];
18 0           while (1) {
19 0           my $page_res = $transport->request('GET', $path, query => $query);
20 0   0       my $items = ($page_res->{items}//($page_res->{_embedded} && $page_res->{_embedded}{items})) // [];
      0        
      0        
21 0 0         push @$acc, @$items if @$items;
22              
23 0   0       my $next = ($page_res->{_links}//{})->{next} && $page_res->{_links}{next}{href};
24 0 0         last unless $next;
25 0           my $url = Mojo::URL->new($next); $query = $url->query->to_hash;
  0            
26             }
27 0           return $acc;
28             }
29              
30             1;