File Coverage

blib/lib/Data/Localize/YAML.pm
Criterion Covered Total %
statement 56 61 91.8
branch 6 10 60.0
condition 2 5 40.0
subroutine 13 14 92.8
pod 3 4 75.0
total 80 94 85.1


line stmt bran cond sub pod time code
1             package Data::Localize::YAML;
2             $Data::Localize::YAML::VERSION = '0.001';
3 4     4   146751 use v5.10;
  4         32  
4 4     4   24 use strict;
  4         7  
  4         87  
5 4     4   18 use warnings;
  4         7  
  4         137  
6              
7 4     4   1704 use Moo;
  4         35342  
  4         26  
8 4     4   4953 use File::Basename;
  4         9  
  4         374  
9 4     4   1595 use Data::Localize;
  4         114382  
  4         142  
10 4     4   1925 use Data::Localize::Storage::Hash;
  4         48634  
  4         139  
11 4     4   2482 use YAML::Tiny;
  4         24521  
  4         266  
12 4     4   41 use Carp qw(croak);
  4         13  
  4         279  
13              
14             BEGIN {
15 4     4   2682 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 11482 my ($class, %args) = @_;
56              
57 3         26 my $path = delete $args{path};
58 3 50       14 if ($path) {
59 3   50     26 $args{paths} ||= [];
60 3         17 push @{$args{paths}}, $path;
  3         12  
61             }
62 3         31 $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 10 my ($self, $path) = @_;
75              
76 3 50       17 return unless $path;
77              
78 3         6 if (Data::Localize::DEBUG) {
79             debugf("load_from_path - loading from glob(%s)", $path);
80             }
81              
82 3         445 foreach my $x (glob($path)) {
83 6 50       4685 $self->load_from_file($x) if -f $x;
84             }
85             }
86              
87             sub load_from_file
88             {
89 6     6 1 46 my ($self, $file) = @_;
90              
91 6         14 if (Data::Localize::DEBUG) {
92             debugf("load_from_file - loading from file %s", $file);
93             }
94              
95 6         35 my $lexicon = YAML::Tiny->read($file);
96 6         8463 my %hash_lexicon;
97              
98 6 100       30 if ($self->is_array) {
99 4         7 my ($keykey, $valuekey) = @{$self->array_key_value};
  4         17  
100 4         8 foreach my $item (@{$lexicon}) {
  4         10  
101 12 50 33     76 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         38 $hash_lexicon{$item->{$keykey}} = $item->{$valuekey};
107             }
108             }
109             else {
110 2         4 %hash_lexicon = %{$lexicon->[0]};
  2         12  
111             }
112              
113 6         340 my $lang = File::Basename::basename($file);
114 6         37 $lang =~ s/\.ya?ml$//;
115              
116 6         13 if (Data::Localize::DEBUG) {
117             debugf("load_from_file - registering %d keys", scalar keys %hash_lexicon);
118             }
119              
120 6         31 $self->merge_lexicon($lang, \%hash_lexicon);
121             }
122              
123             1;
124              
125             __END__