File Coverage

blib/lib/Dallycot/TextResolver.pm
Criterion Covered Total %
statement 19 21 90.4
branch n/a
condition n/a
subroutine 7 7 100.0
pod n/a
total 26 28 92.8


line stmt bran cond sub pod time code
1             package Dallycot::TextResolver;
2             our $AUTHORITY = 'cpan:JSMITH';
3              
4             # ABSTRACT: Resolve URLs into text objects
5              
6 1     1   41358 use strict;
  1         2  
  1         29  
7 1     1   4 use warnings;
  1         2  
  1         19  
8              
9 1     1   523 use utf8;
  1         7  
  1         4  
10 1     1   452 use experimental qw(switch);
  1         2596  
  1         6  
11              
12 1     1   1517 use MooseX::Singleton;
  1         399398  
  1         6  
13              
14 1     1   29586 use namespace::autoclean;
  1         1276  
  1         5  
15              
16 1     1   224 use CHI;
  0            
  0            
17             use Promises qw(deferred);
18             use RDF::Trine::Parser;
19             use Mojo::UserAgent;
20              
21             use Dallycot::TextResolver::Request;
22              
23             has cache => (
24             is => 'ro',
25             default => sub {
26             CHI->new( driver => 'Memory', cache_size => '32M', datastore => {} );
27             }
28             );
29              
30             has ua => (
31             is => 'ro',
32             default => sub {
33             Mojo::UserAgent->new;
34             }
35             );
36              
37             sub get {
38             my ( $self, $url ) = @_;
39              
40             my $deferred = deferred;
41              
42             my $data = $self->cache->get($url);
43             if ( defined($data) ) {
44             $deferred->resolve($data);
45             }
46             else {
47             my $request = Dallycot::TextResolver::Request->new(
48             ua => $self->ua,
49             url => $url,
50             canonical_url => $url,
51             );
52             $request->run->done(
53             sub {
54             ($data) = @_;
55             $self->cache->set( $url, $data );
56             $deferred->resolve($data);
57             },
58             sub {
59             $deferred->reject(@_);
60             }
61             );
62             }
63              
64             return $deferred->promise;
65             }
66              
67             __PACKAGE__->meta->make_immutable;
68              
69             1;