File Coverage

blib/lib/Plack/I18N.pm
Criterion Covered Total %
statement 51 51 100.0
branch 1 2 50.0
condition 7 9 77.7
subroutine 13 13 100.0
pod 4 4 100.0
total 76 79 96.2


line stmt bran cond sub pod time code
1             package Plack::I18N;
2 3     3   48841 use 5.008001;
  3         10  
  3         105  
3 3     3   11 use strict;
  3         3  
  3         71  
4 3     3   17 use warnings;
  3         4  
  3         121  
5              
6             our $VERSION = "0.02";
7              
8 3     3   12 use Carp qw(croak);
  3         3  
  3         160  
9 3     3   1581 use Locale::Maketext;
  3         28277  
  3         83  
10 3     3   1462 use Plack::Util ();
  3         31338  
  3         64  
11 3     3   1149 use Plack::I18N::Handle;
  3         7  
  3         1192  
12              
13             sub new {
14 21     21 1 21715 my $class = shift;
15 21         61 my (%params) = @_;
16              
17 21 50       53 croak 'lexicon required' unless $params{lexicon};
18              
19 21         28 my $self = {};
20 21         29 bless $self, $class;
21              
22 21   50     66 $self->{i18n_class} = $params{i18n_class} || __PACKAGE__ . '::Auto';
23 21         51 $self->{locale_dir} = $params{locale_dir};
24 21   100     74 $self->{default_language} = $params{default_language} || 'en';
25              
26 21         54 $self->{lexicon} = $self->_build_lexicon(
27             $params{lexicon},
28             i18n_class => $self->{i18n_class},
29             locale_dir => $self->{locale_dir},
30             default_language => $self->{default_language}
31             );
32              
33 21   100     78 $self->{languages} =
34             $params{languages} || [sort $self->{lexicon}->detect_languages];
35              
36 21         124 return $self;
37             }
38              
39             sub default_language {
40 16     16 1 58 my $self = shift;
41              
42 16         45 return $self->{default_language};
43             }
44              
45             sub languages {
46 22     22 1 93 my $self = shift;
47              
48 22         19 return @{$self->{languages}};
  22         74  
49             }
50              
51             sub handle {
52 17     17 1 47 my $self = shift;
53 17         18 my ($language) = @_;
54              
55 17         17 my $i18n_class = $self->{i18n_class};
56              
57 17   66     53 $self->{handles}->{$language} ||= do {
58 16         64 my $handle = $i18n_class->get_handle($language);
59 16     1   3384 $handle->fail_with(sub { $_[1] });
  1         50  
60              
61 16         163 Plack::I18N::Handle->new(handle => $handle, language => $language);
62             };
63              
64 17         43 return $self->{handles}->{$language};
65             }
66              
67             sub _build_lexicon {
68 21     21   17 my $self = shift;
69 21         45 my ($lexicon, %params) = @_;
70              
71 21         49 my $lexicon_class = __PACKAGE__ . '::Lexicon::' . ucfirst($lexicon);
72              
73 21         57 Plack::Util::load_class($lexicon_class);
74              
75 21         261 return $lexicon_class->new(%params);
76             }
77              
78             1;
79             __END__