File Coverage

blib/lib/Data/Gimei/Name.pm
Criterion Covered Total %
statement 41 41 100.0
branch 1 2 50.0
condition 14 17 82.3
subroutine 13 13 100.0
pod 0 7 0.0
total 69 80 86.2


line stmt bran cond sub pod time code
1             package Data::Gimei::Name;
2              
3 5     5   27 use warnings;
  5         9  
  5         125  
4 5     5   43 use v5.22;
  5         21  
5 5     5   19 use Carp;
  5         8  
  5         343  
6 5     5   1587 use File::Share qw( dist_file );
  5         119737  
  5         268  
7 5     5   1663 use YAML::XS;
  5         10527  
  5         239  
8              
9 5         21 use Class::Tiny qw(
10             gender
11             given
12             family
13 5     5   1839 );
  5         10657  
14              
15             our $names;
16              
17             sub load {
18 2   66 2 0 77 my $yaml_path = shift // dist_file( 'Data-Gimei', 'names.yml' );
19 2 50       263 Carp::croak("failed to load name data: $yaml_path") unless -r $yaml_path;
20              
21 2         12 $names = YAML::XS::LoadFile($yaml_path);
22             }
23              
24             sub BUILDARGS {
25 12     12 0 2142 my $class = shift;
26 12         24 my %args = @_;
27              
28 12   66     26 $names //= load();
29              
30 12   66     53063 $args{'gender'} //= Data::Gimei::sample( [ 'male', 'female' ] );
31             $args{'given'} = Data::Gimei::Word->new(
32 12         41 Data::Gimei::sample( $names->{'first_name'}->{ $args{'gender'} } ) );
33             $args{'family'} =
34 12         260 Data::Gimei::Word->new( Data::Gimei::sample( $names->{'last_name'} ) );
35              
36 12         231 return \%args;
37             }
38              
39             sub to_s {
40 1     1 0 18 my $self = shift;
41              
42 1         19 return sprintf( "%s, %s, %s, %s, %s",
43             $self->gender, $self->kanji, $self->hiragana, $self->katakana, $self->romaji );
44             }
45              
46             sub kanji {
47 15     15 0 1098 my ( $self, $s ) = @_;
48 15   100     237 return join $s // ' ', map { $_->kanji } ( $self->family, $self->given );
  30         635  
49             }
50              
51             sub hiragana {
52 3     3 0 829 my ( $self, $s ) = @_;
53 3   100     58 return join $s // ' ', map { $_->hiragana } ( $self->family, $self->given );
  6         131  
54             }
55              
56             sub katakana {
57 3     3 0 824 my ( $self, $s ) = @_;
58 3   100     56 return join $s // ' ', map { $_->katakana } ( $self->family, $self->given );
  6         140  
59             }
60              
61             sub romaji {
62 3     3 0 865 my ( $self, $s ) = @_;
63 3   100     57 return join $s // ' ', map { $_->romaji } ( $self->given, $self->family );
  6         128  
64             }
65              
66             1;