File Coverage

blib/lib/Data/Localize/YAML.pm
Criterion Covered Total %
statement 55 60 91.6
branch 6 10 60.0
condition 2 5 40.0
subroutine 13 14 92.8
pod 3 4 75.0
total 79 93 84.9


line stmt bran cond sub pod time code
1             package Data::Localize::YAML;
2             $Data::Localize::YAML::VERSION = '0.002';
3 4     4   932659 use v5.10;
  4         17  
4 4     4   24 use strict;
  4         9  
  4         147  
5 4     4   21 use warnings;
  4         8  
  4         215  
6              
7 4     4   1722 use Moo;
  4         25850  
  4         26  
8 4     4   5591 use File::Basename;
  4         27  
  4         396  
9 4     4   1683 use Data::Localize;
  4         132887  
  4         181  
10 4     4   2344 use Data::Localize::Storage::Hash;
  4         58403  
  4         184  
11 4     4   2534 use YAML::PP qw(LoadFile);
  4         338581  
  4         317  
12 4     4   36 use Carp qw(croak);
  4         8  
  4         290  
13              
14             BEGIN {
15 4     4   2925 if (Data::Localize::DEBUG) {
16             require Data::Localize::Log;
17             Data::Localize::Log->import;
18             }
19             }
20              
21             extends 'Data::Localize::Localizer';
22             with 'Data::Localize::Trait::WithStorage';
23              
24             has 'is_array' => (
25             is => 'ro',
26             default => sub { 1 },
27             );
28              
29             has 'array_key_value' => (
30             is => 'ro',
31             default => sub { [qw(id str)] },
32             );
33              
34             has paths => (
35             is => 'ro',
36             );
37              
38             around register => sub {
39             my ($next, $self, $loc) = @_;
40             $self->$next($loc);
41             $loc->add_localizer_map('*', $self);
42             };
43              
44             sub BUILD
45             {
46             my $self = shift;
47             my $paths = $self->paths;
48             foreach my $path (@$paths) {
49             $self->load_from_path($path);
50             }
51             }
52              
53             sub BUILDARGS
54             {
55 3     3 0 469616 my ($class, %args) = @_;
56              
57 3         11 my $path = delete $args{path};
58 3 50       48 if ($path) {
59 3   50     28 $args{paths} ||= [];
60 3         5 push @{$args{paths}}, $path;
  3         11  
61             }
62 3         38 $class->SUPER::BUILDARGS(%args);
63             }
64              
65             sub add_path
66             {
67 0     0 1 0 my $self = shift;
68 0         0 push @{$self->paths}, @_;
  0         0  
69 0         0 $self->load_from_path($_) for @_;
70             }
71              
72             sub load_from_path
73             {
74 3     3 1 28 my ($self, $path) = @_;
75              
76 3 50       13 return unless $path;
77              
78 3         5 if (Data::Localize::DEBUG) {
79             debugf("load_from_path - loading from glob(%s)", $path);
80             }
81              
82 3         465 foreach my $x (glob($path)) {
83 6 50       4908 $self->load_from_file($x) if -f $x;
84             }
85             }
86              
87             sub load_from_file
88             {
89 6     6 1 22 my ($self, $file) = @_;
90              
91 6         11 if (Data::Localize::DEBUG) {
92             debugf("load_from_file - loading from file %s", $file);
93             }
94              
95 6         33 my @lexicon = LoadFile($file);
96 6         78325 my %hash_lexicon;
97              
98 6 100       52 if ($self->is_array) {
99 4         10 my ($keykey, $valuekey) = @{$self->array_key_value};
  4         29  
100 4         16 foreach my $item (@lexicon) {
101 12 50 33     96 if (!exists $item->{$keykey} || !exists $item->{$valuekey}) {
102 0         0 croak
103             "Array element from YAML file does not contain $keykey or $valuekey - forgot to set array_key_value?";
104             }
105              
106 12         51 $hash_lexicon{$item->{$keykey}} = $item->{$valuekey};
107             }
108             }
109             else {
110 2         4 %hash_lexicon = %{$lexicon[0]};
  2         9  
111             }
112              
113 6         379 my $lang = File::Basename::basename($file);
114 6         43 $lang =~ s/\.ya?ml$//;
115              
116 6         12 if (Data::Localize::DEBUG) {
117             debugf("load_from_file - registering %d keys", scalar keys %hash_lexicon);
118             }
119              
120 6         40 $self->merge_lexicon($lang, \%hash_lexicon);
121             }
122              
123             1;
124              
125             __END__