File Coverage

blib/lib/App/Gimei/Generator.pm
Criterion Covered Total %
statement 35 35 100.0
branch 7 8 87.5
condition 8 8 100.0
subroutine 7 7 100.0
pod 0 2 0.0
total 57 60 95.0


line stmt bran cond sub pod time code
1             package App::Gimei::Generator;
2              
3 9     9   591 use warnings;
  9         23  
  9         288  
4 9     9   92 use v5.22;
  9         30  
5              
6 9     9   46 use Carp;
  9         23  
  9         685  
7 9         65 use Class::Tiny qw(
8             word_class
9             gender
10             word_subtype
11             render
12             cache
13 9     9   644 );
  9         3290  
14 9     9   11261 use Data::Gimei;
  9         356132  
  9         2499  
15              
16             sub BUILDARGS {
17 29     29 0 2890 my ( $class, %args ) = @_;
18              
19 29         90 for my $arg ( qw/word_class/ ) {
20 29 50       123 croak "$arg arg required" unless exists $args{$arg};
21             }
22              
23 29   100     142 $args{word_subtype} //= '';
24 29   100     150 $args{gender} //= '';
25 29   100     116 $args{render} //= 'kanji';
26            
27 29         81 return \%args;
28             }
29              
30             sub execute {
31 28     28 0 140 my ( $self, $cache ) = @_;
32 28         45 my ( $word );
33              
34 28         515 my $key = $self->word_class . $self->gender;
35 28         751 $word = $cache->{$key};
36 28 100       85 if (!defined $word) {
37 26   100     442 $word = $self->word_class->new( gender => ($self->gender || undef) );
38 26         493318 $cache->{$key} = $word;
39             }
40              
41 28 100       544 if ($self->word_subtype eq 'gender') {
    100          
42 4         105 return $word->gender;
43             } elsif ($self->word_subtype) {
44 12         451 my $call = $word->can($self->word_subtype);
45 12         284 $word = $word->$call();
46             }
47              
48 24         848 my $call = $word->can($self->render);
49 24         365 $word = $word->$call();
50              
51 24         1441 return $word;
52             }
53              
54             1;