Ambrosia
view release on metacpan or search on metacpan
lib/Ambrosia/Context.pm view on Meta::CPAN
package Ambrosia::Context;
use strict;
use warnings;
use Ambrosia::Assert;
use Ambrosia::error::Exceptions;
use Ambrosia::DataProvider;
use Ambrosia::QL;
use Ambrosia::Utils::Container;
use Ambrosia::Utils::Queue;
use Ambrosia::Event qw/on_start on_abort on_finish/;
use Ambrosia::Meta;
class sealed {
extends => [qw/Exporter/],
public => [qw/repository mqueue response_type resource_type resource_id method proxy/],
private => [qw/__error __cgi/],
};
our $VERSION = 0.010;
our @EXPORT = qw/Context/;
sub new : Private
{
}
{
my $_CONTEXT;
sub instance
{
unless ( $_CONTEXT )
{
my $package = shift;
my %params = @_ == 1 ? %{$_[0]} : @_;
assert {$params{engine_name}} 'Context must instance before first call "Context" or you not set "engine_name" in params.';
#throw Ambrosia::error::Exception::BadUsage('Context must instance before first call "Context"') unless $params{engine_name};
my ($engine_name,$engine_params) = @params{qw/engine_name engine_params/};
delete @params{qw/engine_name engine_params/};
my $cgi = Ambrosia::core::ClassFactory::create_object(
'Ambrosia::CommonGatewayInterface::' . $engine_name, $engine_params);
$_CONTEXT = $package->SUPER::new(__cgi => $cgi, %params);
}
return $_CONTEXT;
}
sub destroy
{
undef $_CONTEXT;
}
sub Context
{
no warnings;
return __PACKAGE__->instance();
}
}
sub start_session
{
my $self = shift;
$self->repository = new Ambrosia::Utils::Container;
$self->mqueue = new Ambrosia::Utils::Queue;
$self->init_request_params;
$self->publicEvent('on_start');
}
sub abort_session
{
my $self = shift;
$self->repository = undef;
$self->mqueue = undef;
$self->__cgi->abort();
$self->publicEvent( on_abort => $self->error() );
}
sub finish_session
{
my $self = shift;
$self->repository = undef;
$self->mqueue = undef;
$self->__cgi->close();
$self->publicEvent( 'on_finish' );
}
sub print_response_header
{
print shift()->__cgi->output_data(@_);
}
sub redirect
{
my $self = shift;
$self->__cgi->SET_REDIRECT();
$self->__cgi->output_data(@_);
}
#TODO!!
sub handler
{
$_[0]->__cgi->handler();
}
( run in 1.932 second using v1.01-cache-2.11-cpan-364913b4093 )