From 703586635332421899e9b9ab44b1b900a110bd15 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Fri, 24 May 2013 03:04:27 -0700 Subject: [PATCH] supply entire client-provided object if discovery doc does not describe structure --- sdk/perl/lib/Arvados/.#ResourceMethod.pm | 1 + sdk/perl/lib/Arvados/ResourceMethod.pm | 35 ++++++++++++++++-------- 2 files changed, 25 insertions(+), 11 deletions(-) create mode 120000 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 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; -- 2.30.2