From: Oleg Kostyuk Date: Mon, 6 Dec 2010 23:08:59 +0000 (+0200) Subject: Added possibility to tweak resultset class after searching X-Git-Tag: 2.002004~5 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Controller-DBIC-API.git;a=commitdiff_plain;h=a0a4ed30473fe062a3bf77d433f6ff31dab51be7 Added possibility to tweak resultset class after searching --- diff --git a/lib/Catalyst/Controller/DBIC/API.pm b/lib/Catalyst/Controller/DBIC/API.pm index bfd5024..2753a74 100644 --- a/lib/Catalyst/Controller/DBIC/API.pm +++ b/lib/Catalyst/Controller/DBIC/API.pm @@ -30,6 +30,7 @@ __PACKAGE__->config(); __PACKAGE__->config ( action => { setup => { PathPart => 'artist', Chained => '/api/rpc/rpc_base' } }, # define parent chain action and partpath class => 'MyAppDB::Artist', + result_class => 'MyAppDB::ResultSet::Artist', create_requires => ['name', 'age'], create_allows => ['nickname'], update_allows => ['name', 'age', 'nickname'], @@ -331,7 +332,7 @@ sub object_lookup list's steps are broken up into three distinct methods: L, L, and L. -The goal of this method is to call ->search() on the current_result_set, HashRefInflator the result, and return it in $c->stash->{response}->{$self->data_root}. Please see the individual methods for more details on what actual processing takes place. +The goal of this method is to call ->search() on the current_result_set, change resultset class of the result (if needed), and return it in $c->stash->{response}->{$self->data_root}. Please see the individual methods for more details on what actual processing takes place. If the L config param is defined then the hashes will contain only those columns, otherwise all columns in the object will be returned. L of course supports the function/procedure calling semantics that L. In order to have proper column names in the result, provide arguments in L (which also follows L semantics. Similarly L, L, L and L affect the maximum number of rows returned as well as the ordering and grouping. Note that if select, count, ordered_by or grouped_by request parameters are present then these will override the values set on the class with select becoming bound by the select_exposes attribute. @@ -426,7 +427,7 @@ sub list_format_output my ($self, $c) = @_; my $rs = $c->req->current_result_set->search; - $rs->result_class('DBIx::Class::ResultClass::HashRefInflator'); + $rs->result_class($self->result_class) if $self->result_class; try { @@ -981,6 +982,10 @@ Below are explanations for various configuration parameters. Please see Lmodel to get a resultset for this class. MyAppDB::Track for example. +=head3 resultset_class + +Desired resultset class after accessing your model. MyAppDB::ResultSet::Track for example. By default, it's DBIx::Class::ResultClass::HashRefInflator. Set to empty string to leave resultset class without change. + =head3 data_root By default, the response data is serialized into $c->stash->{response}->{$self->data_root} and data_root defaults to 'list' to preserve backwards compatibility. This is now configuable to meet the needs of the consuming client. diff --git a/lib/Catalyst/Controller/DBIC/API/StoredResultSource.pm b/lib/Catalyst/Controller/DBIC/API/StoredResultSource.pm index dc8859b..5d81b39 100644 --- a/lib/Catalyst/Controller/DBIC/API/StoredResultSource.pm +++ b/lib/Catalyst/Controller/DBIC/API/StoredResultSource.pm @@ -17,6 +17,14 @@ class is the name of the class that is the model for this controller has 'class' => ( is => 'ro', isa => Str, writer => '_set_class' ); +=attribute_public result_class is: ro, isa: Str + +result_class is the name of the resultset class that is the model for this controller + +=cut + +has 'result_class' => ( is => 'ro', isa => Str, default => 'DBIx::Class::ResultClass::HashRefInflator' ); + =attribute_public stored_result_source is: ro, isa: L This is the result source for the controller