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) = @_;


    # 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(
        $dispatcher->prepare_handler_args($call, $c)

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

no Moose; 1;



=head1 NAME

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


  use Catalyst::Action::JSORB;


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

=head1 BUGS

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.

=head1 AUTHOR

Stevan Little E<lt>stevan.little@iinteractive.comE<gt>


Copyright 2008-2010 Infinity Interactive, Inc.


This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.