File Coverage

blib/lib/Acme/Free/API/ChuckNorris.pm
Criterion Covered Total %
statement 33 40 82.5
branch 2 4 50.0
condition n/a
subroutine 9 10 90.0
pod 4 4 100.0
total 48 58 82.7


line stmt bran cond sub pod time code
1             package Acme::Free::API::ChuckNorris;
2              
3 1     1   410421 use v5.10;
  1         4  
4 1     1   6 use strict;
  1         2  
  1         79  
5              
6             our $VERSION = '1.0.1';
7              
8 1     1   1047 use HTTP::Tiny;
  1         71044  
  1         100  
9 1     1   1063 use JSON qw/decode_json/;
  1         16736  
  1         17  
10 1     1   994 use Util::H2O::More qw/baptise d2o h2o/;
  1         14005  
  1         174  
11              
12             use constant {
13 1         550 BASEURL => "https://api.chucknorris.io/jokes",
14 1     1   13 };
  1         2  
15              
16             sub new {
17 1     1 1 1543 my $pkg = shift;
18 1         11 my $self = baptise { ua => HTTP::Tiny->new }, $pkg;
19 1         336 return $self;
20             }
21              
22             sub categories {
23 1     1 1 9 my $self = shift;
24 1         5 my $URL = sprintf "%s/%s", BASEURL, "categories";
25 1         4 my $resp = h2o $self->ua->get($URL);
26 1         566037 my $ret = d2o decode_json $resp->content;
27 1         339 return scalar $ret;
28             }
29              
30             sub random {
31 16     16 1 24642 my $self = shift;
32 16         146 my $args = d2o {@_};
33 16 50       2285 my $query = ( $args->category ) ? sprintf( "?category=%s", $args->category ) : "";
34 16         268 my $URL = sprintf "%s/%s%s", BASEURL, "random", $query;
35 16         83 my $resp = d2o $self->ua->get($URL);
36 16 50       477719 die sprintf( "fatal cnq: API did not a useful response (status: %d)\n", $resp->status ) if ( $resp->status != 200 );
37 16         217 my $ret = d2o decode_json $resp->content;
38 16         7658 return $ret->value;
39             }
40              
41             sub search {
42 0     0 1   my $self = shift;
43 0           my $args = h2o {@_};
44 0           my $terms = $args->terms;
45 0           my $URL = sprintf "%s/%s?query=%s", BASEURL, "search", $terms;
46 0           my $resp = d2o $self->ua->get($URL);
47 0           my $ret = d2o decode_json $resp->content;
48 0           return scalar $ret;
49             }
50              
51             1;
52              
53             __END__