line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Module::Generate::Hash; |
2
|
|
|
|
|
|
|
|
3
|
2
|
|
|
2
|
|
131797
|
use 5.006; |
|
2
|
|
|
|
|
20
|
|
4
|
2
|
|
|
2
|
|
11
|
use strict; |
|
2
|
|
|
|
|
3
|
|
|
2
|
|
|
|
|
52
|
|
5
|
2
|
|
|
2
|
|
11
|
use warnings; |
|
2
|
|
|
|
|
3
|
|
|
2
|
|
|
|
|
105
|
|
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
our $VERSION = '0.05'; |
8
|
|
|
|
|
|
|
|
9
|
2
|
|
|
2
|
|
972
|
use Module::Generate; |
|
2
|
|
|
|
|
591681
|
|
|
2
|
|
|
|
|
77
|
|
10
|
2
|
|
|
2
|
|
18
|
use base 'Import::Export'; |
|
2
|
|
|
|
|
4
|
|
|
2
|
|
|
|
|
1011
|
|
11
|
|
|
|
|
|
|
|
12
|
|
|
|
|
|
|
our %EX = ( |
13
|
|
|
|
|
|
|
generate => [qw/all/] |
14
|
|
|
|
|
|
|
); |
15
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
sub generate { |
17
|
1
|
50
|
|
1
|
1
|
335
|
my (%generate) = scalar @_ > 1 ? @_ : %{$_[0]}; |
|
0
|
|
|
|
|
0
|
|
18
|
1
|
|
|
|
|
7
|
my $gen = Module::Generate->start; |
19
|
|
|
|
|
|
|
$generate{$_} && $gen->$_($generate{$_}) |
20
|
1
|
|
66
|
|
|
15
|
for (qw/dist lib author email version/); |
21
|
1
|
|
|
|
|
34
|
_build_classes($gen, $generate{classes}); |
22
|
1
|
|
|
|
|
3
|
$gen->generate; |
23
|
|
|
|
|
|
|
} |
24
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
sub _build_classes { |
26
|
2
|
|
|
2
|
|
6
|
my ($gen, $classes, $mod) = @_; |
27
|
2
|
|
|
|
|
3
|
for my $class (keys %{$classes}) { |
|
2
|
|
|
|
|
7
|
|
28
|
2
|
100
|
|
|
|
13
|
my $kls = $mod ? do { |
29
|
|
|
|
|
|
|
$classes->{$class}{base} = $classes->{$class}{base} ? [ |
30
|
1
|
0
|
|
|
|
4
|
(ref $classes->{$class}{base} ? @{$classes->{$class}{base}} : $classes->{$class}{base}), |
|
0
|
50
|
|
|
|
0
|
|
31
|
|
|
|
|
|
|
$mod |
32
|
|
|
|
|
|
|
] : $mod; |
33
|
1
|
|
|
|
|
5
|
sprintf( '%s::%s', $mod, $class ); |
34
|
|
|
|
|
|
|
} : $class; |
35
|
|
|
|
|
|
|
my ($cls, $new, $subs, $accessors, $subclass) = ( |
36
|
|
|
|
|
|
|
$gen->class($kls)->new, |
37
|
|
|
|
|
|
|
delete $classes->{$class}{new}, |
38
|
|
|
|
|
|
|
delete $classes->{$class}{subs}, |
39
|
|
|
|
|
|
|
delete $classes->{$class}{accessors}, |
40
|
|
|
|
|
|
|
delete $classes->{$class}{subclass} |
41
|
2
|
|
|
|
|
8
|
); |
42
|
2
|
|
|
|
|
313
|
_itterate_keys($cls, $classes->{$class}); |
43
|
2
|
|
|
|
|
25
|
_itterate_keys($cls, $new); |
44
|
2
|
|
|
|
|
4
|
$cls->accessor($_) for (@{$accessors}); |
|
2
|
|
|
|
|
6
|
|
45
|
2
|
|
|
|
|
260
|
while (scalar @{$subs}) { |
|
7
|
|
|
|
|
39
|
|
46
|
5
|
|
|
|
|
9
|
my ($key, $value) = (shift @{$subs}, shift @{$subs}); |
|
5
|
|
|
|
|
6
|
|
|
5
|
|
|
|
|
11
|
|
47
|
5
|
|
|
|
|
13
|
my $sub = $cls->sub($key); |
48
|
5
|
|
|
|
|
36
|
_itterate_keys($sub, $value); |
49
|
|
|
|
|
|
|
} |
50
|
2
|
100
|
|
|
|
16
|
_build_classes($gen, $subclass, $kls) if ($subclass); |
51
|
|
|
|
|
|
|
} |
52
|
|
|
|
|
|
|
} |
53
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
sub _itterate_keys { |
55
|
9
|
|
|
9
|
|
18
|
my ($m, $value) = @_; |
56
|
9
|
|
|
|
|
11
|
for my $key (keys %{$value}) { |
|
9
|
|
|
|
|
25
|
|
57
|
15
|
|
100
|
|
|
80
|
my $ref = ref $value->{$key} || "SCALAR"; |
58
|
|
|
|
|
|
|
$m->$key( |
59
|
|
|
|
|
|
|
$ref eq 'ARRAY' |
60
|
0
|
|
|
|
|
|
? @{$value->{$key}} |
61
|
15
|
50
|
|
|
|
47
|
: $value->{$key} |
62
|
|
|
|
|
|
|
); |
63
|
|
|
|
|
|
|
} |
64
|
|
|
|
|
|
|
} |
65
|
|
|
|
|
|
|
|
66
|
|
|
|
|
|
|
=head1 NAME |
67
|
|
|
|
|
|
|
|
68
|
|
|
|
|
|
|
Module::Generate::Hash - Assisting with module generation. |
69
|
|
|
|
|
|
|
|
70
|
|
|
|
|
|
|
=head1 VERSION |
71
|
|
|
|
|
|
|
|
72
|
|
|
|
|
|
|
Version 0.05 |
73
|
|
|
|
|
|
|
|
74
|
|
|
|
|
|
|
=cut |
75
|
|
|
|
|
|
|
|
76
|
|
|
|
|
|
|
=head1 SYNOPSIS |
77
|
|
|
|
|
|
|
|
78
|
|
|
|
|
|
|
use Module::Generate::Hash qw/all/; |
79
|
|
|
|
|
|
|
|
80
|
|
|
|
|
|
|
generate( |
81
|
|
|
|
|
|
|
dist => 'Planes', |
82
|
|
|
|
|
|
|
author => 'LNATION', |
83
|
|
|
|
|
|
|
email => 'email@lnation.org', |
84
|
|
|
|
|
|
|
version => '0.01', |
85
|
|
|
|
|
|
|
classes => { |
86
|
|
|
|
|
|
|
Planes => { |
87
|
|
|
|
|
|
|
abstract => 'Over my head.', |
88
|
|
|
|
|
|
|
our => '$type', |
89
|
|
|
|
|
|
|
begin => sub { |
90
|
|
|
|
|
|
|
$type = 'boeing'; |
91
|
|
|
|
|
|
|
}, |
92
|
|
|
|
|
|
|
accessors => [qw/ |
93
|
|
|
|
|
|
|
airline |
94
|
|
|
|
|
|
|
/], |
95
|
|
|
|
|
|
|
subs => [ |
96
|
|
|
|
|
|
|
type => { |
97
|
|
|
|
|
|
|
code => sub { $type }, |
98
|
|
|
|
|
|
|
pod => 'Returns the type of plane.', |
99
|
|
|
|
|
|
|
example => '$plane->type' |
100
|
|
|
|
|
|
|
}, |
101
|
|
|
|
|
|
|
altitude => { |
102
|
|
|
|
|
|
|
code => sub { |
103
|
|
|
|
|
|
|
$_[1] / $_[2]; |
104
|
|
|
|
|
|
|
... |
105
|
|
|
|
|
|
|
}, |
106
|
|
|
|
|
|
|
pod => 'Discover the altitude of the plane.', |
107
|
|
|
|
|
|
|
example => '$plane->altitude(100, 100)' |
108
|
|
|
|
|
|
|
} |
109
|
|
|
|
|
|
|
] |
110
|
|
|
|
|
|
|
} |
111
|
|
|
|
|
|
|
} |
112
|
|
|
|
|
|
|
); |
113
|
|
|
|
|
|
|
|
114
|
|
|
|
|
|
|
=head1 Exports |
115
|
|
|
|
|
|
|
|
116
|
|
|
|
|
|
|
=head2 generate |
117
|
|
|
|
|
|
|
|
118
|
|
|
|
|
|
|
This module exports a single method generate which accepts a hash that is a distribution specification. |
119
|
|
|
|
|
|
|
|
120
|
|
|
|
|
|
|
generate(%spec); |
121
|
|
|
|
|
|
|
|
122
|
|
|
|
|
|
|
=head1 AUTHOR |
123
|
|
|
|
|
|
|
|
124
|
|
|
|
|
|
|
LNATION, C<< <email at lnation.org> >> |
125
|
|
|
|
|
|
|
|
126
|
|
|
|
|
|
|
=head1 BUGS |
127
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
Please report any bugs or feature requests to C<bug-module-generate-hash at rt.cpan.org>, or through |
129
|
|
|
|
|
|
|
the web interface at L<https://rt.cpan.org/NoAuth/ReportBug.html?Queue=Module-Generate-Hash>. I will be notified, and then you'll |
130
|
|
|
|
|
|
|
automatically be notified of progress on your bug as I make changes. |
131
|
|
|
|
|
|
|
|
132
|
|
|
|
|
|
|
=head1 SUPPORT |
133
|
|
|
|
|
|
|
|
134
|
|
|
|
|
|
|
You can find documentation for this module with the perldoc command. |
135
|
|
|
|
|
|
|
|
136
|
|
|
|
|
|
|
perldoc Module::Generate::Hash |
137
|
|
|
|
|
|
|
|
138
|
|
|
|
|
|
|
|
139
|
|
|
|
|
|
|
You can also look for information at: |
140
|
|
|
|
|
|
|
|
141
|
|
|
|
|
|
|
=over 4 |
142
|
|
|
|
|
|
|
|
143
|
|
|
|
|
|
|
=item * RT: CPAN's request tracker (report bugs here) |
144
|
|
|
|
|
|
|
|
145
|
|
|
|
|
|
|
L<https://rt.cpan.org/NoAuth/Bugs.html?Dist=Module-Generate-Hash> |
146
|
|
|
|
|
|
|
|
147
|
|
|
|
|
|
|
=item * AnnoCPAN: Annotated CPAN documentation |
148
|
|
|
|
|
|
|
|
149
|
|
|
|
|
|
|
L<http://annocpan.org/dist/Module-Generate-Hash> |
150
|
|
|
|
|
|
|
|
151
|
|
|
|
|
|
|
=item * CPAN Ratings |
152
|
|
|
|
|
|
|
|
153
|
|
|
|
|
|
|
L<https://cpanratings.perl.org/d/Module-Generate-Hash> |
154
|
|
|
|
|
|
|
|
155
|
|
|
|
|
|
|
=item * Search CPAN |
156
|
|
|
|
|
|
|
|
157
|
|
|
|
|
|
|
L<https://metacpan.org/release/Module-Generate-Hash> |
158
|
|
|
|
|
|
|
|
159
|
|
|
|
|
|
|
=back |
160
|
|
|
|
|
|
|
|
161
|
|
|
|
|
|
|
|
162
|
|
|
|
|
|
|
=head1 ACKNOWLEDGEMENTS |
163
|
|
|
|
|
|
|
|
164
|
|
|
|
|
|
|
|
165
|
|
|
|
|
|
|
=head1 LICENSE AND COPYRIGHT |
166
|
|
|
|
|
|
|
|
167
|
|
|
|
|
|
|
This software is Copyright (c) 2020 by LNATION. |
168
|
|
|
|
|
|
|
|
169
|
|
|
|
|
|
|
This is free software, licensed under: |
170
|
|
|
|
|
|
|
|
171
|
|
|
|
|
|
|
The Artistic License 2.0 (GPL Compatible) |
172
|
|
|
|
|
|
|
|
173
|
|
|
|
|
|
|
|
174
|
|
|
|
|
|
|
=cut |
175
|
|
|
|
|
|
|
|
176
|
|
|
|
|
|
|
1; # End of Module::Generate::Hash |