From: Tom Clegg Date: Fri, 24 May 2013 10:04:27 +0000 (-0700) Subject: supply entire client-provided object if discovery doc does not describe structure X-Git-Tag: 1.1.0~3295 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/703586635332421899e9b9ab44b1b900a110bd15 supply entire client-provided object if discovery doc does not describe structure --- diff --git a/sdk/perl/lib/Arvados/.#ResourceMethod.pm b/sdk/perl/lib/Arvados/.#ResourceMethod.pm new file mode 120000 index 0000000000..3f35d8b367 --- /dev/null +++ b/sdk/perl/lib/Arvados/.#ResourceMethod.pm @@ -0,0 +1 @@ +tom@alcan.3337:1369281823 \ No newline at end of file diff --git a/sdk/perl/lib/Arvados/ResourceMethod.pm b/sdk/perl/lib/Arvados/ResourceMethod.pm index 577e4ea47a..eecc041c65 100644 --- a/sdk/perl/lib/Arvados/ResourceMethod.pm +++ b/sdk/perl/lib/Arvados/ResourceMethod.pm @@ -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;