File Coverage

blib/lib/Data/Gimei/Name.pm
Criterion Covered Total %
statement 44 44 100.0
branch 1 2 50.0
condition 14 17 82.3
subroutine 14 14 100.0
pod 0 7 0.0
total 73 84 86.9


line stmt bran cond sub pod time code
1             package Data::Gimei::Name;
2              
3 6     6   103 use 5.010;
  6         32  
4 6     6   34 use strict;
  6         11  
  6         150  
5 6     6   26 use warnings;
  6         13  
  6         369  
6              
7 6     6   36 use Carp;
  6         11  
  6         636  
8 6     6   2877 use File::Share qw( dist_file );
  6         208518  
  6         462  
9 6     6   2772 use YAML::XS;
  6         19268  
  6         490  
10              
11 6         38 use Class::Tiny qw(
12             gender
13             forename
14             surname
15 6     6   2990 );
  6         18108  
16              
17             #
18             # Package variables
19             #
20              
21             our $names; # loaded names data
22              
23             #
24             # Class methods
25             #
26              
27             sub load {
28 2   66 2 0 585107 my $yaml_path = shift // dist_file( 'Data-Gimei', 'names.yml' );
29 2 50       272 Carp::croak("failed to load name data: $yaml_path") unless -r $yaml_path;
30              
31 2         17 $names = YAML::XS::LoadFile($yaml_path);
32             }
33              
34             sub BUILDARGS {
35 13     13 0 3004 my $class = shift;
36 13         41 my %args = @_;
37              
38 13   66     39 $names //= load();
39              
40 13   66     89129 $args{'gender'} //= Data::Gimei::sample( [ 'male', 'female' ] );
41             $args{'forename'} = Data::Gimei::Word->new(
42 13         56 Data::Gimei::sample( $names->{'first_name'}->{ $args{'gender'} } ) );
43             $args{'surname'} =
44 13         319 Data::Gimei::Word->new( Data::Gimei::sample( $names->{'last_name'} ) );
45              
46 13         297 return \%args;
47             }
48              
49             #
50             # Instance methods
51             #
52              
53             sub to_s {
54 12     12 0 5657 my $self = shift;
55              
56 12         209 return sprintf( "%s, %s, %s, %s, %s",
57             $self->gender, $self->kanji, $self->hiragana, $self->katakana, $self->romaji );
58             }
59              
60             sub kanji {
61 14     14 0 6140 my ( $self, $s ) = @_;
62 14   100     272 return join $s // ' ', map { $_->kanji } ( $self->surname, $self->forename );
  28         766  
63             }
64              
65             sub hiragana {
66 14     14 0 2135 my ( $self, $s ) = @_;
67 14   100     244 return join $s // ' ', map { $_->hiragana } ( $self->surname, $self->forename );
  28         612  
68             }
69              
70             sub katakana {
71 14     14 0 1752 my ( $self, $s ) = @_;
72 14   100     254 return join $s // ' ', map { $_->katakana } ( $self->surname, $self->forename );
  28         652  
73             }
74              
75             sub romaji {
76 14     14 0 1713 my ( $self, $s ) = @_;
77 14   100     241 return join $s // ' ', map { $_->romaji } ( $self->forename, $self->surname );
  28         622  
78             }
79              
80             1;