X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Controller-DBIC-API.git;a=blobdiff_plain;f=lib%2FCatalyst%2FController%2FDBIC%2FAPI.pm;h=0331ad9a66a772106cfe9062d022a3781470df1a;hp=061dbb3d58971e1b456ebd08641e2844e209e93d;hb=d6993542dd4ef970bd0ab87258306ed970cb98c8;hpb=3b12c2cd6893d11ca090fbd599782f0a27979922 diff --git a/lib/Catalyst/Controller/DBIC/API.pm b/lib/Catalyst/Controller/DBIC/API.pm index 061dbb3..0331ad9 100644 --- a/lib/Catalyst/Controller/DBIC/API.pm +++ b/lib/Catalyst/Controller/DBIC/API.pm @@ -15,9 +15,9 @@ use Try::Tiny; use Catalyst::Controller::DBIC::API::Request; use namespace::autoclean; -with 'Catalyst::Controller::DBIC::API::StoredResultSource'; -with 'Catalyst::Controller::DBIC::API::StaticArguments'; -with 'Catalyst::Controller::DBIC::API::RequestArguments' => { static => 1 }; +with 'Catalyst::Controller::DBIC::API::StoredResultSource', + 'Catalyst::Controller::DBIC::API::StaticArguments', + 'Catalyst::Controller::DBIC::API::RequestArguments' => { static => 1 }; __PACKAGE__->config(); @@ -29,24 +29,24 @@ __PACKAGE__->config(); __PACKAGE__->config ( action => { setup => { PathPart => 'artist', Chained => '/api/rpc/rpc_base' } }, # define parent chain action and partpath - class => 'MyAppDB::Artist', # DBIC schema class - create_requires => ['name', 'age'], # columns required to create - create_allows => ['nickname'], # additional non-required columns that create allows - update_allows => ['name', 'age', 'nickname'], # columns that update allows - update_allows => ['name', 'age', 'nickname'], # columns that update allows - select => [qw/name age/], # columns that data returns - prefetch => ['cds'], # relationships that are prefetched when no prefetch param is passed - prefetch_allows => [ # every possible prefetch param allowed + class => 'MyAppDB::Artist', + create_requires => ['name', 'age'], + create_allows => ['nickname'], + update_allows => ['name', 'age', 'nickname'], + update_allows => ['name', 'age', 'nickname'], + select => [qw/name age/], + prefetch => ['cds'], + prefetch_allows => [ 'cds', qw/ cds /, { cds => 'tracks' }, - { cds => [qw/ tracks /] } + { cds => [qw/ tracks /] }, ], - ordered_by => [qw/age/], # order of generated list - search_exposes => [qw/age nickname/, { cds => [qw/title year/] }], # columns that can be searched on via list - data_root => 'data' # defaults to "list" for backwards compatibility - use_json_boolean => 1, # use JSON::Any::true|false in the response instead of strings - return_object => 1, # makes create and update actions return the object + ordered_by => [qw/age/], + search_exposes => [qw/age nickname/, { cds => [qw/title year/] }], + data_root => 'data', + use_json_boolean => 1, + return_object => 1, ); # Provides the following functional endpoints: @@ -734,7 +734,15 @@ sub update_object_from_params { $self->update_object_relation($c, $object, delete $params->{$key}, $key); } - $object->$key($value); + # accessor = colname + elsif ($object->can($key)) { + $object->$key($value); + } + # accessor != colname + else { + my $accessor = $object->result_source->column_info($key)->{accessor}; + $object->$accessor($value); + } } $object->update(); @@ -754,7 +762,19 @@ sub update_object_relation if ($row) { foreach my $key (keys %$related_params) { my $value = $related_params->{$key}; - $row->$key($value); + if (ref($value) && !(reftype($value) eq reftype(JSON::Any::true))) + { + $self->update_object_relation($c, $row, delete $related_params->{$key}, $key); + } + # accessor = colname + elsif ($row->can($key)) { + $row->$key($value); + } + # accessor != colname + else { + my $accessor = $row->result_source->column_info($key)->{accessor}; + $row->$accessor($value); + } } $row->update(); } @@ -872,6 +892,12 @@ sub each_object_inflate return { $object->get_columns }; } +=method_protected serialize + +multiple actions forward to serialize which uses Catalyst::Action::Serialize. + +=cut + # from Catalyst::Action::Serialize sub serialize :ActionClass('Serialize') { } @@ -1037,7 +1063,7 @@ Arguments to pass to L when performing search for L =head3 page -Arguments to pass to L when performing search for L. +Arguments to pass to L when performing search for L. =head1 EXTENDING