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   31 use warnings;
  5         12  
  5         168  
4 5     5   68 use v5.22;
  5         26  
5 5     5   23 use Carp;
  5         8  
  5         463  
6 5     5   2246 use File::Share qw( dist_file );
  5         142290  
  5         319  
7 5     5   2258 use YAML::XS;
  5         12566  
  5         310  
8              
9 5         32 use Class::Tiny qw(
10             gender
11             forename
12             surname
13 5     5   2438 );
  5         13078  
14              
15             our $names;
16              
17             sub load {
18 2   66 2 0 89 my $yaml_path = shift // dist_file( 'Data-Gimei', 'names.yml' );
19 2 50       245 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 2585 my $class = shift;
26 12         32 my %args = @_;
27              
28 12   66     38 $names //= load();
29              
30 12   66     55160 $args{'gender'} //= Data::Gimei::sample( [ 'male', 'female' ] );
31             $args{'forename'} = Data::Gimei::Word->new(
32 12         47 Data::Gimei::sample( $names->{'first_name'}->{ $args{'gender'} } ) );
33             $args{'surname'} =
34 12         296 Data::Gimei::Word->new( Data::Gimei::sample( $names->{'last_name'} ) );
35              
36 12         240 return \%args;
37             }
38              
39             sub to_s {
40 1     1 0 21 my $self = shift;
41              
42 1         17 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 1332 my ( $self, $s ) = @_;
48 15   100     256 return join $s // ' ', map { $_->kanji } ( $self->surname, $self->forename );
  30         679  
49             }
50              
51             sub hiragana {
52 3     3 0 900 my ( $self, $s ) = @_;
53 3   100     61 return join $s // ' ', map { $_->hiragana } ( $self->surname, $self->forename );
  6         137  
54             }
55              
56             sub katakana {
57 3     3 0 867 my ( $self, $s ) = @_;
58 3   100     58 return join $s // ' ', map { $_->katakana } ( $self->surname, $self->forename );
  6         133  
59             }
60              
61             sub romaji {
62 3     3 0 855 my ( $self, $s ) = @_;
63 3   100     59 return join $s // ' ', map { $_->romaji } ( $self->forename, $self->surname );
  6         138  
64             }
65              
66             1;