Catalyst::Action::JSORB::WithInvocant - Catalyst Action for JSORB Dispatcher


JSORB documentation Contained in the JSORB distribution.

Index


Code Index:

NAME

Top

Catalyst::Action::JSORB::WithInvocant - Catalyst Action for JSORB Dispatcher

SYNOPSIS

Top

  use Catalyst::Action::JSORB;

DESCRIPTION

Top

This is very similar to Catalyst::Action::JSORB but with a few extra features to better handle dispatching to object instances.

BUGS

Top

All complex software has bugs lurking in it, and this module is no exception. If you find a bug please either email me, or add the bug to cpan-RT.

AUTHOR

Top

Stevan Little <stevan.little@iinteractive.com>

COPYRIGHT AND LICENSE

Top


JSORB documentation Contained in the JSORB distribution.

package Catalyst::Action::JSORB::WithInvocant;
use Moose;

our $VERSION   = '0.04';
our $AUTHORITY = 'cpan:STEVAN';

use JSORB;
use JSON::RPC::Common::Marshal::HTTP;

extends 'Catalyst::Action';

sub execute {
    my $self = shift;
    my ($controller, $c) = @_;

    $self->NEXT::execute(@_);

    # try local, but if none exists, use global
    my $dispatcher = $controller->config->{'Action::JSORB'} || $c->config->{'Action::JSORB'};

    (blessed $dispatcher && $dispatcher->isa('JSORB::Dispatcher::Catalyst::WithInvocant'))
        || confess "Bad dispatcher - $dispatcher (must inherit JSORB::Dispatcher::Catalyst::WithInvocant)";

    my $marshaler = JSON::RPC::Common::Marshal::HTTP->new;
    my $call      = $marshaler->request_to_call($c->request);
    my $result    = $dispatcher->handler(
        $call,
        $dispatcher->prepare_handler_args($call, $c)
    );

    $marshaler->write_result_to_response($result, $c->response);
}

no Moose; 1;

__END__