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   1666 use Mouse;
  3         5  
  3         1010  
3              
4 3     3   2909 use Data::Section::Simple;
  3         1506  
  3         152  
5 3     3   2133 use Localizer::Resource;
  3         15067  
  3         81  
6 3     3   17 use Localizer::Style::Gettext;
  3         5  
  3         61  
7 3     3   2702 use YAML::Tiny;
  3         17080  
  3         185  
8 3     3   18 use utf8;
  3         5  
  3         15  
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   190 no Mouse;
  3         5  
  3         19  
26              
27             sub name {
28 44     44 1 14771 my ($self) = @_;
29              
30 44         111 my $sep = $self->_localized_field('name_separator');
31 44 100       789 $sep = ' ' if ( !defined $sep );
32              
33 44 50       91 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     496 if( defined $sep && $sep eq '・' ) {
38 12         26 return $self->firstname . $sep . $self->familyname;
39             }
40 10         24 return $self->familyname . $sep . $self->firstname;
41             }
42 22         436 return $self->firstname . $sep . $self->familyname;
43             }
44              
45             sub firstname {
46 56     56 1 4820 my ($self) = @_;
47 56         119 return $self->_localized_field('firstname');
48             }
49              
50             sub familyname {
51 56     56 1 5105 my ($self) = @_;
52 56         133 return $self->_localized_field('familyname');
53             }
54              
55             sub nickname {
56 12     12 1 4351 my ($self) = @_;
57 12 100       61 if ( defined $self->_localized_field('nickname') ) {
58 4         71 return $self->_localized_field('nickname');
59             }
60 8         178 return $self->_localized_field('firstname');
61             }
62              
63             sub birthday {
64 12     12 1 4387 my ($self) = @_;
65 12         27 return $self->_localized_field('birthday');
66             }
67              
68             sub voiced_by {
69 10     10 1 3598 my ($self) = @_;
70 10         24 return $self->_localized_field('voiced_by');
71             }
72              
73             sub nickname_voiced_by {
74 12     12 0 4627 my ($self) = @_;
75 12         31 return $self->_localized_field('nickname_voiced_by');
76             }
77              
78             sub _localized_field {
79 276     276   413 my ($self, $name) = @_;
80 276 50       1205 if ( exists $self->localizer->{ $self->locale } ) {
81 276         838 my $localizer = $self->localizer->{ $self->locale };
82 276         774 return $localizer->maketext($name);
83             }
84 0         0 return $self->{$name};
85             }
86              
87             sub BUILD {
88 48     48 1 26322 my ($self, $args) = @_;
89              
90 48         196 my $ds = Data::Section::Simple->new( ref $self );
91 48         377 my $sections = $ds->get_data_section();
92 48 50       4295 if ( exists $sections->{common} ) {
93 48         178 my $common = YAML::Tiny->read_string( delete $sections->{common} );
94 48         6166 $self->{common} = $common;
95             }
96              
97 48 50       61 for my $section_name ( keys %{ $sections || {} } ) {
  48         236  
98 96         325 my $yaml = YAML::Tiny->read_string($sections->{$section_name});
99              
100 96         38046 my $localizer = Localizer::Resource->new(
101             dictionary => $yaml->[0],
102             format => Localizer::Style::Gettext->new(),
103             );
104 96         22751 $self->{localizer}->{$section_name} = $localizer;
105             }
106             }
107              
108             1;
109             __END__