[Catalyst-commits] r12540 - in
Catalyst-Controller-DBIC-API/1.004/trunk: .
lib/Catalyst/Controller/DBIC/API t/rpc
abraxxa at dev.catalyst.perl.org
abraxxa at dev.catalyst.perl.org
Thu Jan 7 18:24:02 GMT 2010
Author: abraxxa
Date: 2010-01-07 18:24:02 +0000 (Thu, 07 Jan 2010)
New Revision: 12540
Modified:
Catalyst-Controller-DBIC-API/1.004/trunk/Changes
Catalyst-Controller-DBIC-API/1.004/trunk/lib/Catalyst/Controller/DBIC/API/Base.pm
Catalyst-Controller-DBIC-API/1.004/trunk/t/rpc/list_json_search.t
Log:
CGI::Expand'ed search parameters are now also JSON decoded + test
Modified: Catalyst-Controller-DBIC-API/1.004/trunk/Changes
===================================================================
--- Catalyst-Controller-DBIC-API/1.004/trunk/Changes 2010-01-07 00:04:45 UTC (rev 12539)
+++ Catalyst-Controller-DBIC-API/1.004/trunk/Changes 2010-01-07 18:24:02 UTC (rev 12540)
@@ -2,6 +2,7 @@
1.004002
- Implement 'as' as a complement to 'select'
+- CGI::Expand'ed search parameters are now also JSON decoded + test
1.004001
- Allow for more complex prefetch_allows (multiple keys in hash)
Modified: Catalyst-Controller-DBIC-API/1.004/trunk/lib/Catalyst/Controller/DBIC/API/Base.pm
===================================================================
--- Catalyst-Controller-DBIC-API/1.004/trunk/lib/Catalyst/Controller/DBIC/API/Base.pm 2010-01-07 00:04:45 UTC (rev 12539)
+++ Catalyst-Controller-DBIC-API/1.004/trunk/lib/Catalyst/Controller/DBIC/API/Base.pm 2010-01-07 18:24:02 UTC (rev 12540)
@@ -55,12 +55,27 @@
# these params can also be composed of JSON
# but skip if the parameter is not provided
next if not exists $req_params->{$param};
- try
- {
- my $deserialized = JSON::Any->from_json($req_params->{$param});
- $req_params->{$param} = $deserialized;
+ # find out if CGI::Expand was involved
+ if (ref $req_params->{$param} eq 'HASH') {
+ for my $key ( keys %{$req_params->{$param}} ) {
+ try {
+ my $deserialized = JSON::Any->from_json($req_params->{$param}->{$key});
+ $req_params->{$param}->{$key} = $deserialized;
+ }
+ catch { $c->log->debug("Param '$param.$key' did not deserialize appropriately: $_")
+ if $c->debug;
+ }
+ }
}
- catch { $c->log->debug("Param '$param' did not deserialize appropriately: $_") if $c->debug }
+ else {
+ try {
+ my $deserialized = JSON::Any->from_json($req_params->{$param});
+ $req_params->{$param} = $deserialized;
+ }
+ catch { $c->log->debug("Param '$param' did not deserialize appropriately: $_")
+ if $c->debug;
+ }
+ }
}
}
Modified: Catalyst-Controller-DBIC-API/1.004/trunk/t/rpc/list_json_search.t
===================================================================
--- Catalyst-Controller-DBIC-API/1.004/trunk/t/rpc/list_json_search.t 2010-01-07 00:04:45 UTC (rev 12539)
+++ Catalyst-Controller-DBIC-API/1.004/trunk/t/rpc/list_json_search.t 2010-01-07 18:24:02 UTC (rev 12540)
@@ -55,4 +55,16 @@
is_deeply( { list => \@expected_response, success => 'true' }, $response, 'correct data returned for complex query' );
}
+{
+ my $uri = URI->new( $artist_list_url );
+ $uri->query_form({ 'search.name' => '{"LIKE":"%waul%"}' });
+ my $req = GET( $uri, 'Accept' => 'text/x-json' );
+ $mech->request($req);
+ cmp_ok( $mech->status, '==', 200, 'attempt with mixed CGI::Expand + JSON search okay' );
+
+ my @expected_response = map { { $_->get_columns } } $schema->resultset('Artist')->search({ name => { LIKE => '%waul%' }})->all;
+ my $response = JSON::Syck::Load( $mech->content);
+ is_deeply( { list => \@expected_response, success => 'true' }, $response, 'correct data returned for complex query' );
+}
+
done_testing();
More information about the Catalyst-commits
mailing list