Look in method[request][properties][$ref] for resource object
[arvados.git] / sdk / perl / lib / Arvados / ResourceMethod.pm
index 76c1ac86910844ab8a409b8ab10b4486585d76dc..cfcc34a4882cc530dff8f9dd3f2959918f6482c3 100644 (file)
@@ -28,6 +28,15 @@ sub execute
     my %body_params;
     my %given_params = @_;
     my %extra_params = %given_params;
+    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 ($param_name, $param) = each %{$method->{'parameters'}}) {
         delete $extra_params{$param_name};
         if ($param->{'required'} && !exists $given_params{$param_name}) {
@@ -80,7 +89,9 @@ sub execute
         croak("Unsupported parameter(s) passed to API call /$path: \"" . join('", "', keys %extra_params) . '"');
     }
     my $r = $self->{'resourceAccessor'}->{'api'}->new_request;
-    $r->set_uri($self->{'resourceAccessor'}->{'api'}->{'discoveryDocument'}->{'baseUrl'} . "/" . $path);
+    my $base_uri = $self->{'resourceAccessor'}->{'api'}->{'discoveryDocument'}->{'baseUrl'};
+    $base_uri =~ s:/$::;
+    $r->set_uri($base_uri . "/" . $path);
     $r->set_method($method->{'httpMethod'});
     $r->set_auth_token($self->{'resourceAccessor'}->{'api'}->{'authToken'});
     $r->set_query_params(\%body_params) if %body_params;