Catalyst-Controller-DBIC-API
view release on metacpan or search on metacpan
lib/Catalyst/Controller/DBIC/API.pm view on Meta::CPAN
package Catalyst::Controller::DBIC::API;
$Catalyst::Controller::DBIC::API::VERSION = '2.009000';
#ABSTRACT: Provides a DBIx::Class web service automagically
use Moose;
BEGIN { extends 'Catalyst::Controller'; }
use CGI::Expand ();
use DBIx::Class::ResultClass::HashRefInflator;
use JSON::MaybeXS ();
use Test::Deep::NoTest('eq_deeply');
use MooseX::Types::Moose(':all');
use Moose::Util;
use Scalar::Util( 'blessed', 'reftype' );
use Try::Tiny;
use Catalyst::Controller::DBIC::API::Request;
use DBIx::Class::ResultSet::RecursiveUpdate;
use namespace::autoclean;
has '_json' => (
is => 'ro',
isa => JSON::MaybeXS::JSON(),
lazy_build => 1,
);
sub _build__json {
# no ->utf8 here because the request params get decoded by Catalyst
return JSON::MaybeXS->new;
}
with 'Catalyst::Controller::DBIC::API::StoredResultSource',
'Catalyst::Controller::DBIC::API::StaticArguments';
with 'Catalyst::Controller::DBIC::API::RequestArguments' => { static => 1 };
__PACKAGE__->config();
sub begin : Private {
my ( $self, $c ) = @_;
Moose::Util::ensure_all_roles( $c->req,
'Catalyst::Controller::DBIC::API::Request' );
}
sub setup : Chained('specify.in.subclass.config') : CaptureArgs(0) :
PathPart('specify.in.subclass.config') { }
sub deserialize : Chained('setup') : CaptureArgs(0) : PathPart('') :
ActionClass('Deserialize') {
my ( $self, $c ) = @_;
my $req_params;
if ( $c->req->data && scalar( keys %{ $c->req->data } ) ) {
$req_params = $c->req->data;
}
else {
$req_params = CGI::Expand->expand_hash( $c->req->params );
foreach my $param (
@{ [ $self->search_arg, $self->count_arg,
$self->page_arg, $self->offset_arg,
$self->ordered_by_arg, $self->grouped_by_arg,
$self->prefetch_arg
]
}
)
{
# these params can also be composed of JSON
# but skip if the parameter is not provided
next if not exists $req_params->{$param};
( run in 0.667 second using v1.01-cache-2.11-cpan-39bf76dae61 )