File Coverage

blib/lib/Wikibase/API/Resolve.pm
Criterion Covered Total %
statement 27 52 51.9
branch 0 4 0.0
condition n/a
subroutine 9 12 75.0
pod 0 2 0.0
total 36 70 51.4


line stmt bran cond sub pod time code
1             package Wikibase::API::Resolve;
2              
3 2     2   237289 use strict;
  2         17  
  2         62  
4 2     2   11 use warnings;
  2         4  
  2         61  
5              
6 2     2   938 use Class::Utils qw(set_params);
  2         26271  
  2         45  
7 2     2   1265 use File::Spec::Functions qw(catfile);
  2         1762  
  2         128  
8 2     2   945 use IO::Barf qw(barf);
  2         1579  
  2         36  
9 2     2   1471 use JSON::XS qw(decode_json encode_json);
  2         10832  
  2         134  
10 2     2   975 use Perl6::Slurp qw(slurp);
  2         3166  
  2         12  
11 2     2   79 use Readonly;
  2         6  
  2         95  
12 2     2   971 use Wikibase::API;
  2         9  
  2         779  
13              
14             Readonly::Array our @EXPORT_OK => qw(resolve);
15              
16             our $VERSION = 0.04;
17              
18             sub new {
19 0     0 0   my ($class, @params) = @_;
20              
21             # Create object.
22 0           my $self = bless {}, $class;
23              
24             # Login name.
25 0           $self->{'login_name'} = undef;
26              
27             # Login password.
28 0           $self->{'login_password'} = undef;
29              
30             # MediaWiki::API object.
31 0           $self->{'mediawiki_api'} = MediaWiki::API->new;
32              
33             # MediaWiki site.
34 0           $self->{'mediawiki_site'} = 'www.wikidata.org';
35              
36             # Resolve directory.
37 0           $self->{'resolve_dir'} = '/var/lib/wb_resolve';
38              
39             # Process parameters.
40 0           set_params($self, @params);
41              
42 0           return $self;
43             }
44              
45             sub resolve {
46 0     0 0   my ($self, $qid) = @_;
47              
48 0           my $qid_label;
49 0           my $qid_file = catfile($self->{'resolve_dir'}, uc($qid));
50              
51 0           my $struct_hr;
52 0 0         if (-r $qid_file) {
53 0           $struct_hr = decode_json(slurp($qid_file));
54             } else {
55 0           $self->_lazy_api;
56 0           $struct_hr = $self->{'api'}->get_item_raw($qid);
57 0           barf($qid_file, encode_json($struct_hr));
58             }
59              
60 0           my $item_obj = Wikibase::Datatype::Struct::Item::struct2obj($struct_hr);
61              
62 0           return $item_obj;
63             }
64              
65             sub _lazy_api {
66 0     0     my $self = shift;
67              
68 0 0         if (defined $self->{'api'}) {
69 0           return;
70             }
71              
72             $self->{'api'} = Wikibase::API->new(
73             'mediawiki_api' => $self->{'mediawiki_api'},
74             'mediawiki_site' => $self->{'mediawiki_site'},
75             'login_name' => $self->{'login_name'},
76 0           'login_password' => $self->{'login_password'},
77             );
78              
79 0           return;
80             }
81              
82             1;
83              
84             __END__