File Coverage

blib/lib/Acme/MilkyHolmes/Character.pm
Criterion Covered Total %
statement 58 60 96.6
branch 12 16 75.0
condition 2 3 66.6
subroutine 16 16 100.0
pod 7 8 87.5
total 95 103 92.2


line stmt bran cond sub pod time code
1             package Acme::MilkyHolmes::Character;
2 3     3   982 use Mouse;
  3         3  
  3         12  
3              
4 3     3   1971 use Data::Section::Simple;
  3         1364  
  3         157  
5 3     3   1446 use Localizer::Resource;
  3         11010  
  3         74  
6 3     3   19 use Localizer::Style::Gettext;
  3         3  
  3         46  
7 3     3   1680 use YAML::Tiny;
  3         13907  
  3         211  
8 3     3   25 use utf8;
  3         4  
  3         17  
9              
10             has localizer => (
11             is => 'ro',
12             );
13              
14             has locale => (
15             is => 'rw',
16             isa => 'Str',
17             required => 1,
18             default => 'ja',
19             );
20              
21             has common => (
22             is => 'ro',
23             );
24              
25 3     3   170 no Mouse;
  3         3  
  3         19  
26              
27             sub name {
28 44     44 1 14495 my ($self) = @_;
29              
30 44         127 my $sep = $self->_localized_field('name_separator');
31 44 100       620 $sep = ' ' if ( !defined $sep );
32              
33 44 50       56 if ( defined $self->_localized_field('name') ) {
    100          
34 0         0 return $self->_localized_field('name');
35             }
36             elsif ( $self->locale eq 'ja' ) {
37 22 100 66     367 if( defined $sep && $sep eq '・' ) {
38 12         24 return $self->firstname . $sep . $self->familyname;
39             }
40 10         19 return $self->familyname . $sep . $self->firstname;
41             }
42 22         347 return $self->firstname . $sep . $self->familyname;
43             }
44              
45             sub firstname {
46 56     56 1 4352 my ($self) = @_;
47 56         84 return $self->_localized_field('firstname');
48             }
49              
50             sub familyname {
51 56     56 1 4305 my ($self) = @_;
52 56         73 return $self->_localized_field('familyname');
53             }
54              
55             sub nickname {
56 12     12 1 4062 my ($self) = @_;
57 12 100       26 if ( defined $self->_localized_field('nickname') ) {
58 4         59 return $self->_localized_field('nickname');
59             }
60 8         157 return $self->_localized_field('firstname');
61             }
62              
63             sub birthday {
64 12     12 1 3893 my ($self) = @_;
65 12         28 return $self->_localized_field('birthday');
66             }
67              
68             sub voiced_by {
69 10     10 1 3314 my ($self) = @_;
70 10         21 return $self->_localized_field('voiced_by');
71             }
72              
73             sub nickname_voiced_by {
74 12     12 0 3914 my ($self) = @_;
75 12         25 return $self->_localized_field('nickname_voiced_by');
76             }
77              
78             sub _localized_field {
79 276     276   266 my ($self, $name) = @_;
80 276 50       966 if ( exists $self->localizer->{ $self->locale } ) {
81 276         547 my $localizer = $self->localizer->{ $self->locale };
82 276         546 return $localizer->maketext($name);
83             }
84 0         0 return $self->{$name};
85             }
86              
87             sub BUILD {
88 48     48 1 25593 my ($self, $args) = @_;
89              
90 48         166 my $ds = Data::Section::Simple->new( ref $self );
91 48         312 my $sections = $ds->get_data_section();
92 48 50       3667 if ( exists $sections->{common} ) {
93 48         181 my $common = YAML::Tiny->read_string( delete $sections->{common} );
94 48         5024 $self->{common} = $common;
95             }
96              
97 48 50       50 for my $section_name ( keys %{ $sections || {} } ) {
  48         192  
98 96         254 my $yaml = YAML::Tiny->read_string($sections->{$section_name});
99              
100 96         26932 my $localizer = Localizer::Resource->new(
101             dictionary => $yaml->[0],
102             format => Localizer::Style::Gettext->new(),
103             );
104 96         14619 $self->{localizer}->{$section_name} = $localizer;
105             }
106             }
107              
108             1;
109             __END__