File Coverage

blib/lib/Data/Localize/Format/Gettext.pm
Criterion Covered Total %
statement 25 26 96.1
branch 13 16 81.2
condition n/a
subroutine 3 3 100.0
pod 1 1 100.0
total 42 46 91.3


line stmt bran cond sub pod time code
1             package Data::Localize::Format::Gettext;
2 1     1   1003 use Moo;
  1         2  
  1         8  
3              
4             extends 'Data::Localize::Format';
5              
6             has functions => (
7             is => 'ro',
8             default => sub { {} }
9             );
10              
11             sub format {
12 7     7 1 202 my ($self, $lang, $value, @args) = @_;
13              
14 7 100       37 if ( index($value, '(') > -1 ) {
15 4         24 $value =~ s|%(\w+)\(([^\)]+)\)|
16 4         18 $self->_call_function_or_method( $lang, $1, $2, \@args )
17             |gex;
18             }
19 7 100       75 if (@args) {
20 6 50       41 $value =~ s/%(\d+)/ defined $args[$1 - 1] ? $args[$1 - 1] : '' /ge;
  3         24  
21             }
22              
23 7         39 return $value;
24             }
25              
26             sub _call_function_or_method {
27 4     4   12 my ($self, $lang, $method, $embedded, $args) = @_;
28              
29 4         6 my $code;
30             my $is_method;
31 4 100       40 if ( $code = $self->functions->{$method} ) {
    50          
32 1         2 $is_method = 0;
33             } elsif ( $code = $self->can($method) ) {
34 3         7 $is_method = 1;
35             }
36 4 50       10 if (! $code) {
37 0         0 Carp::confess(Scalar::Util::blessed($self) . " does not implement method '$method'");
38             }
39              
40 4         16 my @embedded_args = split /,/, $embedded;
41 4         9 for (@embedded_args) {
42 9 100       31 if ( $_ =~ /%(\d+)/ ) {
43 6         21 $_ = $args->[ $1 - 1 ];
44             }
45             }
46              
47 4         9 my @args = ( $lang, \@embedded_args );
48 4 100       11 if ($is_method) {
49 3         6 unshift @args, $self;
50             }
51 4         9 return $code->(@args);
52             }
53              
54             1;
55              
56             __END__