File Coverage

blib/lib/Net/Twitter/WrappedResult.pm
Criterion Covered Total %
statement 9 9 100.0
branch n/a
condition n/a
subroutine 5 5 100.0
pod 3 3 100.0
total 17 17 100.0


line stmt bran cond sub pod time code
1             package Net::Twitter::WrappedResult;
2             $Net::Twitter::WrappedResult::VERSION = '4.01043';
3 1     1   6 use Moose;
  1         1  
  1         6  
4              
5             # decoded JSON Twitter API response
6             has result => (
7                 is => 'ro',
8                 required => 1,
9             );
10              
11             has http_response => (
12                 is => 'ro',
13                 isa => 'HTTP::Response',
14                 required => 1,
15             );
16              
17             # private method
18             my $limit = sub {
19                 my ( $self, $which ) = @_;
20              
21                 my $res = $self->http_response;
22              
23             # I'd like to use //, but...old perls. Sigh.
24                 my $value = $res->header("X-Rate-Limit-$which");
25                 return defined $value ? $value
26             # TODO: is FeatureRateLimit still a thing?
27                     : $res->header("X-FeatureRateLimit-$which");
28             };
29              
30 1     1 1 678 sub rate_limit { shift->$limit('Limit') }
31 1     1 1 4 sub rate_limit_remaining { shift->$limit('Remaining') }
32 1     1 1 4 sub rate_limit_reset { shift->$limit('Reset') }
33              
34 1     1   5266 no Moose;
  1         1  
  1         5  
35              
36             1;
37              
38             __END__
39            
40             =head1 NAME
41            
42             Net::Twitter::WrappedResult - Wrap an HTTP response and Twitter result
43            
44             =head1 VERSION
45            
46             version 4.01043
47            
48             =head1 SYNOPSIS
49            
50             use Net::Twitter;
51            
52             my $nt = Net::Twitter->new(
53             traits => [ qw/API::RESTv1_1 WrapResult/ ],
54             %other_new_options,
55             );
56            
57             my $r = $nt->verify_credentials;
58            
59             my $http_response = $r->http_response;
60             my $twitter_result = $r->result;
61             my $rate_limit_remaining = $r->rate_limit_remaining;
62            
63             =head1 DESCRIPTION
64            
65             Often, the result of a Twitter API call, inflated from the JSON body of the
66             HTTP response does not contain all the information you need. Twitter includes
67             meta data, such as rate limiting information, in HTTP response headers. This
68             object wraps both the inflated Twitter result and the HTTP response giving the
69             caller full access to all the meta data. It also provides accessors for the
70             rate limit information.
71            
72             =head1 METHODS
73            
74             =over 4
75            
76             =item new(result => $twitter_result, http_response => $http_response)
77            
78             Constructs an object wrapping the Twitter result and HTTP response.
79            
80             =item result
81            
82             Returns the Twitter API result, i.e., the decode JSON response body.
83            
84             =item http_response
85            
86             Returns the L<HTTP::Response> object for the API call.
87            
88             =item rate_limit
89            
90             Returns the rate limit, per 15 minute window, for the API endpoint called.
91             Returns undef if no suitable rate limit header is available.
92            
93             =item rate_limit_remaining
94            
95             Returns the calls remaining in the current 15 minute window for the API
96             endpoint called. Returns undef if no suitable header is available.
97            
98             =item rate_limit_reset
99            
100             Returns the Unix epoch time time of the next 15 minute window, i.e., when the
101             rate limit will be reset, for the API endpoint called. Returns undef if no
102             suitable header is available.
103            
104             =back
105            
106             =head1 AUTHOR
107            
108             Marc Mims <marc@questright.com>
109            
110             =head1 COPYRIGHT & LICENSE
111            
112             Copyright (c) 2016 Marc Mims
113            
114             This program is free software; you can redistribute it and/or modify it under
115             the same terms as perl itself.
116