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   963 use Mouse;
  3         3  
  3         14  
3              
4 3     3   1999 use Data::Section::Simple;
  3         1319  
  3         151  
5 3     3   1223 use Localizer::Resource;
  3         11017  
  3         69  
6 3     3   15 use Localizer::Style::Gettext;
  3         3  
  3         43  
7 3     3   1540 use YAML::Tiny;
  3         13462  
  3         169  
8 3     3   16 use utf8;
  3         4  
  3         12  
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   144 no Mouse;
  3         4  
  3         10  
26              
27             sub name {
28 44     44 1 15104 my ($self) = @_;
29              
30 44         112 my $sep = $self->_localized_field('name_separator');
31 44 100       639 $sep = ' ' if ( !defined $sep );
32              
33 44 50       63 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     372 if( defined $sep && $sep eq '・' ) {
38 12         22 return $self->firstname . $sep . $self->familyname;
39             }
40 10         20 return $self->familyname . $sep . $self->firstname;
41             }
42 22         315 return $self->firstname . $sep . $self->familyname;
43             }
44              
45             sub firstname {
46 56     56 1 4968 my ($self) = @_;
47 56         77 return $self->_localized_field('firstname');
48             }
49              
50             sub familyname {
51 56     56 1 4724 my ($self) = @_;
52 56         83 return $self->_localized_field('familyname');
53             }
54              
55             sub nickname {
56 12     12 1 4635 my ($self) = @_;
57 12 100       27 if ( defined $self->_localized_field('nickname') ) {
58 4         62 return $self->_localized_field('nickname');
59             }
60 8         126 return $self->_localized_field('firstname');
61             }
62              
63             sub birthday {
64 12     12 1 4321 my ($self) = @_;
65 12         27 return $self->_localized_field('birthday');
66             }
67              
68             sub voiced_by {
69 10     10 1 3544 my ($self) = @_;
70 10         22 return $self->_localized_field('voiced_by');
71             }
72              
73             sub nickname_voiced_by {
74 12     12 0 4618 my ($self) = @_;
75 12         30 return $self->_localized_field('nickname_voiced_by');
76             }
77              
78             sub _localized_field {
79 276     276   260 my ($self, $name) = @_;
80 276 50       943 if ( exists $self->localizer->{ $self->locale } ) {
81 276         531 my $localizer = $self->localizer->{ $self->locale };
82 276         557 return $localizer->maketext($name);
83             }
84 0         0 return $self->{$name};
85             }
86              
87             sub BUILD {
88 48     48 1 26851 my ($self, $args) = @_;
89              
90 48         174 my $ds = Data::Section::Simple->new( ref $self );
91 48         333 my $sections = $ds->get_data_section();
92 48 50       3781 if ( exists $sections->{common} ) {
93 48         175 my $common = YAML::Tiny->read_string( delete $sections->{common} );
94 48         5104 $self->{common} = $common;
95             }
96              
97 48 50       51 for my $section_name ( keys %{ $sections || {} } ) {
  48         195  
98 96         248 my $yaml = YAML::Tiny->read_string($sections->{$section_name});
99              
100 96         25751 my $localizer = Localizer::Resource->new(
101             dictionary => $yaml->[0],
102             format => Localizer::Style::Gettext->new(),
103             );
104 96         14560 $self->{localizer}->{$section_name} = $localizer;
105             }
106             }
107              
108             1;
109             __END__