File Coverage

blib/lib/WebService/Braintree/ResourceCollection.pm
Criterion Covered Total %
statement 3 33 9.0
branch 0 8 0.0
condition n/a
subroutine 1 8 12.5
pod 0 7 0.0
total 4 56 7.1


line stmt bran cond sub pod time code
1             package WebService::Braintree::ResourceCollection;
2             $WebService::Braintree::ResourceCollection::VERSION = '0.93';
3 1     1   9 use Moose;
  1         3  
  1         7  
4             extends "WebService::Braintree::ResultObject";
5              
6             has 'response' => (is => 'rw');
7             has 'ids' => (is => 'rw');
8             has 'page_size' => (is => 'rw');
9             has 'callback' => (is => 'rw');
10              
11             sub init {
12 0     0 0   my ($self, $response, $callback) = @_;
13 0           $self->response($response);
14 0           $self->ids($response->{search_results}->{ids});
15 0           $self->page_size($response->{search_results}->{page_size});
16 0           $self->callback($callback);
17 0           return $self;
18             }
19              
20             sub is_success {
21 0     0 0   my $self = shift;
22 0 0         return 1 unless $self->response->{'api_error_response'};
23 0           return 0;
24             }
25              
26             sub first {
27 0     0 0   my $self = shift;
28 0 0         return undef if $self->is_empty;
29 0           my $first_id = $self->ids->[0];
30 0           return $self->callback->([$first_id])->[0];
31             }
32              
33             sub is_empty {
34 0     0 0   my $self = shift;
35 0           $self->maximum_size == 0;
36             }
37              
38             sub maximum_size {
39 0     0 0   my $self = shift;
40 0           return (scalar @{$self->ids});
  0            
41             }
42              
43             sub each {
44 0     0 0   my ($self, $block) = @_;
45 0           my @page = ();
46              
47 0           for (my $count = 0; $count < $self->maximum_size; $count++) {
48 0           push(@page, $self->ids->[$count]);
49 0 0         if ((scalar @page) == $self->page_size) {
50 0           $self->execute_block_for_page($block, @page);
51 0           @page = ();
52             }
53             }
54              
55 0 0         $self->execute_block_for_page($block, @page) if(scalar(@page) > 0);
56             }
57              
58             sub execute_block_for_page {
59 0     0 0   my ($self, $block, @page) = @_;
60 0           my $resources = $self->callback->([@page]);
61 0           for my $resource (@$resources) {
62 0           $block->($resource);
63             }
64             }
65              
66             __PACKAGE__->meta->make_immutable;
67             1;
68