gapic-generator 0.7.5 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +45 -0
- data/lib/gapic/generator/version.rb +1 -1
- data/lib/gapic/generators/default_generator.rb +11 -1
- data/lib/gapic/generators/default_generator_parameters.rb +3 -1
- data/lib/gapic/presenters.rb +2 -0
- data/lib/gapic/presenters/gem_presenter.rb +63 -10
- data/lib/gapic/presenters/method/rest_pagination_info.rb +246 -0
- data/lib/gapic/presenters/method_presenter.rb +21 -2
- data/lib/gapic/presenters/method_rest_presenter.rb +70 -4
- data/lib/gapic/presenters/resource_presenter.rb +8 -0
- data/lib/gapic/presenters/service_config_presenter.rb +48 -0
- data/lib/gapic/presenters/service_presenter.rb +69 -0
- data/lib/gapic/presenters/service_rest_presenter.rb +36 -28
- data/lib/gapic/presenters/snippet_presenter.rb +103 -0
- data/lib/gapic/schema/api.rb +32 -8
- data/lib/gapic/schema/request_param_parser.rb +2 -2
- data/lib/gapic/schema/wrappers.rb +26 -0
- data/templates/default/gem/readme.erb +3 -3
- data/templates/default/lib/rest/_rest.erb +0 -2
- data/templates/default/service/client/_client.erb +18 -20
- data/templates/default/service/client/_config.erb +13 -14
- data/templates/default/service/client/_credentials.erb +2 -0
- data/templates/default/service/client/_operations.erb +1 -1
- data/templates/default/service/client/_paths.erb +1 -1
- data/templates/default/service/client/_self_configure_defaults.erb +2 -2
- data/templates/default/service/client/method/_def.erb +2 -0
- data/templates/default/service/client/method/def/_options_defaults.erb +3 -1
- data/templates/default/service/client/method/docs/_deprecated.erb +5 -0
- data/templates/default/service/client/method/docs/_snippets.erb +6 -0
- data/templates/default/service/rest/client/_client.erb +15 -24
- data/templates/default/service/rest/client/_config.erb +48 -0
- data/templates/default/service/rest/client/method/_def.erb +1 -1
- data/templates/default/service/rest/client/method/def/_options_defaults.erb +7 -3
- data/templates/default/service/rest/client/method/def/_response.erb +6 -0
- data/templates/default/service/rest/client/method/def/_response_normal.erb +4 -15
- data/templates/default/service/rest/client/method/def/_response_paged.erb +7 -0
- data/templates/default/service/rest/client/method/docs/_result.erb +3 -3
- data/templates/default/service/rest/service_stub.erb +6 -0
- data/templates/default/service/rest/service_stub/_service_stub.erb +25 -0
- data/templates/default/service/rest/{grpc_transcoding/method → service_stub/grpc_transcoding_method}/_def.erb +4 -1
- data/templates/default/service/rest/{grpc_transcoding/method → service_stub/grpc_transcoding_method}/def/_query_string_param.erb +0 -0
- data/templates/default/service/rest/service_stub/method/_def.erb +20 -0
- data/templates/default/service/rest/service_stub/method/def/_request.erb +2 -0
- data/templates/default/service/rest/service_stub/method/def/_response.erb +17 -0
- data/templates/default/service/rest/test/client.erb +18 -0
- data/templates/default/service/rest/test/method/_assert_response.erb +2 -0
- data/templates/default/service/rest/test/method/_configure.erb +19 -0
- data/templates/default/service/rest/test/method/_normal.erb +71 -0
- data/templates/default/service/rest/test/method/_setup.erb +38 -0
- data/templates/default/service/test/client_paths.erb +1 -1
- data/templates/default/snippets/gemfile.erb +17 -0
- data/templates/default/snippets/snippet/_structure.erb +71 -0
- data/templates/default/snippets/standalone.erb +6 -0
- metadata +29 -12
- data/templates/default/service/client/_self_configure_retry_policy.erb +0 -15
- data/templates/default/service/rest/client/_requires.erb +0 -1
- data/templates/default/service/rest/grpc_transcoding/_grpc_transcoding.erb +0 -9
@@ -0,0 +1,103 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2021 Google LLC
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require "active_support/inflector"
|
18
|
+
|
19
|
+
module Gapic
|
20
|
+
module Presenters
|
21
|
+
##
|
22
|
+
# A presenter for snippets.
|
23
|
+
#
|
24
|
+
class SnippetPresenter
|
25
|
+
def initialize method_presenter, api
|
26
|
+
@method_presenter = method_presenter
|
27
|
+
@api = api
|
28
|
+
end
|
29
|
+
|
30
|
+
def client_streaming?
|
31
|
+
@method_presenter.client_streaming?
|
32
|
+
end
|
33
|
+
|
34
|
+
def bidi_streaming?
|
35
|
+
@method_presenter.client_streaming? && @method_presenter.server_streaming?
|
36
|
+
end
|
37
|
+
|
38
|
+
def response_kind
|
39
|
+
if @method_presenter.server_streaming?
|
40
|
+
:streaming
|
41
|
+
elsif @method_presenter.paged?
|
42
|
+
:paged
|
43
|
+
elsif @method_presenter.lro?
|
44
|
+
:lro
|
45
|
+
else
|
46
|
+
:simple
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def snippet_file_path
|
51
|
+
"#{@method_presenter.service.service_require.split('/').last}/#{@method_presenter.name}.rb"
|
52
|
+
end
|
53
|
+
|
54
|
+
def require_path
|
55
|
+
@method_presenter.service.package.package_require
|
56
|
+
end
|
57
|
+
|
58
|
+
def client_type
|
59
|
+
@method_presenter.service.client_name_full.sub(/^::/, "")
|
60
|
+
end
|
61
|
+
|
62
|
+
def request_type
|
63
|
+
@method_presenter.request_type.sub(/^::/, "")
|
64
|
+
end
|
65
|
+
|
66
|
+
def return_type
|
67
|
+
base_type = @method_presenter.return_type.sub(/^::/, "")
|
68
|
+
@method_presenter.server_streaming? ? "Enumerable<#{base_type}>" : base_type
|
69
|
+
end
|
70
|
+
|
71
|
+
def paged_response_type
|
72
|
+
@method_presenter.paged_response_type
|
73
|
+
end
|
74
|
+
|
75
|
+
def base_response_type
|
76
|
+
@method_presenter.return_type
|
77
|
+
end
|
78
|
+
|
79
|
+
# TODO: Determine type of LRO response
|
80
|
+
|
81
|
+
def method_name
|
82
|
+
@method_presenter.name
|
83
|
+
end
|
84
|
+
|
85
|
+
def region_tag
|
86
|
+
gem_presenter = @method_presenter.service.gem
|
87
|
+
api_id = gem_presenter.api_shortname || gem_presenter.api_id&.split(".")&.first
|
88
|
+
names = gem_presenter.name.split "-"
|
89
|
+
final_name = names.pop
|
90
|
+
if final_name =~ /^v\d/
|
91
|
+
api_version = final_name
|
92
|
+
api_id ||= names.last
|
93
|
+
else
|
94
|
+
api_id ||= final_name
|
95
|
+
api_version = "v0"
|
96
|
+
end
|
97
|
+
service_name = @method_presenter.service.module_name
|
98
|
+
method_name = @method_presenter.method.name
|
99
|
+
"#{api_id}_#{api_version}_generated_#{service_name}_#{method_name}_sync"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
data/lib/gapic/schema/api.rb
CHANGED
@@ -89,6 +89,10 @@ module Gapic
|
|
89
89
|
matching_files.first
|
90
90
|
end
|
91
91
|
|
92
|
+
def overrides_of key
|
93
|
+
configuration&.fetch(:overrides, nil)&.fetch(key, nil) || {}
|
94
|
+
end
|
95
|
+
|
92
96
|
def fix_file_path str
|
93
97
|
str = String str
|
94
98
|
return str if configuration[:overrides].nil?
|
@@ -241,6 +245,16 @@ module Gapic
|
|
241
245
|
configuration[:transports].include? "grpc"
|
242
246
|
end
|
243
247
|
|
248
|
+
# Whether to generate standalone snippets
|
249
|
+
def generate_standalone_snippets?
|
250
|
+
configuration[:generate_standalone_snippets] ||= false
|
251
|
+
end
|
252
|
+
|
253
|
+
# Whether to generate inline documentation snippets
|
254
|
+
def generate_yardoc_snippets?
|
255
|
+
configuration[:generate_yardoc_snippets] ||= false
|
256
|
+
end
|
257
|
+
|
244
258
|
# Whether to generate gapic metadata (drift manifest) file
|
245
259
|
# @return [Boolean]
|
246
260
|
def generate_metadata
|
@@ -314,10 +328,15 @@ module Gapic
|
|
314
328
|
|
315
329
|
##
|
316
330
|
# An override for the wrapper gem name in the configuration
|
317
|
-
# @return [String,
|
331
|
+
# @return [String, nil]
|
318
332
|
def wrapper_gem_name_override
|
319
333
|
return nil unless wrapper_gem_name_override?
|
320
|
-
configuration[:overrides][:wrapper_gem_name]
|
334
|
+
return nil if configuration[:overrides][:wrapper_gem_name].nil?
|
335
|
+
|
336
|
+
wrapper_name_config = configuration[:overrides][:wrapper_gem_name].strip
|
337
|
+
return nil if wrapper_name_config.empty?
|
338
|
+
|
339
|
+
wrapper_name_config
|
321
340
|
end
|
322
341
|
|
323
342
|
private
|
@@ -340,9 +359,14 @@ module Gapic
|
|
340
359
|
# * A mapping from resource type to resource wrapper is returned.
|
341
360
|
def analyze_resources
|
342
361
|
# In order to set parent_resources, we first populate a mapping from
|
343
|
-
# parsed pattern to
|
344
|
-
#
|
345
|
-
#
|
362
|
+
# parsed pattern to resources that use it (in the patterns variable).
|
363
|
+
# Note that there may be multiple resources associated with a pattern.
|
364
|
+
# (This is uncommon, but one example is monitoring v3 which uses
|
365
|
+
# "projects/*" for its workspace type as well as inheriting the common
|
366
|
+
# project type. We thus map each pattern to an array of resources.)
|
367
|
+
# Constructing the patterns mapping is done in one pass along with
|
368
|
+
# populating the type mapping (which maps only to single resources.)
|
369
|
+
# Then, we go through all resources again, get each's expected parent
|
346
370
|
# patterns, and anything that shows up in the patterns mapping is taken
|
347
371
|
# to be a parent.
|
348
372
|
types = {}
|
@@ -353,8 +377,8 @@ module Gapic
|
|
353
377
|
end
|
354
378
|
types.each do |_type, resource|
|
355
379
|
parents = resource.parsed_parent_patterns
|
356
|
-
.
|
357
|
-
.
|
380
|
+
.flat_map { |pat| Array(patterns[pat]) }
|
381
|
+
.uniq
|
358
382
|
resource.parent_resources.replace parents
|
359
383
|
end
|
360
384
|
types
|
@@ -363,7 +387,7 @@ module Gapic
|
|
363
387
|
def populate_resource_lookups resource, types, patterns
|
364
388
|
types[resource.type] = resource
|
365
389
|
resource.parsed_patterns.each do |pat|
|
366
|
-
patterns[pat]
|
390
|
+
((patterns[pat] ||= []) << resource).uniq!
|
367
391
|
end
|
368
392
|
end
|
369
393
|
|
@@ -75,7 +75,7 @@ module Gapic
|
|
75
75
|
error_output
|
76
76
|
)
|
77
77
|
|
78
|
-
|
78
|
+
unless param_value.nil?
|
79
79
|
RequestParameter.new param_val_input_str, param_name_input_esc, value_str, param_config_name, param_value
|
80
80
|
end
|
81
81
|
end.compact # known bool parameters with invalid values will not be added so we have to compact
|
@@ -148,7 +148,7 @@ module Gapic
|
|
148
148
|
when :bool
|
149
149
|
# bools should be either `true` or `false`
|
150
150
|
unesc_val = unescape value_str
|
151
|
-
unesc_val if ["true", "false"].include? unesc_val
|
151
|
+
(unesc_val == "true") if ["true", "false"].include? unesc_val
|
152
152
|
else
|
153
153
|
# if it's an unknown type, just escape it without attempting to parse anything
|
154
154
|
unescape value_str
|
@@ -268,6 +268,12 @@ module Gapic
|
|
268
268
|
parent.ruby_package
|
269
269
|
end
|
270
270
|
|
271
|
+
# @return [Boolean] True if this service is marked as deprecated, false
|
272
|
+
# otherwise.
|
273
|
+
def is_deprecated?
|
274
|
+
options[:deprecated] if options
|
275
|
+
end
|
276
|
+
|
271
277
|
# @return [Array<Google::Api::ResourceDescriptor>] A representation of the resource.
|
272
278
|
# This is generally intended to be attached to the "name" field.
|
273
279
|
# See `google/api/resource.proto`.
|
@@ -336,6 +342,12 @@ module Gapic
|
|
336
342
|
options[:".google.longrunning.operation_info"] if options
|
337
343
|
end
|
338
344
|
|
345
|
+
# @return [Boolean] True if this method is marked as deprecated, false
|
346
|
+
# otherwise.
|
347
|
+
def is_deprecated?
|
348
|
+
options[:deprecated] if options
|
349
|
+
end
|
350
|
+
|
339
351
|
# @return [Google::Api::HttpRule] The HTTP bindings for this method. See
|
340
352
|
# `google/api/http.proto`.
|
341
353
|
def http
|
@@ -641,6 +653,20 @@ module Gapic
|
|
641
653
|
false
|
642
654
|
end
|
643
655
|
|
656
|
+
# @return [Field, nil] a key field for this map
|
657
|
+
# or nil if this field is not a map
|
658
|
+
def map_key_field
|
659
|
+
return nil? unless map?
|
660
|
+
@message.fields.find { |f| f.name == "key" }
|
661
|
+
end
|
662
|
+
|
663
|
+
# @return [Field, nil] a value field for this map
|
664
|
+
# or nil if this field is not a map
|
665
|
+
def map_val_field
|
666
|
+
return nil? unless map?
|
667
|
+
@message.fields.find { |f| f.name == "value" }
|
668
|
+
end
|
669
|
+
|
644
670
|
# @return [String] A reference to another resource message or resource
|
645
671
|
# definition. See `google/api/resource.proto`.
|
646
672
|
def resource_reference
|
@@ -16,12 +16,12 @@ $ gem install <%= gem.name %>
|
|
16
16
|
|
17
17
|
```ruby
|
18
18
|
require "<%= gem.entrypoint_require %>"
|
19
|
-
<%- service = gem.
|
20
|
-
<%- method = service&.
|
19
|
+
<%- service = gem.quick_start_service -%>
|
20
|
+
<%- method = service&.quick_start_method -%>
|
21
21
|
<%- if service && method -%>
|
22
22
|
|
23
23
|
client = <%= service.create_client_call %>
|
24
|
-
request =
|
24
|
+
request = <%= method.request_type %>.new # (request fields as keyword arguments...)
|
25
25
|
response = client.<%= method.name %> request
|
26
26
|
<%- end -%>
|
27
27
|
```
|
@@ -23,14 +23,17 @@ class <%= service.client_name %>
|
|
23
23
|
#
|
24
24
|
# See {<%= service.client_name_full %>::Configuration}
|
25
25
|
# for a description of the configuration fields.
|
26
|
+
<%- if service.is_deprecated? -%>
|
26
27
|
#
|
27
|
-
#
|
28
|
+
# @deprecated This service is deprecated and may be removed in the next major version update.
|
29
|
+
<%- end -%>
|
28
30
|
#
|
29
|
-
#
|
31
|
+
# @example
|
30
32
|
#
|
31
|
-
#
|
32
|
-
#
|
33
|
-
#
|
33
|
+
# # Modify the configuration for all <%= service.name %> clients
|
34
|
+
# <%= service.client_name_full %>.configure do |config|
|
35
|
+
# config.timeout = 10.0
|
36
|
+
# end
|
34
37
|
#
|
35
38
|
# @yield [config] Configure the <%= service.client_name %> client.
|
36
39
|
# @yieldparam config [<%= service.client_name %>::Configuration]
|
@@ -64,19 +67,15 @@ class <%= service.client_name %>
|
|
64
67
|
##
|
65
68
|
# Create a new <%= service.name %> client object.
|
66
69
|
#
|
67
|
-
#
|
68
|
-
#
|
69
|
-
# To create a new <%= service.name %> client with the default
|
70
|
-
# configuration:
|
71
|
-
#
|
72
|
-
# client = <%= service.client_name_full %>.new
|
70
|
+
# @example
|
73
71
|
#
|
74
|
-
#
|
75
|
-
#
|
72
|
+
# # Create a client using the default configuration
|
73
|
+
# client = <%= service.client_name_full %>.new
|
76
74
|
#
|
77
|
-
#
|
78
|
-
#
|
79
|
-
#
|
75
|
+
# # Create a client using a custom configuration
|
76
|
+
# client = <%= service.client_name_full %>.new do |config|
|
77
|
+
# config.timeout = 10.0
|
78
|
+
# end
|
80
79
|
#
|
81
80
|
# @yield [config] Configure the <%= service.name %> client.
|
82
81
|
# @yieldparam config [<%= service.client_name %>::Configuration]
|
@@ -97,14 +96,13 @@ class <%= service.client_name %>
|
|
97
96
|
# Create credentials
|
98
97
|
credentials = @config.credentials
|
99
98
|
<%- unless service.generic_endpoint? -%>
|
100
|
-
# Use self-signed JWT if the
|
99
|
+
# Use self-signed JWT if the endpoint is unchanged from default,
|
101
100
|
# but only if the default endpoint does not have a region prefix.
|
102
|
-
enable_self_signed_jwt = @config.
|
103
|
-
@config.endpoint == <%= service.client_name %>.configure.endpoint &&
|
101
|
+
enable_self_signed_jwt = @config.endpoint == <%= service.client_name %>.configure.endpoint &&
|
104
102
|
!@config.endpoint.split(".").first.include?("-")
|
105
103
|
credentials ||= Credentials.default scope: @config.scope,
|
106
104
|
enable_self_signed_jwt: enable_self_signed_jwt
|
107
|
-
if credentials.is_a?(String) || credentials.is_a?(Hash)
|
105
|
+
if credentials.is_a?(::String) || credentials.is_a?(::Hash)
|
108
106
|
credentials = Credentials.new credentials, scope: @config.scope
|
109
107
|
end
|
110
108
|
<%- end -%>
|
@@ -14,22 +14,21 @@
|
|
14
14
|
# on construction.
|
15
15
|
#
|
16
16
|
<%- unless method_service.methods.empty? -%>
|
17
|
-
#
|
17
|
+
# @example
|
18
18
|
#
|
19
|
-
#
|
20
|
-
#
|
19
|
+
# # Modify the global config, setting the timeout for
|
20
|
+
# # <%= method_service.methods.first.name %> to 20 seconds,
|
21
|
+
# # and all remaining timeouts to 10 seconds.
|
22
|
+
# <%= service.client_name_full %>.configure do |config|
|
23
|
+
# config.timeout = 10.0
|
24
|
+
# config.rpcs.<%= method_service.methods.first.name %>.timeout = 20.0
|
25
|
+
# end
|
21
26
|
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
# To apply the above configuration only to a new client:
|
28
|
-
#
|
29
|
-
# client = <%= service.client_name_full %>.new do |config|
|
30
|
-
# config.timeout = 10.0
|
31
|
-
# config.rpcs.<%= method_service.methods.first.name %>.timeout = 20.0
|
32
|
-
# end
|
27
|
+
# # Apply the above configuration only to a new client.
|
28
|
+
# client = <%= service.client_name_full %>.new do |config|
|
29
|
+
# config.timeout = 10.0
|
30
|
+
# config.rpcs.<%= method_service.methods.first.name %>.timeout = 20.0
|
31
|
+
# end
|
33
32
|
#
|
34
33
|
<%- end -%>
|
35
34
|
# @!attribute [rw] endpoint
|
@@ -12,10 +12,12 @@ class <%= service.credentials_name %> < ::Google::Auth::Credentials
|
|
12
12
|
<%- end -%>
|
13
13
|
]
|
14
14
|
<%- end -%>
|
15
|
+
<%- if service.gem.env_prefix -%>
|
15
16
|
self.env_vars = [
|
16
17
|
"<%= service.gem.env_prefix %>_CREDENTIALS",
|
17
18
|
"<%= service.gem.env_prefix %>_KEYFILE",
|
18
19
|
"<%= service.gem.env_prefix %>_CREDENTIALS_JSON",
|
19
20
|
"<%= service.gem.env_prefix %>_KEYFILE_JSON"
|
20
21
|
]
|
22
|
+
<%- end -%>
|
21
23
|
end
|
@@ -61,7 +61,7 @@ class <%= service.operations_name %>
|
|
61
61
|
# Create credentials
|
62
62
|
credentials = @config.credentials
|
63
63
|
credentials ||= Credentials.default scope: @config.scope
|
64
|
-
if credentials.is_a?(String) || credentials.is_a?(Hash)
|
64
|
+
if credentials.is_a?(::String) || credentials.is_a?(::Hash)
|
65
65
|
credentials = Credentials.new credentials, scope: @config.scope
|
66
66
|
end
|
67
67
|
@quota_project_id = @config.quota_project
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<%- assert_locals service -%>
|
2
2
|
# Path helper methods for the <%= service.name %> API.
|
3
3
|
module Paths
|
4
|
-
<%- service.
|
4
|
+
<%- service.deduped_references.each do |resource| -%>
|
5
5
|
<%= indent render(partial: "service/client/resource", locals: { resource: resource }), 2 %>
|
6
6
|
|
7
7
|
<%- end %>
|
@@ -6,7 +6,7 @@
|
|
6
6
|
default_config.timeout = <%= format_number service.grpc_service_config.timeout_seconds %>
|
7
7
|
<%- end -%>
|
8
8
|
<%- if service.grpc_service_config.retry_policy -%>
|
9
|
-
default_config.retry_policy = <%= indent_tail
|
9
|
+
default_config.retry_policy = <%= indent_tail service.service_config_presenter.retry_policy_fields, 2 %>
|
10
10
|
<%- end -%>
|
11
11
|
<%- end -%>
|
12
12
|
<%- method_service.methods.each do |method| -%>
|
@@ -16,7 +16,7 @@
|
|
16
16
|
default_config.rpcs.<%= method.name %>.timeout = <%= format_number method.grpc_service_config.timeout_seconds %>
|
17
17
|
<%- end -%>
|
18
18
|
<%- if method.grpc_service_config.retry_policy -%>
|
19
|
-
default_config.rpcs.<%= method.name %>.retry_policy =<%= indent_tail
|
19
|
+
default_config.rpcs.<%= method.name %>.retry_policy =<%= indent_tail method.service_config_presenter.retry_policy_fields, 2 %>
|
20
20
|
<%- end -%>
|
21
21
|
<%- end -%>
|
22
22
|
<%- end -%>
|
@@ -4,12 +4,14 @@
|
|
4
4
|
<%= indent method.doc_description, "# " %>
|
5
5
|
#
|
6
6
|
<%- end -%>
|
7
|
+
<%= render partial: "service/client/method/docs/deprecated", locals: { method: method } -%>
|
7
8
|
<%= render partial: "service/client/method/docs/request", locals: { method: method } -%>
|
8
9
|
#
|
9
10
|
<%= render partial: "service/client/method/docs/response", locals: { method: method } -%>
|
10
11
|
#
|
11
12
|
<%= render partial: "service/client/method/docs/error", locals: { method: method } -%>
|
12
13
|
#
|
14
|
+
<%= render partial: "service/client/method/docs/snippets", locals: { method: method } -%>
|
13
15
|
<%= render partial: "service/client/method/docs/samples", locals: { method: method } -%>
|
14
16
|
def <%= method.name %> request, options = nil
|
15
17
|
<%= indent render(partial: "service/client/method/def/request", locals: { method: method }), 2 %>
|