File Coverage

blib/lib/Catmandu/Fix/wd_simple_claims.pm
Criterion Covered Total %
statement 6 37 16.2
branch 0 10 0.0
condition n/a
subroutine 2 4 50.0
pod 0 2 0.0
total 8 53 15.0


line stmt bran cond sub pod time code
1             package Catmandu::Fix::wd_simple_claims;
2             #ABSTRACT: Simplify claims of a Wikidata entity record
3             our $VERSION = '0.06'; #VERSION
4 1     1   1341 use Catmandu::Sane;
  1         3  
  1         9  
5 1     1   228 use Moo;
  1         2  
  1         6  
6              
7             # TODO: also support other snak types
8             # See https://www.mediawiki.org/wiki/Wikibase/DataModel for more
9             sub simplify_snak {
10 0     0 0   my ($snak) = @_;
11 0           delete $snak->{property}; # redundant
12 0 0         if ($snak->{datavalue}) { # innecessary nesting
13 0           for (keys %{$snak->{datavalue}}) {
  0            
14 0           $snak->{$_} = $snak->{datavalue}->{$_};
15             }
16 0 0         if ($snak->{datatype} eq 'wikibase-item') {
17 0           $snak->{value} = $snak->{value}->{'numeric-id'};;
18             }
19 0           delete $snak->{type}; # equals to datatype
20 0           delete $snak->{datavalue};
21             }
22             }
23              
24             sub fix {
25 0     0 0   my ($self, $data) = @_;
26              
27 0 0         my $claims = $data->{claims} or return $data;
28              
29 0           while (my ($property,$cs) = each %$claims) {
30 0           for my $c (@$cs) {
31 0           delete $c->{id}; # internal
32 0           delete $c->{type}; # always "statement"
33 0           simplify_snak($c->{mainsnak});
34 0           for (keys %{$c->{mainsnak}}) { # innecessary nesting
  0            
35 0           $c->{$_} = $c->{mainsnak}->{$_};
36             }
37 0           delete $c->{mainsnak};
38 0 0         if ($c->{references}) {
39 0           for my $r (@{$c->{references}}) {
  0            
40 0           delete $r->{hash}; # internal
41 0 0         next unless $r->{snaks};
42 0           for my $snaks (values %{$r->{snaks}}) {
  0            
43 0           for my $snak (@$snaks) {
44 0           simplify_snak($snak);
45             }
46             }
47             }
48             }
49             }
50             }
51              
52 0           $data;
53             }
54              
55             1;
56              
57             __END__