File Coverage

lib/WebService/Shippo/Fetch.pm
Criterion Covered Total %
statement 17 55 30.9
branch 0 20 0.0
condition 0 3 0.0
subroutine 6 12 50.0
pod 0 4 0.0
total 23 94 24.4


line stmt bran cond sub pod time code
1 7     7   46 use strict;
  7         14  
  7         276  
2 7     7   40 use warnings;
  7         13  
  7         193  
3 7     7   36 use MRO::Compat 'c3';
  7         15  
  7         329  
4              
5             package WebService::Shippo::Fetch;
6             require WebService::Shippo::Request;
7 7     7   36 use Params::Callbacks ( 'callbacks' );
  7         13  
  7         3618  
8              
9             sub fetch
10             {
11 0     0 0   my ( $callbacks, $invocant, $id, @params ) = &callbacks;
12 0           my $class = $invocant->item_class;
13 0           my $response = Shippo::Request->get( $class->url( $id ), @params );
14 0           return $class->construct_from( $response, $callbacks );
15             }
16              
17             sub all
18             {
19 0     0 0   my ( $callbacks, $invocant, @params ) = &callbacks;
20 0 0         @params = ( {} )
21             unless @params;
22 0 0         my $params = ref( $params[0] ) ? $params[0] : {@params};
23 0           my $class = $invocant->item_class;
24 0           my $response;
25             $params->{results} = 200
26 0 0         unless $params->{results};
27 0           $response = WebService::Shippo::Request->get( $class->url, $params );
28 0           return $class->construct_from( $response, $callbacks );
29             }
30              
31             sub iterator
32             {
33 0     0 0   my ( $callbacks, $invocant, @params ) = &callbacks;
34 0 0         @params = ( {} )
35             unless @params;
36 0 0         my $params = ref( $params[0] ) ? $params[0] : {@params};
37             $params->{results} = 200
38 0 0         unless $params->{results};
39 0           my $collection = $invocant->all( $params );
40 0           my $index = 0;
41             my $iterator = sub {
42 0     0     my @results;
43 0   0       while ( $collection && !@results ) {
44 0 0         if ( $index == @{ $collection->results } ) {
  0            
45 0           $collection = $collection->next_page;
46 0 0         last unless $collection;
47 0           $index = 0;
48             }
49 0           @results = $callbacks->transform( $collection->{results}[ $index++ ] );
50             }
51 0 0         return @results if wantarray;
52 0           return \@results;
53 0           };
54 0           return $iterator;
55             }
56              
57             sub collector
58             {
59 0     0 0   my $iterator = &iterator;
60             my $collector = sub {
61 0     0     my @results;
62 0           while ( my @list = $iterator->() ) {
63 0           push @results, @list;
64             }
65 0 0         return @results if wantarray;
66 0           return \@results;
67 0           };
68 0           return $collector;
69             }
70              
71             BEGIN {
72 7     7   42 no warnings 'once';
  7         15  
  7         388  
73 7     7   27 *retrieve = *fetch;
74 7         145 *Shippo::Fetcher:: = *WebService::Shippo::Fetcher::;
75             }
76              
77             1;