File Coverage

blib/lib/Mo/utils/Language.pm
Criterion Covered Total %
statement 40 40 100.0
branch 6 6 100.0
condition 3 3 100.0
subroutine 12 12 100.0
pod 2 2 100.0
total 63 63 100.0


line stmt bran cond sub pod time code
1             package Mo::utils::Language;
2              
3 4     4   211852 use base qw(Exporter);
  4         11  
  4         589  
4 4     4   30 use strict;
  4         9  
  4         138  
5 4     4   24 use warnings;
  4         21  
  4         255  
6              
7 4     4   2535 use Error::Pure qw(err);
  4         32850  
  4         201  
8 4     4   422 use List::Util 1.33 qw(none);
  4         91  
  4         558  
9 4     4   2441 use Locale::Language;
  4         1235985  
  4         925  
10 4     4   41 use Readonly;
  4         6  
  4         1669  
11              
12             Readonly::Array our @EXPORT_OK => qw(check_language_639_1 check_language_639_2);
13              
14             our $VERSION = 0.09;
15              
16             sub check_language_639_1 {
17 4     4 1 309667 my ($self, $key) = @_;
18              
19 4         11 my $error = "Parameter '%s' doesn't contain valid ISO 639-1 code.";
20              
21 4         19 _check_language($self, $key, 'alpha-2', $error);
22              
23 3         10 return;
24             }
25              
26             sub check_language_639_2 {
27 4     4 1 421001 my ($self, $key) = @_;
28              
29 4         13 my $error = "Parameter '%s' doesn't contain valid ISO 639-2 code.";
30              
31 4         21 _check_language($self, $key, 'alpha-3', $error);
32              
33 3         14 return;
34             }
35              
36             sub _check_key {
37 8     8   21 my ($self, $key) = @_;
38              
39 8 100 100     73 if (! exists $self->{$key} || ! defined $self->{$key}) {
40 4         15 return 1;
41             }
42              
43 4         18 return 0;
44             }
45              
46             sub _check_language {
47 8     8   26 my ($self, $key, $codeset, $error) = @_;
48              
49 8 100       32 _check_key($self, $key) && return;
50              
51 4 100   10135   52 if (none { $_ eq $self->{$key} } all_language_codes($codeset)) {
  10135         38256  
52 2         19 my $err = sprintf($error, $key);
53             err $err,
54             'Codeset', $codeset,
55 2         20 'Value', $self->{$key},
56             ;
57             }
58              
59 2         486 return;
60             }
61              
62             1;
63              
64             __END__
65              
66             =pod
67              
68             =encoding utf8
69              
70             =head1 NAME
71              
72             Mo::utils::Language - Mo language utilities.
73              
74             =head1 SYNOPSIS
75              
76             use Mo::utils::Language qw(check_language_639_1 check_language_639_2);
77              
78             check_language_639_1($self, $key);
79             check_language_639_2($self, $key);
80              
81             =head1 DESCRIPTION
82              
83             Mo language utilities for checking of data objects.
84              
85             =head1 SUBROUTINES
86              
87             =head2 C<check_language_639_1>
88              
89             check_language_639_1($self, $key);
90              
91             I<Since version 0.05.>
92              
93             Check parameter defined by C<$key> if it's ISO 639-1 language code and if language code exists.
94             Value could be undefined.
95              
96             Returns undef.
97              
98             =head2 C<check_language_639_2>
99              
100             check_language_639_2($self, $key);
101              
102             I<Since version 0.05.>
103              
104             Check parameter defined by C<$key> if it's ISO 639-2 language code and if language code exists.
105             Value could be undefined.
106              
107             Returns undef.
108              
109             =head1 ERRORS
110              
111             check_language_639_1():
112             Parameter '%s' doesn't contain valid ISO 639-1 code.
113             Codeset: %s
114             Value: %s
115              
116             check_language_639_2():
117             Parameter '%s' doesn't contain valid ISO 639-2 code.
118             Codeset: %s
119             Value: %s
120              
121             =head1 EXAMPLE1
122              
123             =for comment filename=check_language_639_1_ok.pl
124              
125             use strict;
126             use warnings;
127              
128             use Mo::utils::Language 0.05 qw(check_language_639_1);
129              
130             my $self = {
131             'key' => 'en',
132             };
133             check_language_639_1($self, 'key');
134              
135             # Print out.
136             print "ok\n";
137              
138             # Output:
139             # ok
140              
141             =head1 EXAMPLE2
142              
143             =for comment filename=check_language_639_1_fail.pl
144              
145             use strict;
146             use warnings;
147              
148             use Error::Pure;
149             use Mo::utils::Language 0.05 qw(check_language_639_1);
150              
151             $Error::Pure::TYPE = 'Error';
152              
153             my $self = {
154             'key' => 'xx',
155             };
156             check_language_639_1($self, 'key');
157              
158             # Print out.
159             print "ok\n";
160              
161             # Output like:
162             # #Error [...utils.pm:?] Parameter 'key' doesn't contain valid ISO 639-1 code.
163              
164             =head1 EXAMPLE3
165              
166             =for comment filename=check_language_639_2_ok.pl
167              
168             use strict;
169             use warnings;
170              
171             use Mo::utils::Language 0.05 qw(check_language_639_2);
172              
173             my $self = {
174             'key' => 'eng',
175             };
176             check_language_639_2($self, 'key');
177              
178             # Print out.
179             print "ok\n";
180              
181             # Output:
182             # ok
183              
184             =head1 EXAMPLE4
185              
186             =for comment filename=check_language_639_2_fail.pl
187              
188             use strict;
189             use warnings;
190              
191             use Error::Pure;
192             use Mo::utils::Language 0.05 qw(check_language_639_2);
193              
194             $Error::Pure::TYPE = 'Error';
195              
196             my $self = {
197             'key' => 'xxx',
198             };
199             check_language_639_2($self, 'key');
200              
201             # Print out.
202             print "ok\n";
203              
204             # Output like:
205             # #Error [...utils.pm:?] Parameter 'key' doesn't contain valid ISO 639-2 code.
206              
207             =head1 DEPENDENCIES
208              
209             L<Error::Pure>,
210             L<Exporter>,
211             L<List::Util>,
212             L<Locale::Language>,
213             L<Readonly>.
214              
215             =head1 SEE ALSO
216              
217             =over
218              
219             =item L<Mo>
220              
221             Micro Objects. Mo is less.
222              
223             =item L<Mo::utils>
224              
225             Mo utilities.
226              
227             =item L<Wikibase::Datatype::Utils>
228              
229             Wikibase datatype utilities.
230              
231             =back
232              
233             =head1 REPOSITORY
234              
235             L<https://github.com/michal-josef-spacek/Mo-utils-Language>
236              
237             =head1 AUTHOR
238              
239             Michal Josef Špaček L<mailto:skim@cpan.org>
240              
241             L<http://skim.cz>
242              
243             =head1 LICENSE AND COPYRIGHT
244              
245             © 2022-2025 Michal Josef Špaček
246              
247             BSD 2-Clause License
248              
249             =head1 VERSION
250              
251             0.09
252              
253             =cut