Ambrosia

 view release on metacpan or  search on metacpan

lib/Ambrosia/BaseManager.pm  view on Meta::CPAN

    }
    return $self;
}

sub relegate
{
    controller->__relegate($_[1]);
}

sub reset
{
    if ( $_[1])
    {
        Context->mqueue->clear();
        controller->__relegate($_[1]);
    }
}

sub forward
{
    controller->__relegate($_[1], &FORWARD);
}

sub internal_redirect
{
    if ( $_[1] )
    {
        controller->__relegate($_[1], &INTERNALREDIRECT);
    }
    else
    {
        my ($manager_params, $state) = @{Context->mqueue->first() || []};
        if ( $manager_params )
        {
            if ( $state == &INTERNALREDIRECT )
            {
                Context->mqueue->first()->[1] = &RELEGATE;
                return 1;
            }
        }
        return 0;
    }
}

sub immediate
{#may need to add one more queue in the Context of a higher priority
    my $self = shift;
    return create_object($self->managers->{+shift})->prepare();
}

sub create_object
{
    my $manager_info = controller->__last_manager = shift;

    if ( my $m = $manager_info->{manager} )
    {
        return Ambrosia::core::ClassFactory::create_object($m);
    }
    else
    {
        throw Ambrosia::error::Exception "Manager not defined.";
    }
}

sub _addEWM
{
    my $self  = shift;
    my $level = shift;
    my $msg   = shift;

    return undef unless $msg;

    my $refMsg = ref $msg;

    my $error_h = Context->repository->get('mng_EWM') || {};
    my $log = '';

    if ( $refMsg eq 'Ambrosia::Validator::Violation' )
    {
        push @{$error_h->{$level}}, $msg->errorSummary;
        $log = "ERROR bad request(VALIDATOR): $msg";
    }
    elsif ( $refMsg eq 'Ambrosia::core::Exception::BadParams' )
    {
        push @{$error_h->{$level}}, $msg->message;
        $log = "ERROR bad request(VALIDATOR): " . $msg->message;
    }
    elsif ( $refMsg eq 'ARRAY' )
    {
        foreach my $m ( @$msg )
        {
            $self->_addEWM($level, $m);
        }
        return $msg;
    }
    elsif ( $refMsg eq 'HASH' )
    {
        foreach my $m ( values %$msg )
        {
            $self->_addEWM($level, $m);
        }
        return $msg;
    }
    elsif ( $refMsg )
    {
        $error_h->{error} = ['Internal Error'];
        $log = "ERROR bad request(OTHER): '$refMsg' ==>> '$msg'";
    }
    elsif ( $msg )
    {
        $log = $msg;
        $msg =~ s/ at.*//;
        push @{$error_h->{$level}}, $msg;
    }

    Context->repository->set('mng_EWM' => $error_h);
    carp ('BaseManager::_addEWM: ' . $log) if $log && $level ne 'message';

    return $msg;
}



( run in 0.573 second using v1.01-cache-2.11-cpan-ceb78f64989 )