File Coverage

blib/lib/Data/Gimei/Address.pm
Criterion Covered Total %
statement 41 41 100.0
branch 1 2 50.0
condition 10 12 83.3
subroutine 13 13 100.0
pod 0 6 0.0
total 65 74 87.8


line stmt bran cond sub pod time code
1             package Data::Gimei::Address;
2              
3 6     6   111 use 5.010;
  6         39  
4 6     6   65 use strict;
  6         22  
  6         195  
5 6     6   34 use warnings;
  6         10  
  6         390  
6              
7 6     6   50 use Carp;
  6         23  
  6         465  
8 6     6   34 use File::Share qw( dist_file );
  6         8  
  6         364  
9 6     6   28 use YAML::XS;
  6         10  
  6         335  
10              
11 6         32 use Class::Tiny qw(
12             prefecture
13             city
14             town
15 6     6   29 );
  6         11  
16              
17             #
18             # Package variables
19             #
20             our $addresses; # loaded address data
21              
22             #
23             # Class methods
24             #
25              
26             sub load {
27 2   66 2 0 476028 my $yaml_path = shift // dist_file( 'Data-Gimei', 'addresses.yml' );
28 2 50       393 Carp::croak("failed to load address data: $yaml_path") unless -r $yaml_path;
29              
30 2         15 $addresses = YAML::XS::LoadFile($yaml_path);
31             }
32              
33             sub BUILDARGS {
34 6     6 0 27397 my $class = shift;
35 6         15 my %args = @_;
36              
37 6   66     23 $addresses //= load();
38              
39             $args{'prefecture'} = Data::Gimei::Word->new(
40 6         18478 Data::Gimei::sample( $addresses->{'addresses'}->{'prefecture'} ) );
41             $args{'city'} = Data::Gimei::Word->new(
42 6         184 Data::Gimei::sample( $addresses->{'addresses'}->{'city'} ) );
43             $args{'town'} = Data::Gimei::Word->new(
44 6         102 Data::Gimei::sample( $addresses->{'addresses'}->{'town'} ) );
45              
46 6         116 return \%args;
47             }
48              
49             #
50             # Instance methods
51             #
52              
53             sub to_s {
54 5     5 0 5757 my $self = shift;
55              
56 5         16 return sprintf( "%s, %s, %s",
57             $self->kanji(' '),
58             $self->hiragana(' '),
59             $self->katakana(' ') );
60             }
61              
62             sub kanji {
63 7     7 0 6155 my ( $self, $s ) = @_;
64              
65             return join $s // '',
66 7   100     204 map { $_->kanji } ( $self->prefecture, $self->city, $self->town );
  21         700  
67             }
68              
69             sub hiragana {
70 7     7 0 2278 my ( $self, $s ) = @_;
71              
72             return join $s // '',
73 7   100     161 map { $_->hiragana } ( $self->prefecture, $self->city, $self->town );
  21         618  
74             }
75              
76             sub katakana {
77 7     7 0 1823 my ( $self, $s ) = @_;
78              
79             return join $s // '',
80 7   100     165 map { $_->katakana } ( $self->prefecture, $self->city, $self->town );
  21         555  
81             }
82              
83             1;