[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