File Coverage

blib/lib/Wikibase/Datatype/MediainfoStatement.pm
Criterion Covered Total %
statement 30 30 100.0
branch 2 2 100.0
condition 3 3 100.0
subroutine 9 9 100.0
pod 0 1 0.0
total 44 45 97.7


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