X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/fbd62569bca926fc12917eb60eada82a6d8a83b0..a13547aec78a75da2174e083f6015280787cd597:/sdk/perl/lib/Arvados/ResourceMethod.pm diff --git a/sdk/perl/lib/Arvados/ResourceMethod.pm b/sdk/perl/lib/Arvados/ResourceMethod.pm index cfcc34a488..d7e86ffdd8 100644 --- a/sdk/perl/lib/Arvados/ResourceMethod.pm +++ b/sdk/perl/lib/Arvados/ResourceMethod.pm @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 + package Arvados::ResourceMethod; use Carp; use Data::Dumper; @@ -28,16 +32,16 @@ sub execute my %body_params; my %given_params = @_; my %extra_params = %given_params; + my %method_params = %{$method->{'parameters'}}; if ($method->{'request'}->{'properties'}) { - while (my ($prop_name, $prop_value) = - each %{$method->{'request'}->{'properties'}}) { - if (ref($prop_value) eq 'HASH' && $prop_value->{'$ref'}) { - $body_params{$prop_name} = $given_params{$prop_name}; - delete $extra_params{$prop_name}; - } - } + while (my ($prop_name, $prop_value) = + each %{$method->{'request'}->{'properties'}}) { + if (ref($prop_value) eq 'HASH' && $prop_value->{'$ref'}) { + $method_params{$prop_name} = { 'type' => 'object' }; + } + } } - while (my ($param_name, $param) = each %{$method->{'parameters'}}) { + while (my ($param_name, $param) = each %method_params) { delete $extra_params{$param_name}; if ($param->{'required'} && !exists $given_params{$param_name}) { croak("Required parameter not supplied: $param_name"); @@ -76,6 +80,12 @@ sub execute if (ref $property eq '' || $property eq undef) { $param_value{$property_name} = $property; } + elsif (ref $property eq 'HASH') { + $param_value{$property_name} = {}; + while (my ($k, $v) = each %$property) { + $param_value{$property_name}->{$k} = $v; + } + } } } $body_params{$param_name} = \%param_value;