File Coverage

blib/lib/Locale/TextDomain/OO/Lexicon/Hash.pm
Criterion Covered Total %
statement 49 49 100.0
branch 10 16 62.5
condition n/a
subroutine 10 10 100.0
pod 1 1 100.0
total 70 76 92.1


line stmt bran cond sub pod time code
1             package Locale::TextDomain::OO::Lexicon::Hash; ## no critic (TidyCode)
2            
3 9     9   196843 use strict;
  9         42  
  9         279  
4 9     9   52 use warnings;
  9         20  
  9         277  
5 9     9   51 use Carp qw(confess);
  9         21  
  9         450  
6 9     9   917 use Locale::TextDomain::OO::Singleton::Lexicon;
  9         23  
  9         267  
7 9     9   3747 use Locale::TextDomain::OO::Util::ExtractHeader;
  9         38525  
  9         383  
8 9     9   1000 use Locale::TextDomain::OO::Util::JoinSplitLexiconKeys;
  9         88948  
  9         224  
9 9     9   53 use Moo;
  9         21  
  9         59  
10 9     9   3460 use MooX::StrictConstructor;
  9         30  
  9         102  
11 9     9   8280 use namespace::autoclean;
  9         45  
  9         70  
12            
13             our $VERSION = '1.031';
14            
15             with qw(
16             Locale::TextDomain::OO::Role::Logger
17             );
18            
19             sub lexicon_ref {
20 9     9 1 17617 my ($self, $hash_lexicon) = @_;
21            
22 9 50       49 ref $hash_lexicon eq 'HASH'
23             or confess 'The given lexicon should be a hash reference';
24 9         85 my $instance = Locale::TextDomain::OO::Singleton::Lexicon->instance;
25 9 50       278 $self->logger and $instance->logger( $self->logger );
26 9         661 my $lexicon = $instance->data;
27 9         80 my $key_util = Locale::TextDomain::OO::Util::JoinSplitLexiconKeys->instance;
28 9         48 while ( my ($lexicon_key, $lexicon_value) = each %{$hash_lexicon} ) {
  26         12546  
29 18         41 my $header = $lexicon_value->[0];
30             my $header_msgstr = $header->{msgstr}
31 18 50       61 or confess 'msgstr of header not found';
32 18         103 $lexicon_value->[0] = Locale::TextDomain::OO::Util::ExtractHeader
33             ->instance
34             ->extract_header_msgstr($header_msgstr);
35 18         2268 my $nplurals = $lexicon_value->[0]->{nplurals};
36             VALUE:
37 18         38 for my $value ( @{$lexicon_value} ) {
  18         52  
38             # move to lexicon
39             my $msg_key = $key_util->join_message_key({
40             msgctxt => delete $value->{msgctxt},
41             msgid => my $msgid = delete $value->{msgid},
42             msgid_plural => my $msgid_plural = delete $value->{msgid_plural},
43 60         304 });
44 60         1950 $lexicon->{$lexicon_key}->{$msg_key} = $value;
45             # structure faults
46             exists $value->{msgstr_plural}
47 60 100       188 or next VALUE;
48 13         23 my $plural_count = @{ $value->{msgstr_plural} };
  13         28  
49 13 50       60 $plural_count <= $nplurals or confess sprintf
    50          
    100          
50             'Count of msgstr_plural=%s but nplurals=%s for msgid="%s" msgid_plural="%s"',
51             $plural_count,
52             $nplurals,
53             ( defined $msgid ? $msgid : q{} ),
54             ( defined $msgid_plural ? $msgid_plural : q{} );
55             }
56             $self->logger
57 17 50       375 and $self->logger->(
58             qq{Lexicon "$lexicon_key" loaded from hash.},
59             {
60             object => $self,
61             type => 'debug',
62             event => 'lexicon,load',
63             },
64             );
65             }
66            
67 8         44 return $self;
68             }
69            
70             1;
71            
72             __END__