File Coverage

blib/lib/Wikibase/Datatype/MediainfoStatement.pm
Criterion Covered Total %
statement 33 33 100.0
branch 2 2 100.0
condition 3 3 100.0
subroutine 10 10 100.0
pod 0 1 0.0
total 48 49 97.9


line stmt bran cond sub pod time code
1             package Wikibase::Datatype::MediainfoStatement;
2              
3 13     13   423603 use strict;
  13         56  
  13         588  
4 13     13   76 use warnings;
  13         33  
  13         4981  
5              
6 13     13   3080 use Error::Pure qw(err);
  13         95978  
  13         754  
7 13     13   570 use List::Util 1.33 qw(none);
  13         408  
  13         5179  
8 13     13   2924 use Mo qw(build default is);
  13         3823  
  13         125  
9 13     13   31169 use Mo::utils qw(check_isa check_required);
  13         21220  
  13         795  
10 13     13   7187 use Mo::utils::Array qw(check_array_object);
  13         37428  
  13         434  
11 13     13   1050 use Readonly;
  13         45  
  13         5287  
12              
13             Readonly::Array our @RANKS => qw(normal preferred deprecated);
14              
15             our $VERSION = 0.39;
16              
17             has id => (
18             is => 'ro',
19             );
20              
21             has property_snaks => (
22             default => [],
23             is => 'ro',
24             );
25              
26             has rank => (
27             is => 'ro',
28             default => 'normal',
29             );
30              
31             has references => (
32             default => [],
33             is => 'ro',
34             );
35              
36             has snak => (
37             is => 'ro',
38             );
39              
40             sub BUILD {
41 14     14 0 5528 my $self = shift;
42              
43             # Check requirements.
44 14         60 check_required($self, 'snak');
45              
46             # Check rank.
47 13 100 100 5   266 if (defined $self->{'rank'} && none { $_ eq $self->{'rank'} } @RANKS) {
  5         52  
48 1         12 err "Parameter 'rank' has bad value. Possible values are ".(
49             join ', ', @RANKS).'.';
50             }
51              
52             # Check snak.
53 12         63 check_isa($self, 'snak', 'Wikibase::Datatype::MediainfoSnak');
54              
55             # Check property snaks.
56 11         318 check_array_object($self, 'property_snaks', 'Wikibase::Datatype::MediainfoSnak');
57              
58             # Check references.
59 9         90 check_array_object($self, 'references', 'Wikibase::Datatype::Reference');
60              
61 9         63 return;
62             }
63              
64             1;
65              
66             __END__
67              
68             =pod
69              
70             =encoding utf8
71              
72             =head1 NAME
73              
74             Wikibase::Datatype::MediainfoStatement - Wikibase mediainfo statement datatype.
75              
76             =head1 SYNOPSIS
77              
78             use Wikibase::Datatype::MediainfoStatement;
79              
80             my $obj = Wikibase::Datatype::MediainfoStatement->new(%params);
81             my $id = $obj->id;
82             my $property_snaks_ar = $obj->property_snaks;
83             my $rank = $obj->rank;
84             my $referenes_ar = $obj->references;
85             my $snak = $obj->snak;
86              
87             =head1 DESCRIPTION
88              
89             This datatype is statement class for representing mediainfo statement.
90              
91             =head1 METHODS
92              
93             =head2 C<new>
94              
95             my $obj = Wikibase::Datatype::MediainfoStatement->new(%params);
96              
97             Constructor.
98              
99             Returns instance of object.
100              
101             =over 8
102              
103             =item * C<id>
104              
105             Id of statement.
106             Parameter is optional.
107              
108             =item * C<property_snaks>
109              
110             Property snaks.
111             Parameter is reference to hash with Wikibase::Datatype::MediainfoSnak instances.
112             Parameter is optional.
113             Default value is [].
114              
115             =item * C<rank>
116              
117             Rank value.
118             Parameter is string with these possible values: normal, preferred and deprecated
119             Default value is 'normal'.
120              
121             =item * C<references>
122              
123             List of references.
124             Parameter is reference to hash with Wikibase::Datatype::Reference instances.
125             Parameter is optional.
126             Default value is [].
127              
128             =item * C<snak>
129              
130             Main snak.
131             Parameter is Wikibase::Datatype::MediainfoSnak instance.
132             Parameter is required.
133              
134             =back
135              
136             =head2 C<id>
137              
138             my $id = $obj->id;
139              
140             Get id of statement.
141              
142             Returns string.
143              
144             =head2 C<property_snaks>
145              
146             my $property_snaks_ar = $obj->property_snaks;
147              
148             Get property mediainfo snaks.
149              
150             Returns reference to array with Wikibase::Datatype::MediainfoSnak instances.
151              
152             =head2 C<rank>
153              
154             my $rank = $obj->rank;
155              
156             Get rank value.
157              
158             =head2 C<references>
159              
160             my $referenes_ar = $obj->references;
161              
162             Get references.
163              
164             Returns reference to array with Wikibase::Datatype::Reference instance.
165              
166             =head2 C<snak>
167              
168             my $snak = $obj->snak;
169              
170             Get main mediainfo snak.
171              
172             Returns Wikibase::Datatype::MediainfoSnak instance.
173              
174             =head1 ERRORS
175              
176             new():
177             From Mo::utils::check_isa():
178             Parameter 'snak' must be a 'Wikibase::Datatype::MediainfoSnak' object.
179              
180             From Mo::utils::check_required():
181             Parameter 'snak' is required.
182              
183             From Mo::utils::Array::check_array_object():
184             Parameter 'property_snaks' must be a array.
185             Parameter 'property_snaks' with array must contain 'Wikibase::Datatype::MediainfoSnak' objects.
186             Parameter 'references' must be a array.
187             Parameter 'references' with array must contain 'Wikibase::Datatype::Reference' objects.
188              
189             Parameter 'rank' has bad value. Possible values are normal, preferred, deprecated.
190              
191             =head1 EXAMPLE
192              
193             =for comment filename=create_and_print_mediainfostatement.pl
194              
195             use strict;
196             use warnings;
197              
198             use Wikibase::Datatype::MediainfoSnak;
199             use Wikibase::Datatype::MediainfoStatement;
200             use Wikibase::Datatype::Value::Item;
201             use Wikibase::Datatype::Value::String;
202              
203             # Object.
204             my $obj = Wikibase::Datatype::MediainfoStatement->new(
205             'id' => 'M123$00C04D2A-49AF-40C2-9930-C551916887E8',
206              
207             # creator (P170)
208             'snak' => Wikibase::Datatype::MediainfoSnak->new(
209             'property' => 'P170',
210             'snaktype' => 'novalue',
211             ),
212             'property_snaks' => [
213             # Wikimedia username (P4174): Lviatour
214             Wikibase::Datatype::MediainfoSnak->new(
215             'datavalue' => Wikibase::Datatype::Value::String->new(
216             'value' => 'Lviatour',
217             ),
218             'property' => 'P4174',
219             ),
220              
221             # URL (P2699): https://commons.wikimedia.org/wiki/user:Lviatour
222             Wikibase::Datatype::MediainfoSnak->new(
223             'datavalue' => Wikibase::Datatype::Value::String->new(
224             'value' => 'https://commons.wikimedia.org/wiki/user:Lviatour',
225             ),
226             'property' => 'P2699',
227             ),
228              
229             # author name string (P2093): Lviatour
230             Wikibase::Datatype::MediainfoSnak->new(
231             'datavalue' => Wikibase::Datatype::Value::String->new(
232             'value' => 'Lviatour',
233             ),
234             'property' => 'P2093',
235             ),
236              
237             # object has role (P3831): photographer (Q33231)
238             Wikibase::Datatype::MediainfoSnak->new(
239             'datavalue' => Wikibase::Datatype::Value::Item->new(
240             'value' => 'Q33231',
241             ),
242             'property' => 'P3831',
243             ),
244             ],
245             );
246              
247             # Print out.
248             print 'Id: '.$obj->id."\n";
249             print 'Statement: '.$obj->snak->property.' -> ';
250             if ($obj->snak->snaktype eq 'value') {
251             print $obj->snak->datavalue->value."\n";
252             } elsif ($obj->snak->snaktype eq 'novalue') {
253             print "-\n";
254             } elsif ($obj->snak->snaktype eq 'somevalue') {
255             print "?\n";
256             }
257             print "Qualifiers:\n";
258             foreach my $property_snak (@{$obj->property_snaks}) {
259             print "\t".$property_snak->property.' -> '.
260             $property_snak->datavalue->value."\n";
261             }
262             print 'Rank: '.$obj->rank."\n";
263              
264             # Output:
265             # Id: M123$00C04D2A-49AF-40C2-9930-C551916887E8
266             # Statement: P170 -> -
267             # Qualifiers:
268             # P4174 -> Lviatour
269             # P2699 -> https://commons.wikimedia.org/wiki/user:Lviatour
270             # P2093 -> Lviatour
271             # P3831 -> Q33231
272             # Rank: normal
273              
274             =head1 DEPENDENCIES
275              
276             L<Error::Pure>,
277             L<List::Util>,
278             L<Mo>,
279             L<Mo::utils>.
280             L<Mo::utils::Array>.
281             L<Readonly>.
282              
283             =head1 SEE ALSO
284              
285             =over
286              
287             =item L<Wikibase::Datatype>
288              
289             Wikibase datatypes.
290              
291             =item L<Wikibase::Datatype::Statement>
292              
293             Wikibase statement datatype.
294              
295             =back
296              
297             =head1 REPOSITORY
298              
299             L<https://github.com/michal-josef-spacek/Wikibase-Datatype>
300              
301             =head1 AUTHOR
302              
303             Michal Josef Špaček L<mailto:skim@cpan.org>
304              
305             L<http://skim.cz>
306              
307             =head1 LICENSE AND COPYRIGHT
308              
309             © 2020-2025 Michal Josef Špaček
310              
311             BSD 2-Clause License
312              
313             =head1 VERSION
314              
315             0.39
316              
317             =cut