File Coverage

lib/Egg/Helper.pm
Criterion Covered Total %
statement 25 76 32.8
branch 1 20 5.0
condition 0 26 0.0
subroutine 9 15 60.0
pod n/a
total 35 137 25.5


line stmt bran cond sub pod time code
1             package Egg::Helper;
2             #
3             # Masatoshi Mizuno E<lt>lusheE<64>cpan.orgE<gt>
4             #
5             # $Id: Helper.pm 337 2008-05-14 12:30:09Z lushe $
6             #
7 37     37   209276 use strict;
  37         86  
  37         1533  
8 37     37   210 use warnings;
  37         57  
  37         1248  
9 37     37   241 use Carp qw/ croak /;
  37         71  
  37         2791  
10 37     37   295 use base qw/ Egg::Helper::Util::Base /;
  37         67  
  37         26161  
11              
12             our $VERSION= '3.01';
13              
14             $SIG{__DIE__}= sub { Egg::Error->throw(@_) };
15              
16             my %A= (
17             project => 'Build::Project',
18             vtest => 'Util::VirtualProject',
19             tester => 'Util::Tester',
20             tools => 'Util::Tools',
21             );
22             my %Alias= (
23             B => 'Build',
24             C => 'Controller',
25             D => 'Dispatch',
26             H => 'Helper',
27             L => 'Log',
28             M => 'Model',
29             P => 'Plugin',
30             R => 'Response',
31             U => 'Util',
32             V => 'View',
33             m => 'Module',
34             r => 'Request',
35             );
36             my($modenow, $contextnow);
37              
38             sub run {
39 0     0     my $class= shift;
40 0   0       my $mode = ucfirst(shift) || croak q{ I want 'MODE'. };
41 0   0       my $attr = shift || {};
42 0 0         if (my $a= $A{lc $mode}) { $mode= $a }
  0            
43 0 0         if ($mode=~m{^([A-Za-z])[\:\-]+}) {
44 0 0         if (my $alias= $Alias{$1}) { $mode=~s{^[^\:\-]+} [$alias] }
  0            
45             }
46 0           $mode=~s{\-} [::]g;
47 0           $mode=~s{([^\:])\:([^\:])} [$1.'::'.$2]eg;
  0            
48 0           $mode=~s{\:([a-z])} [':'. ucfirst($1)]eg;
  0            
49 0 0 0       ($modenow and $modenow eq $mode)
50             and die qq{ '$modenow' mode is operating. };
51 0 0         if ($contextnow) {
52 0           my %conf= (
53 0   0       %{$contextnow->config},
54             project_name => ($attr->{project_name} || undef),
55             helper_option=> $attr,
56             );
57 0           $contextnow->config(\%conf);
58 0           return $contextnow->_start_helper;
59             }
60 0           my $pkg= "Egg::Helper::$mode";
61 0 0         $pkg->require || return $class->_helper_help(
    0          
62             $@=~/^\s*Can\'t\s+locate/
63             ? qq{ Typing error of mode name. [$mode] }
64             : qq{ Script error: $@ }
65             );
66 0           my $plugins;
67 0 0         if (my $loads= $pkg->can('_helper_load_plugins')) {
68 0   0       $plugins= $loads->() || [];
69             } else {
70 0           $plugins= [];
71             }
72 0           $contextnow= $class->_helper_context($pkg, $plugins, $attr);
73 0           $contextnow->_start_helper;
74             }
75             sub helper_tools {
76 0     0     my $class= shift;
77 0           $class->_helper_context('Egg::Helper::Dummy', [], @_);
78             }
79             sub _helper_context {
80 0     0     my($class, $pkg, $plugins)= splice @_, 0, 3;
81 0 0 0       my $attr = $_[1] ? {@_}: ($_[0] || {});
82 0   0       my $handler= $ENV{EGG_HELPER_CLASS} || 'Egg::Helper::Project';
83 0           $attr->{start_dir}= $class->helper_current_dir;
84 0   0       $attr->{project_root} ||= $class->helper_tempdir || $attr->{start_dir};
      0        
85 0           $attr->{root}= $attr->{project_root};
86 0   0       $handler->__import($pkg, $plugins, {
87             project_name => ($attr->{project_name_orign} || 'EggHelper'),
88             root => $attr->{project_root},
89             start_dir => $attr->{start_dir},
90             helper_option=> $attr,
91             });
92 0           $handler->new;
93             }
94             sub helper_script {
95 0     0     print STDOUT <<SCRIPT;
96 0           #!@{[ Egg::Helper::Util::Base->helper_perl_path ]}
97             use Egg::Helper;
98             Egg::Helper->run( shift(\@ARGV) );
99             SCRIPT
100             }
101             *out= \&helper_script;
102              
103             package Egg::Helper::Project;
104 37     37   322 use strict;
  37         136  
  37         1629  
105 37     37   238 use warnings;
  37         99  
  37         5647  
106             require Egg;
107              
108             our @ISA= qw/ Egg::Helper::Util::Base /;
109             our $START_DIR;
110              
111             sub __import {
112 0     0     my($class, $pkg, $plugins, $attr)= @_;
113 0           $ENV{"EGG::HELPER::PROJECT_DISPATCH_CLASS"}= 0;
114 0           Egg->import(@$plugins);
115 0           unshift @ISA, $pkg;
116 0           __PACKAGE__->_startup($attr);
117 37     37   242 no strict 'refs'; ## no critic.
  37         73  
  37         1501  
118 37     37   214 no warnings 'redefine';
  37         1459  
  37         27953  
119 0     0     *{"${class}::namespace"}= sub { $_[0]->config->{project_name} };
  0            
  0            
120 0           *{"${class}::project_name"}= $class->can('namespace');
  0            
121 0   0       $START_DIR= $attr->{start_dir} || "";
122 0           $class;
123             }
124 37 50   37   374 END { chdir($START_DIR) if $START_DIR }; ## no critic.
125              
126             package Egg::Helper::Dummy;
127              
128             1;
129              
130             __END__
131              
132             =head1 NAME
133              
134             Egg::Helper - Helper module for Egg.
135              
136             =head1 DESCRIPTION
137              
138             This module is started by the helper script.
139              
140             =head2 Helper of standard appending.
141              
142             =over 4
143              
144             =item * L<Egg::Helper::Build::Module >.
145              
146             The template of the Perl module is generated.
147              
148             =item * L<Egg::Helper::Build::Plugin>.
149              
150             The template of the plug-in module is generated.
151              
152             =item * L<Egg::Helper::Build::Project>.
153              
154             The project is constructed.
155              
156             =item * L<Egg::Helper::Build::Prototype>.
157              
158             'prototype.js' etc. are output.
159              
160             =item * L<Egg::Helper::Config::YAML>.
161              
162             The model of the configuration of the YAML form is generated.
163              
164             =item * L<Egg::Helper::Util::Tester>.
165              
166             Test of project application.
167              
168             =item * L<Egg::Helper::Util::VirtualProject>.
169              
170             Virtual project for package test.
171              
172             =back
173              
174             =head1 METHODS
175              
176             =head2 run
177              
178             When the helper script is started, this method is called.
179              
180             =head2 helper_tools
181              
182             Especially, nothing is done. Helper object is only returned.
183              
184             The thing used to cause some actions as the file is made before the
185             L<Egg::Helper::Util::VirtualProject> object is acquired in the package
186             test etc. is assumed.
187              
188             use Egg::Helper;
189            
190             my $tool= Egg::Helper->helper_tools;
191            
192             $tool->helper_create_file(join '', <DATA>);
193             .....
194              
195             It is a project object that this method returns that succeeds to
196             L<Egg::Helper::Util::Base>.
197              
198             =head2 helper_script
199              
200             The code of the helper scripting to generate the project is returned.
201              
202             To generate the helper script, as follows is done.
203              
204             % perl -MEgg::Helper -e 'Egg::Helper->helper_script' > /path/to/egg_helper.pl
205              
206             I think that the generated script is convenient when it outputs to the place that
207             passing passed, and the execution attribute is given at the right time.
208              
209             And, the project is generated as follows.
210              
211             % egg_helper.pl project [PROJECT_NAME] -o/path/to
212              
213             =over 4
214              
215             =item * Alias = out
216              
217             =back
218              
219             =head1 SEE ALSO
220              
221             L<Egg>,
222             L<Egg::Release>,
223             L<Egg::Helper::Util::Base>,
224              
225             =head1 AUTHOR
226              
227             Masatoshi Mizuno E<lt>lusheE<64>cpan.orgE<gt>
228              
229             =head1 COPYRIGHT AND LICENSE
230              
231             Copyright (C) 2008 Bee Flag, Corp. E<lt>L<http://egg.bomcity.com/>E<gt>.
232              
233             This library is free software; you can redistribute it and/or modify
234             it under the same terms as Perl itself, either Perl version 5.8.6 or,
235             at your option, any later version of Perl 5 you may have available.
236              
237             =cut
238