File Coverage

lib/Acme/Free/Advice/Slip.pm
Criterion Covered Total %
statement 38 38 100.0
branch 5 6 83.3
condition 5 8 62.5
subroutine 9 9 100.0
pod 2 2 100.0
total 59 63 93.6


line stmt bran cond sub pod time code
1             package Acme::Free::Advice::Slip 1.1 { # https://api.adviceslip.com/
2 1     1   197175 use v5.38;
  1         3  
3 1     1   643 use HTTP::Tiny;
  1         45988  
  1         47  
4 1     1   516 use JSON::Tiny qw[decode_json];
  1         16262  
  1         81  
5 1     1   10 use parent 'Exporter';
  1         1  
  1         4  
6             our %EXPORT_TAGS = ( all => [ our @EXPORT_OK = qw[advice search] ] );
7             #
8 1   33 1   111 use overload '""' => sub ( $s, $u, $b ) { $s->{advice} // () };
  1     3   1  
  1         6  
  3         32  
  3         1718  
  3         5  
  3         6  
  3         6  
  3         5  
9             #
10 6     6   12 sub _http ($uri) {
  6         11  
  6         8  
11 6   66     51 state $http
12             //= HTTP::Tiny->new( default_headers => { Accept => 'application/json' }, agent => sprintf '%s/%.2f ', __PACKAGE__, our $VERSION );
13 6         420 my $res = $http->get($uri); # {success} is true even when advice is not found but we'll at least know when we have valid JSON
14 6 50       564746 $res->{success} ? decode_json( $res->{content} ) : ();
15             }
16             #
17 4     4 1 223440 sub advice ( $slip_id //= () ) {
  4         10  
  4         7  
18 4 100       32 my $res = _http( 'https://api.adviceslip.com/advice' . ( $slip_id ? '/' . $slip_id : '' ) );
19 4 100       1380 defined $res->{slip} ? bless $res->{slip}, __PACKAGE__ : ();
20             }
21              
22 2     2 1 4605 sub search ($query) {
  2         5  
  2         4  
23 2         8 my $res = _http( 'https://api.adviceslip.com/advice/search/' . $query );
24 2   100     1544 map { bless $_, __PACKAGE__ } @{ $res->{slips} // [] };
  7         22  
  2         23  
25             }
26             }
27             1;
28             __END__