File Coverage

blib/lib/Text/DeLoreanIpsum.pm
Criterion Covered Total %
statement 83 84 98.8
branch 3 4 75.0
condition 12 22 54.5
subroutine 21 21 100.0
pod 4 15 26.6
total 123 146 84.2


line stmt bran cond sub pod time code
1             package Text::DeLoreanIpsum;
2              
3 1     1   171629 use 5.018002;
  1         4  
4 1     1   4 use strict;
  1         1  
  1         31  
5 1     1   4 use warnings;
  1         1  
  1         43  
6 1     1   536 use List::MoreUtils qw(uniq);
  1         15569  
  1         5  
7 1     1   1701 use Text::DeLoreanIpsumData qw/ getData /;
  1         6  
  1         160  
8              
9 1     1   6 use vars qw($VERSION);
  1         1  
  1         798  
10              
11             our $VERSION = '0.05';
12              
13             my $deLoreanIpsum;
14              
15             sub new {
16 1     1 1 1301 my $class = shift;
17 1   50     10 $deLoreanIpsum ||= bless {}, $class;
18 1         4 return $deLoreanIpsum;
19             }
20              
21             sub generate_characterlist {
22 1     1 0 1 my $self = shift;
23 1         1 my $all = shift;
24 1         3 my $getData = getData();
25              
26             return $all
27 0         0 ? [ map { keys %$_ } @$getData ]
28 1 50       7 : [ uniq sort map { keys %$_ } @$getData ];
  730         1389  
29             }
30              
31             sub characterlist {
32 26     26 0 68 my $self = shift;
33 26         40 my $all = shift;
34              
35 26   66     78 $self->{ characterlist } ||= $self->generate_characterlist($all);
36             }
37              
38             sub charactercount {
39 25     25 0 42 my $self = shift;
40 25         32 return scalar(@{$self->{ characterlist }});
  25         131  
41             }
42              
43             sub get_character {
44 25     25 0 46 my $self = shift;
45 25         48 return $self->characterlist->[ int( rand( $self->charactercount ) ) ];
46             }
47              
48             sub characters {
49 1     1 0 1 my $self = shift;
50 1   50     5 my $all = shift || 0;
51              
52 1         2 my @characters;
53 1         6 return join(' / ', @{$self->characterlist($all)});
  1         3  
54             }
55              
56             sub generate_wordlist {
57 19     19 0 27 my $self = shift;
58 19         43 my $character = shift;
59 19         51 my $getData = getData();
60              
61 19         29 my @words;
62 19         38 foreach my $line (@$getData) {
63 13870 100       25623 next unless $line->{$character};
64 144         266 push @words, map { s/\W//; lc($_) } map { split /\s/, $_ } values %$line;
  1496         2322  
  1496         2978  
  144         1053  
65             }
66 19         121 return \@words;
67             }
68              
69             sub wordlist {
70 152     152 0 200 my $self = shift;
71 152         211 my $character = shift;
72 152   66     445 $self->{ wordlist }->{ $character } ||= $self->generate_wordlist( $character );
73             }
74              
75             sub wordcount {
76 152     152 0 218 my $self = shift;
77 152         212 my $character = shift;
78 152         192 return scalar(@{$self->{ wordlist }->{ $character }});
  152         577  
79             }
80              
81             sub get_word {
82 152     152 0 222 my $self = shift;
83 152         201 my $character = shift;
84 152         288 return $self->wordlist($character)->[ int( rand( $self->wordcount($character) ) ) ];
85             }
86              
87             sub words {
88 25     25 1 34 my $self = shift;
89 25   50     52 my $num = shift || 1;
90 25   66     52 my $character = shift || $self->get_character();
91              
92 25         58 return join ' ', map { $self->get_word($character) }
  152         308  
93             (0..$num-1);
94             }
95              
96             sub get_sentence {
97 24     24 0 33 my $self = shift;
98 24   33     69 my $character = shift || $self->get_character();
99              
100 24         61 my $words = $self->words( 4 + int( rand( 6 ) ), $character);
101              
102 24         112 return sprintf '%s: %s', $character, ucfirst( $words );
103             }
104              
105             sub sentences {
106 5     5 1 9 my $self = shift;
107 5   50     15 my $num = shift || 1;
108 5         8 my $character = shift;
109              
110 5         14 my @sentences = map { $self->get_sentence($character) }
  24         47  
111             0..$num-1;
112              
113 5         52 return join( '. ', @sentences ) . '.';
114             }
115              
116             sub get_paragraph {
117 4     4 0 7 my $self = shift;
118 4         8 my $character = shift;
119 4         18 return $self->sentences(3 + int( rand( 4 ) ), $character );
120             }
121              
122             sub paragraphs {
123 1     1 1 2 my $self = shift;
124 1   50     3 my $num = shift || 1;
125 1         2 my $character = shift;
126 1         1 my @paragraphs;
127 1         4 push @paragraphs, $self->get_paragraph($character) for (1..$num);
128 1         13 return join "\n\n", @paragraphs;
129             }
130              
131             1;
132             __END__