App-Framework
view release on metacpan or search on metacpan
lib/App/Framework.pm view on Meta::CPAN
my @extension_modules ;
my %extensions ;
foreach my $extension (@extensions)
{
my $module = "App::Framework::Extension::$extension" ;
print "Extension $extension - module $module\n" if $class_debug ;
# only allow 1 instance of each extension
if (!exists($extensions{$module}))
{
if (App::Framework::Core->dynamic_load($module, __PACKAGE__))
{
print " + loaded\n" if $class_debug ;
my $priority ;
eval "\$priority = \$${module}::PRIORITY ;" ;
print " + $@\n" if $@ && $class_debug ;
$priority ||= $App::Framework::Base::PRIORITY_DEFAULT ;
print " + priority=$priority\n" if $class_debug ;
push @extension_modules, [$extension, $module, $priority] ;
}
else
{
croak "App::Framework cannot load extension \"$extension\" " ;
}
}
$extensions{$module} = 1 ;
}
@extension_modules = sort { $a->[2] <=> $b->[2] } @extension_modules ;
my @modules = map { $_->[1] } @extension_modules ;
# extensions are based from App::Framework::Extension
push @modules, 'App::Framework::Extension' ;
if ($class_debug)
{
print "Import: $import_args\n" ;
print "features: @features\n" ;
print "Extensions: @extensions\n" ;
print "Extension Modules: @modules\n" ;
}
## load module
$personality ||= 'Script' ;
my $module = "App::Framework::Core::$personality" ;
push @modules, $module ;
print "Framework Inheritence Modules:\n\t". join("\n\t",@modules)."\n" if $class_debug ;
$module = shift @modules ;
my $loaded = App::Framework::Core->dynamic_isa($module, __PACKAGE__) ;
croak "Sorry, App::Framework does not support \"$module\"" unless $loaded ;
# Create object
my $this = $class->SUPER::new(
%args,
'_caller_info' => $args{'_caller_info'},
'_inheritence' => \@modules,
## Pass down extra information
'personality' => $personality,
'extensions' => \@extensions,
) ;
$this->set(
'usage_fn' => sub {$this->script_usage(@_);},
) ;
## Load features
if (@features)
{
## Install them
$this->install_features(\@features, \%feature_args) ;
}
return($this) ;
}
#----------------------------------------------------------------------------------------------
=item B< modpod() >
Create/update module pod files. Creates/updates the pod for the module lists:
L<App::Framework::FeatureModules>,L<App::Framework::ExtensionModules>,L<App::Framework::CoreModules>
Used during installation.
=cut
sub modpod
{
my $this = shift ;
foreach my $name (qw/Core Extension Feature/)
{
my $podfile = "App/Framework/${name}Modules.pod" ;
my %modules = App::Framework::Core->lib_glob("App/Framework/$name") ;
my $template = $this->_template($name) ;
print "$podfile ...\n" ;
my @list ;
foreach my $module (sort keys %modules)
{
if ( open my $fh, "<$modules{$module}" )
{
my ($summary, $version, $line) ;
my $modname = "App::Framework::${name}::${module}" ;
while ( !($summary && $version) && defined($line = <$fh>) )
{
chomp $line ;
# App::Framework::Feature::Args - Handle application command line arguments
if ($line =~ m/$modname\s*\-\s*(\S.*)/)
{
( run in 0.620 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )