supply entire client-provided object if discovery doc does not describe structure
authorTom Clegg <tom@clinicalfuture.com>
Fri, 24 May 2013 10:04:27 +0000 (03:04 -0700)
committerTom Clegg <tom@clinicalfuture.com>
Fri, 24 May 2013 10:07:40 +0000 (03:07 -0700)
sdk/perl/lib/Arvados/.#ResourceMethod.pm [new symlink]
sdk/perl/lib/Arvados/ResourceMethod.pm

diff --git a/sdk/perl/lib/Arvados/.#ResourceMethod.pm b/sdk/perl/lib/Arvados/.#ResourceMethod.pm
new file mode 120000 (symlink)
index 0000000..3f35d8b
--- /dev/null
@@ -0,0 +1 @@
+tom@alcan.3337:1369281823
\ No newline at end of file
index 577e4ea47ab29ea6c2305f121876aa48566b4a33..eecc041c65f5fbbf69cb0c8f5eabdc8fe4959b2e 100644 (file)
@@ -40,18 +40,31 @@ sub execute
         elsif ($param->{'type'} eq 'object') {
             my %param_value;
             my ($p, $v);
-            while (($property_name, $property) = each %{$param->{'properties'}}) {
-                if (!exists $given_params{$param_name}->{$property_name}) {
-                    ;
+            if (exists $param->{'properties'}) {
+                while (my ($property_name, $property) =
+                       each %{$param->{'properties'}}) {
+                    # if the discovery doc specifies object structure,
+                    # convert to true/false depending on supplied type
+                    if (!exists $given_params{$param_name}->{$property_name}) {
+                        ;
+                    }
+                    elsif ($given_params{$param_name}->{$property_name} eq undef) {
+                        $param_value{$property_name} = JSON::null;
+                    }
+                    elsif ($property->{'type'} eq 'boolean') {
+                        $param_value{$property_name} = $given_params{$param_name}->{$property_name} ? JSON::true : JSON::false;
+                    }
+                    else {
+                        $param_value{$property_name} = $given_params{$param_name}->{$property_name};
+                    }
                 }
-                elsif ($given_params{$param_name}->{$property_name} eq undef) {
-                    $param_value{$property_name} = JSON::null;
-                }
-                elsif ($property->{'type'} eq 'boolean') {
-                    $param_value{$property_name} = $given_params{$param_name}->{$property_name} ? JSON::true : JSON::false;
-                }
-                else {
-                    $param_value{$property_name} = $given_params{$param_name}->{$property_name};
+            }
+            else {
+                while (my ($property_name, $property) =
+                       each %{$given_params{$param_name}}) {
+                    if (ref $property eq '' || $property eq undef) {
+                        $param_value{$property_name} = $property;
+                    }
                 }
             }
             $body_params{$param_name} = \%param_value;