Skip to content

Commit 4bdadbf

Browse files
Add @Wikibase::Datatype::Utils::LANGUAGE_CODES variable to define user language codes list
1 parent e10e31b commit 4bdadbf

File tree

4 files changed

+85
-4
lines changed

4 files changed

+85
-4
lines changed

Changes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
- Add 'ak' language code used in Q111803082.
44
- Add $Wikibase::Datatype::Utils::SKIP_CHECK_LANG variable to skip check of
55
Wikibase languages which are supported.
6+
- Add @Wikibase::Datatype::Utils::LANGUAGE_CODES variable to define user
7+
language codes list.
68
- Remove obsolete error message in doc for check_language() helper.
79

810
0.36 2025-01-01T22:02:29+01:00

lib/Wikibase/Datatype/Utils.pm

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Readonly::Array our @EXPORT_OK => qw(check_datetime check_entity check_language
1414
check_lexeme check_property check_sense);
1515

1616
our $SKIP_CHECK_LANG => 0;
17+
our @LANGUAGE_CODES => ();
1718

1819
our $VERSION = 0.37;
1920

@@ -79,8 +80,19 @@ sub check_entity {
7980
sub check_language {
8081
my ($self, $key) = @_;
8182

82-
if (! $SKIP_CHECK_LANG && none { $_ eq $self->{$key} } all_language_codes()) {
83-
err "Language code '".$self->{$key}."' isn't code supported by Wikibase.";
83+
if (! $SKIP_CHECK_LANG) {
84+
my @language_codes;
85+
my $error_message;
86+
if (@LANGUAGE_CODES) {
87+
@language_codes = @LANGUAGE_CODES;
88+
$error_message = "Language code '".$self->{$key}."' isn't user defined language code.";
89+
} else {
90+
@language_codes = all_language_codes();
91+
$error_message = "Language code '".$self->{$key}."' isn't code supported by Wikibase.";
92+
}
93+
if (none { $_ eq $self->{$key} } @language_codes) {
94+
err $error_message;
95+
}
8496
}
8597

8698
return;
@@ -165,6 +177,12 @@ Boolean variable to skip check of right language.
165177
166178
Default value is 0, checking is working.
167179
180+
=head2 C<@LANGUAGE_CODES>
181+
182+
List of supported language codes defined by user.
183+
184+
Default value is (), checking official language codes.
185+
168186
=head1 SUBROUTINES
169187
170188
=head2 C<check_datetime>

t/Wikibase-Datatype-Utils/05-check_language.t

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use warnings;
33

44
use English;
55
use Error::Pure::Utils qw(clean);
6-
use Test::More 'tests' => 5;
6+
use Test::More 'tests' => 8;
77
use Test::NoWarnings;
88
use Wikibase::Datatype::Utils qw(check_language);
99

@@ -43,3 +43,34 @@ $self = {
4343
$Wikibase::Datatype::Utils::SKIP_CHECK_LANG = 1;
4444
$ret = check_language($self, 'key');
4545
is($ret, undef, 'Not supported language is present without error.');
46+
47+
# Test.
48+
$self = {
49+
'key' => 'xx',
50+
};
51+
$Wikibase::Datatype::Utils::SKIP_CHECK_LANG = 0;
52+
@Wikibase::Datatype::Utils::LANGUAGE_CODES = ('xx');
53+
$ret = check_language($self, 'key');
54+
is($ret, undef, 'Language is supported by user list.');
55+
56+
# Test.
57+
$self = {
58+
'key' => 'yy',
59+
};
60+
$Wikibase::Datatype::Utils::SKIP_CHECK_LANG = 0;
61+
@Wikibase::Datatype::Utils::LANGUAGE_CODES = ('xx');
62+
eval {
63+
check_language($self, 'key');
64+
};
65+
is($EVAL_ERROR, "Language code 'yy' isn't user defined language code.\n",
66+
"Language code 'yy' isn't user defined language code.");
67+
clean();
68+
69+
# Test.
70+
$self = {
71+
'key' => 'yy',
72+
};
73+
$Wikibase::Datatype::Utils::SKIP_CHECK_LANG = 1;
74+
@Wikibase::Datatype::Utils::LANGUAGE_CODES = ('xx');
75+
$ret = check_language($self, 'key');
76+
is($ret, undef, 'Not supported language is present without error.');

t/Wikibase-Datatype-Value-Monolingual/03-new.t

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use warnings;
33

44
use English;
55
use Error::Pure::Utils qw(clean);
6-
use Test::More 'tests' => 7;
6+
use Test::More 'tests' => 10;
77
use Test::NoWarnings;
88
use Unicode::UTF8 qw(decode_utf8);
99
use Wikibase::Datatype::Value::Monolingual;
@@ -56,3 +56,33 @@ $obj = Wikibase::Datatype::Value::Monolingual->new(
5656
'value' => 'foo',
5757
);
5858
isa_ok($obj, 'Wikibase::Datatype::Value::Monolingual');
59+
60+
# Test.
61+
$Wikibase::Datatype::Utils::SKIP_CHECK_LANG = 0;
62+
@Wikibase::Datatype::Utils::LANGUAGE_CODES = ('ger');
63+
$obj = Wikibase::Datatype::Value::Monolingual->new(
64+
'language' => 'ger',
65+
'value' => 'foo',
66+
);
67+
isa_ok($obj, 'Wikibase::Datatype::Value::Monolingual');
68+
69+
# Test.
70+
$Wikibase::Datatype::Utils::SKIP_CHECK_LANG = 0;
71+
@Wikibase::Datatype::Utils::LANGUAGE_CODES = ('yy');
72+
eval {
73+
Wikibase::Datatype::Value::Monolingual->new(
74+
'language' => 'ger',
75+
'value' => 'foo',
76+
);
77+
};
78+
is($EVAL_ERROR, "Language code 'ger' isn't user defined language code.\n",
79+
"Language code 'ger' isn't user defined language code.");
80+
81+
# Test.
82+
$Wikibase::Datatype::Utils::SKIP_CHECK_LANG = 1;
83+
@Wikibase::Datatype::Utils::LANGUAGE_CODES = ('yy');
84+
$obj = Wikibase::Datatype::Value::Monolingual->new(
85+
'language' => 'ger',
86+
'value' => 'foo',
87+
);
88+
isa_ok($obj, 'Wikibase::Datatype::Value::Monolingual');

0 commit comments

Comments
 (0)