Ambrosia
view release on metacpan or search on metacpan
script/ambrosia view on Meta::CPAN
]
}
);
instance Ambrosia::Context(%optionsConfig);
my $config_path = Context->param('config_path') || $cwd . '/ambrosia.conf';
if (-f $config_path )
{
instance Ambrosia::Config(AmbrosiaBuilder => $config_path);
Ambrosia::Config::assign('AmbrosiaBuilder');
instance Ambrosia::DataProvider(AmbrosiaBuilder => config()->data_source);
Ambrosia::DataProvider::assign('AmbrosiaBuilder');
}
else
{
$action = 'configure';
instance Ambrosia::DataProvider(AmbrosiaBuilder => new Ambrosia::core::Nil);
Ambrosia::DataProvider::assign('AmbrosiaBuilder');
}
use Ambrosia::Logger;
#instance Ambrosia::Logger('AmbrosiaBuilder', DEBUG => 1, INFO_EX => 1, INFO => 1, -prefix => 'abuilder_', -dir => config->logger_path);
instance Ambrosia::Logger('AmbrosiaBuilder');
Ambrosia::Logger::assign('AmbrosiaBuilder');
use Ambrosia::Dispatcher;
use Ambrosia::View::XSLT;
use Ambrosia::BaseManager;
my $MANAGERS = {
db2xml => {
manager => 'Managers::buildXml',
template => '/Templates/db2xml.xsl'
},
xml2app => {
manager => 'Managers::buildApp',
},
configure => {
manager => 'Managers::buildConfig',
},
};
controller(__managers => $MANAGERS);
$dispatcher = Ambrosia::Dispatcher
->new()
->on_error(sub {
storage->foreach('cancel_transaction');
die "@_";
})
->on_complete(sub {
if ( my $mng = $MANAGERS->{$action || Context->action} )
{
if ( $mng->{template} )
{
my $xml = new Ambrosia::View::XSLT(charset => 'UTF-8', rootName => config()->ID)
->render( $share_dir . $mng->{template}, Context->data);
my $doc = XML::LibXML->load_xml(string => $xml);
my $xmlschema = XML::LibXML::Schema->new( location => $share_dir . '/XSD/AmbrosiaDL.xsd' );
if ( eval { $xmlschema->validate( $doc ); 1; } )
{
if ( open(my $fh, '>', config()->ID . '.xml') )
{
print $fh $xml;
close $fh;
}
else
{
print STDERR "ERROR:$!\n";
}
}
else
{
print STDERR "ERROR:$@\n";#-----------------\n$xml";
}
}
print (Context->repository->get('Message') || "Done.\n");
}
else
{
error($action || Context->action ? 'Unknown manager.' : 'Action not defined.');
}
storage->foreach('save_transaction');
});
}
#CatalogueDB
sub run
{
eval
{
Context->start_session();
Context->repository->set(SHARE_DIR => $share_dir);
print(Context->handler()->usage()->text()), exit if Context->param('help');
$dispatcher->run($action || Context->action);
Context->finish_session();
};
if ($@)
{
error($@);
}
}
sub error
{
my $msg = shift;
logger->error($msg);
}
run();
__END__
=head1 NAME
ambrosia - the script to create project skeleton that implements CRUD.
=head1 VERSION
( run in 0.833 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )