gapic-generator 0.3.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +34 -0
- data/lib/gapic/formatting_utils.rb +7 -7
- data/lib/gapic/generator/version.rb +1 -1
- data/lib/gapic/generators/default_generator.rb +16 -14
- data/lib/gapic/helpers/filepath_helper.rb +1 -0
- data/lib/gapic/helpers/namespace_helper.rb +8 -1
- data/lib/gapic/path_template/segment.rb +7 -0
- data/lib/gapic/presenters/field_presenter.rb +9 -9
- data/lib/gapic/presenters/file_presenter.rb +1 -1
- data/lib/gapic/presenters/gem_presenter.rb +28 -2
- data/lib/gapic/presenters/method_presenter.rb +23 -17
- data/lib/gapic/presenters/package_presenter.rb +11 -3
- data/lib/gapic/presenters/resource_presenter.rb +55 -35
- data/lib/gapic/presenters/service_presenter.rb +66 -23
- data/lib/gapic/ruby_info.rb +93 -0
- data/lib/gapic/schema/api.rb +63 -1
- data/templates/default/gem/gemfile.erb +3 -0
- data/templates/default/gem/gemspec.erb +7 -6
- data/templates/default/gem/rakefile.erb +1 -0
- data/templates/default/gem/test_helper.erb +8 -0
- data/templates/default/layouts/_ruby.erb +5 -4
- data/templates/default/lib/_service.erb +2 -0
- data/templates/default/proto_docs/_message.erb +2 -2
- data/templates/default/service/client.erb +1 -1
- data/templates/default/service/client/_client.erb +17 -4
- data/templates/default/service/client/_config.erb +33 -29
- data/templates/default/service/client/_credentials.erb +1 -1
- data/templates/default/service/client/_operations.erb +3 -1
- data/templates/default/service/client/method/def/_options_defaults.erb +2 -2
- data/templates/default/service/client/method/def/_request_normal.erb +2 -2
- data/templates/default/service/client/method/def/_request_streaming.erb +3 -3
- data/templates/default/service/client/method/def/_response_normal.erb +1 -1
- data/templates/default/service/client/method/def/_response_paged.erb +2 -2
- data/templates/default/service/client/method/docs/_error.erb +1 -1
- data/templates/default/service/client/method/docs/_request_normal.erb +2 -2
- data/templates/default/service/client/method/docs/_request_streaming.erb +2 -2
- data/templates/default/service/client/method/docs/_response.erb +1 -1
- data/templates/default/service/client/resource/_def.erb +1 -1
- data/templates/default/service/client/resource/_multi.erb +4 -7
- data/templates/default/service/client/resource/_single.erb +2 -3
- data/templates/default/service/credentials.erb +1 -1
- data/templates/default/service/operations.erb +1 -1
- data/templates/default/service/paths.erb +1 -1
- data/templates/default/service/test/_resource.erb +16 -0
- data/templates/default/service/test/client.erb +17 -4
- data/templates/default/service/test/client_operations.erb +3 -4
- data/templates/default/service/test/client_paths.erb +17 -0
- data/templates/default/service/test/method/_configure.erb +19 -0
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19f79c05f4e657a010e8f9663f1eefeadabd18ef4b456c137a8278bf8bb13a9e
|
4
|
+
data.tar.gz: ebe4c8c756ebd1e18424eccffc986f92bcda6f694a50842ed394c7d62d91f252
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a6689a12fcd02390d416ab8ada828f79e182e87a3230361fe32e3a8eea42d7555039b61c699903d25a5fb244c9db1857bbad1d816ea04e4de329d67c4359c74
|
7
|
+
data.tar.gz: fac5801f38bb3fd92b871c2c5ab9b2d7ee7138d0947ffb0c9695bd21ea0561762fee5dc462de884b5182cbf4627c5c9148783474584b6cb4c9dc7727313f7f1c
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,39 @@
|
|
1
1
|
# Release History for gapic-generator
|
2
2
|
|
3
|
+
### 0.6.0 / 2020-06-02
|
4
|
+
|
5
|
+
* Support for clients with generic endpoint and credentials.
|
6
|
+
* Support for adding extra dependencies.
|
7
|
+
* Fixed a Ruby warning when looking up RPC-scoped configs with no parent.
|
8
|
+
* Internal: Presenters reference their parent rather than creating new objects.
|
9
|
+
|
10
|
+
### 0.5.1 / 2020-05-21
|
11
|
+
|
12
|
+
* Support a configuration for overriding service module names.
|
13
|
+
* Operations client honors the quota_project setting.
|
14
|
+
|
15
|
+
### 0.5.0 / 2020-05-19
|
16
|
+
|
17
|
+
* Add quota_project to the generated configs.
|
18
|
+
* Allow resource patterns with a star as a segment template.
|
19
|
+
* Generate tests for resource path helpers.
|
20
|
+
* Pin protobuf dependency for Ruby < 2.5.
|
21
|
+
* Create a test helper in for generated tests.
|
22
|
+
|
23
|
+
### 0.4.2 / 2020-04-28
|
24
|
+
|
25
|
+
* Prepend double-colon to absolute/global namespaces to prevent conflicts.
|
26
|
+
* Fix documentation/examples of timeouts to clarify they are in seconds.
|
27
|
+
|
28
|
+
### 0.4.0 / 2020-04-20
|
29
|
+
|
30
|
+
* Support generating clients of "common" interfaces by delegating to another service config.
|
31
|
+
* Added an accessor for the long-running-operation client from the main client.
|
32
|
+
* Generate tests for the configure method and operations client accessor.
|
33
|
+
* Prevent generation of RPC or factory methods with reserved names.
|
34
|
+
* Fixed: LRO clients weren't inheriting custom endpoints from the main client.
|
35
|
+
* Fixed: Cross-references weren't interpreted if the text included backticks, spaces, or hyphens.
|
36
|
+
|
3
37
|
### 0.3.3 / 2020-04-13
|
4
38
|
|
5
39
|
* Fix cross-reference links to multi-word enum values.
|
@@ -22,7 +22,7 @@ module Gapic
|
|
22
22
|
#
|
23
23
|
module FormattingUtils
|
24
24
|
@brace_detector = /\A(?<pre>[^`]*(`[^`]*`[^`]*)*[^`\\])?\{(?<inside>[^\s][^}]*)\}(?<post>.*)\z/m
|
25
|
-
@xref_detector = /\A(?<pre>[^`]*(`[^`]*`[^`]*)*)?\[(?<text>[\w\.]+)\]\[(?<addr>[\w\.]+)\](?<post>.*)\z/m
|
25
|
+
@xref_detector = /\A(?<pre>[^`]*(`[^`]*`[^`]*)*)?\[(?<text>[\w\. `-]+)\]\[(?<addr>[\w\.]+)\](?<post>.*)\z/m
|
26
26
|
@list_element_detector = /\A\s*(\*|\+|-|[0-9a-zA-Z]+\.)\s/
|
27
27
|
|
28
28
|
class << self
|
@@ -137,15 +137,15 @@ module Gapic
|
|
137
137
|
|
138
138
|
case entity
|
139
139
|
when Gapic::Schema::Service
|
140
|
-
"{
|
140
|
+
"{::#{convert_address_to_ruby entity}::Client #{text}}"
|
141
141
|
when Gapic::Schema::Method
|
142
|
-
"{
|
142
|
+
"{::#{convert_address_to_ruby entity.parent}::Client##{entity.name.underscore} #{text}}"
|
143
143
|
when Gapic::Schema::Message, Gapic::Schema::Enum
|
144
|
-
"{
|
144
|
+
"{::#{convert_address_to_ruby entity} #{text}}"
|
145
145
|
when Gapic::Schema::EnumValue
|
146
|
-
"{
|
146
|
+
"{::#{convert_address_to_ruby entity.parent}::#{entity.name} #{text}}"
|
147
147
|
when Gapic::Schema::Field
|
148
|
-
"{
|
148
|
+
"{::#{convert_address_to_ruby entity.parent}##{entity.name} #{text}}"
|
149
149
|
end
|
150
150
|
end
|
151
151
|
|
@@ -155,7 +155,7 @@ module Gapic
|
|
155
155
|
address = entity.address
|
156
156
|
address = address.join "." if address.is_a? Array
|
157
157
|
address = address.sub file.package, file.ruby_package if file.ruby_package&.present?
|
158
|
-
address.split(
|
158
|
+
address.split(/\.|::/).reject(&:empty?).map(&:camelize).map { |node| api.fix_namespace node }.join("::")
|
159
159
|
end
|
160
160
|
end
|
161
161
|
end
|
@@ -41,10 +41,10 @@ module Gapic
|
|
41
41
|
# @return [Array<
|
42
42
|
# Google::Protobuf::Compiler::CodeGeneratorResponse::File>]
|
43
43
|
# The files that were generated for the API.
|
44
|
-
def generate
|
44
|
+
def generate gem_presenter: nil
|
45
45
|
files = []
|
46
46
|
|
47
|
-
gem = Gapic::Presenters.gem_presenter
|
47
|
+
gem = gem_presenter || Gapic::Presenters.gem_presenter(@api)
|
48
48
|
|
49
49
|
gem.packages.each do |package|
|
50
50
|
# Package level files
|
@@ -54,26 +54,28 @@ module Gapic
|
|
54
54
|
# Service level files
|
55
55
|
files << g("service.erb", "lib/#{service.service_file_path}", service: service)
|
56
56
|
files << g("service/client.erb", "lib/#{service.client_file_path}", service: service)
|
57
|
-
files << g("service/credentials.erb", "lib/#{service.credentials_file_path}", service: service)
|
57
|
+
files << g("service/credentials.erb", "lib/#{service.credentials_file_path}", service: service) unless gem.generic_endpoint?
|
58
58
|
files << g("service/paths.erb", "lib/#{service.paths_file_path}", service: service) if service.paths?
|
59
59
|
files << g("service/operations.erb", "lib/#{service.operations_file_path}", service: service) if service.lro?
|
60
60
|
files << g("service/test/client.erb", "test/#{service.test_client_file_path}", service: service)
|
61
|
+
files << g("service/test/client_paths.erb", "test/#{service.test_paths_file_path}", service: service) if service.paths?
|
61
62
|
files << g("service/test/client_operations.erb", "test/#{service.test_client_operations_file_path}", service: service) if service.lro?
|
62
63
|
end
|
63
64
|
end
|
64
65
|
|
65
66
|
# Gem level files
|
66
|
-
files << g("gem/gitignore.erb",
|
67
|
-
files << g("gem/version.erb",
|
68
|
-
files << g("gem/
|
69
|
-
files << g("gem/
|
70
|
-
files << g("gem/
|
71
|
-
files << g("gem/
|
72
|
-
files << g("gem/
|
73
|
-
files << g("gem/
|
74
|
-
files << g("gem/
|
75
|
-
files << g("gem/
|
76
|
-
files << g("gem/
|
67
|
+
files << g("gem/gitignore.erb", ".gitignore", gem: gem)
|
68
|
+
files << g("gem/version.erb", "lib/#{gem.version_file_path}", gem: gem)
|
69
|
+
files << g("gem/test_helper.erb", "test/helper.rb", gem: gem)
|
70
|
+
files << g("gem/gemspec.erb", "#{gem.name}.gemspec", gem: gem)
|
71
|
+
files << g("gem/gemfile.erb", "Gemfile", gem: gem)
|
72
|
+
files << g("gem/rakefile.erb", "Rakefile", gem: gem)
|
73
|
+
files << g("gem/readme.erb", "README.md", gem: gem)
|
74
|
+
files << g("gem/changelog.erb", "CHANGELOG.md", gem: gem)
|
75
|
+
files << g("gem/rubocop.erb", ".rubocop.yml", gem: gem)
|
76
|
+
files << g("gem/yardopts.erb", ".yardopts", gem: gem)
|
77
|
+
files << g("gem/license.erb", "LICENSE.md", gem: gem)
|
78
|
+
files << g("gem/entrypoint.erb", "lib/#{gem.name}.rb", gem: gem)
|
77
79
|
|
78
80
|
gem.proto_files.each do |proto_file|
|
79
81
|
files << g("proto_docs/proto_file.erb", "proto_docs/#{proto_file.docs_file_path}", file: proto_file)
|
@@ -38,7 +38,14 @@ module Gapic
|
|
38
38
|
# Ruby double-semicolon separators.
|
39
39
|
def ruby_namespace_for_address address
|
40
40
|
address = address.split "." if address.is_a? String
|
41
|
-
address.reject(&:empty?).map(&:camelize).join
|
41
|
+
ensure_absolute_namespace address.reject(&:empty?).map(&:camelize).join("::")
|
42
|
+
end
|
43
|
+
|
44
|
+
##
|
45
|
+
# Returns the given namespace, ensuring double colons are prepended
|
46
|
+
#
|
47
|
+
def ensure_absolute_namespace namespace
|
48
|
+
namespace.start_with?("::") ? namespace : "::#{namespace}"
|
42
49
|
end
|
43
50
|
|
44
51
|
##
|
@@ -56,6 +56,13 @@ module Gapic
|
|
56
56
|
!@pattern.nil?
|
57
57
|
end
|
58
58
|
|
59
|
+
# Determines if the segment has a nontrivial pattern (i.e. not `*` or `**`).
|
60
|
+
#
|
61
|
+
# @return [Boolean]
|
62
|
+
def nontrivial_pattern?
|
63
|
+
@pattern && @pattern != "*" && @pattern != "**"
|
64
|
+
end
|
65
|
+
|
59
66
|
# @private
|
60
67
|
def == other
|
61
68
|
return false unless other.is_a? self.class
|
@@ -95,21 +95,21 @@ module Gapic
|
|
95
95
|
base_type =
|
96
96
|
if field.message?
|
97
97
|
type = message_ruby_type field.message
|
98
|
-
output ? type : "#{type}, Hash"
|
98
|
+
output ? type : "#{type}, ::Hash"
|
99
99
|
elsif field.enum?
|
100
100
|
# TODO: handle when arg message is nil and enum is the type
|
101
101
|
message_ruby_type field.enum
|
102
102
|
else
|
103
103
|
case field.type
|
104
|
-
when 1, 2 then "Float"
|
105
|
-
when 3, 4, 5, 6, 7, 13, 15, 16, 17, 18 then "Integer"
|
106
|
-
when 9, 12 then "String"
|
107
|
-
when 8 then "Boolean"
|
104
|
+
when 1, 2 then "::Float"
|
105
|
+
when 3, 4, 5, 6, 7, 13, 15, 16, 17, 18 then "::Integer"
|
106
|
+
when 9, 12 then "::String"
|
107
|
+
when 8 then "::Boolean"
|
108
108
|
else
|
109
|
-
"Object"
|
109
|
+
"::Object"
|
110
110
|
end
|
111
111
|
end
|
112
|
-
field.repeated? ? "Array<#{base_type}>" : base_type
|
112
|
+
field.repeated? ? "::Array<#{base_type}>" : base_type
|
113
113
|
end
|
114
114
|
|
115
115
|
def field_map_type entry_message, output
|
@@ -118,7 +118,7 @@ module Gapic
|
|
118
118
|
key_field = field if field.name == "key"
|
119
119
|
value_field = field if field.name == "value"
|
120
120
|
end
|
121
|
-
class_name = output ? "Google::Protobuf::Map" : "Hash"
|
121
|
+
class_name = output ? "::Google::Protobuf::Map" : "::Hash"
|
122
122
|
if key_field && value_field
|
123
123
|
key_type = field_doc_types key_field, output
|
124
124
|
value_type = field_doc_types value_field, output
|
@@ -141,7 +141,7 @@ module Gapic
|
|
141
141
|
when 9, 12 then "\"hello world\""
|
142
142
|
when 8 then "true"
|
143
143
|
else
|
144
|
-
"Object"
|
144
|
+
"::Object"
|
145
145
|
end
|
146
146
|
end
|
147
147
|
end
|
@@ -33,7 +33,7 @@ module Gapic
|
|
33
33
|
def packages
|
34
34
|
@packages ||= begin
|
35
35
|
packages = @api.generate_files.map(&:package).uniq.sort
|
36
|
-
packages.map { |p| PackagePresenter.new @api, p }.delete_if(&:empty?)
|
36
|
+
packages.map { |p| PackagePresenter.new self, @api, p }.delete_if(&:empty?)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -44,7 +44,7 @@ module Gapic
|
|
44
44
|
def services
|
45
45
|
@services ||= begin
|
46
46
|
files = @api.generate_files
|
47
|
-
files.map(&:services).flatten.map { |s| ServicePresenter.new @api, s }
|
47
|
+
files.map(&:services).flatten.map { |s| ServicePresenter.new self, @api, s }
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
@@ -147,10 +147,36 @@ module Gapic
|
|
147
147
|
gem_config(:yard_strict) != "false"
|
148
148
|
end
|
149
149
|
|
150
|
+
def generic_endpoint?
|
151
|
+
gem_config(:generic_endpoint) == "true"
|
152
|
+
end
|
153
|
+
|
150
154
|
def entrypoint_require
|
151
155
|
packages.first.package_require
|
152
156
|
end
|
153
157
|
|
158
|
+
def license_name
|
159
|
+
"MIT"
|
160
|
+
end
|
161
|
+
|
162
|
+
def extra_files
|
163
|
+
["README.md", "LICENSE.md", ".yardopts"]
|
164
|
+
end
|
165
|
+
|
166
|
+
def dependencies
|
167
|
+
deps = { "gapic-common" => "~> 0.2" }
|
168
|
+
deps["grpc-google-iam-v1"] = [">= 0.6.10", "< 2.0"] if iam_dependency?
|
169
|
+
extra_deps = gem_config :extra_dependencies
|
170
|
+
deps.merge! extra_deps if extra_deps
|
171
|
+
deps
|
172
|
+
end
|
173
|
+
|
174
|
+
def dependency_list
|
175
|
+
dependencies.to_a
|
176
|
+
.map { |name, requirements| [name, Array(requirements)] }
|
177
|
+
.sort_by { |name, _requirements| name }
|
178
|
+
end
|
179
|
+
|
154
180
|
private
|
155
181
|
|
156
182
|
def gem_config key
|
@@ -16,6 +16,7 @@
|
|
16
16
|
|
17
17
|
require "active_support/inflector"
|
18
18
|
require "gapic/path_template"
|
19
|
+
require "gapic/ruby_info"
|
19
20
|
require "gapic/helpers/namespace_helper"
|
20
21
|
|
21
22
|
module Gapic
|
@@ -26,17 +27,22 @@ module Gapic
|
|
26
27
|
class MethodPresenter
|
27
28
|
include Gapic::Helpers::NamespaceHelper
|
28
29
|
|
29
|
-
def initialize api, method
|
30
|
+
def initialize service_presenter, api, method
|
31
|
+
@service_presenter = service_presenter
|
30
32
|
@api = api
|
31
33
|
@method = method
|
32
34
|
end
|
33
35
|
|
34
36
|
def service
|
35
|
-
|
37
|
+
@service_presenter
|
36
38
|
end
|
37
39
|
|
38
40
|
def name
|
39
|
-
|
41
|
+
@name ||= begin
|
42
|
+
candidate = ActiveSupport::Inflector.underscore @method.name
|
43
|
+
candidate = "call_#{candidate}" if Gapic::RubyInfo.excluded_method_names.include? candidate
|
44
|
+
candidate
|
45
|
+
end
|
40
46
|
end
|
41
47
|
|
42
48
|
def kind
|
@@ -59,13 +65,13 @@ module Gapic
|
|
59
65
|
|
60
66
|
def doc_response_type
|
61
67
|
ret = return_type
|
62
|
-
ret = "Gapic::Operation" if lro?
|
68
|
+
ret = "::Gapic::Operation" if lro?
|
63
69
|
if server_streaming?
|
64
|
-
ret = "Enumerable<#{ret}>"
|
70
|
+
ret = "::Enumerable<#{ret}>"
|
65
71
|
elsif paged?
|
66
72
|
paged_type = paged_response_type
|
67
|
-
paged_type = "Gapic::Operation" if paged_type == "Google::Longrunning::Operation"
|
68
|
-
ret = "Gapic::PagedEnumerable<#{paged_type}>"
|
73
|
+
paged_type = "::Gapic::Operation" if paged_type == "::Google::Longrunning::Operation"
|
74
|
+
ret = "::Gapic::PagedEnumerable<#{paged_type}>"
|
69
75
|
end
|
70
76
|
ret
|
71
77
|
end
|
@@ -118,7 +124,7 @@ module Gapic
|
|
118
124
|
return [
|
119
125
|
OpenStruct.new(
|
120
126
|
name: "operation",
|
121
|
-
doc_types: "Gapic::Operation"
|
127
|
+
doc_types: "::Gapic::Operation"
|
122
128
|
)
|
123
129
|
]
|
124
130
|
end
|
@@ -129,7 +135,7 @@ module Gapic
|
|
129
135
|
),
|
130
136
|
OpenStruct.new(
|
131
137
|
name: "operation",
|
132
|
-
doc_types: "GRPC::ActiveCall::Operation"
|
138
|
+
doc_types: "::GRPC::ActiveCall::Operation"
|
133
139
|
)
|
134
140
|
]
|
135
141
|
end
|
@@ -145,9 +151,9 @@ module Gapic
|
|
145
151
|
end
|
146
152
|
|
147
153
|
def lro?
|
148
|
-
return paged_response_type == "Google::Longrunning::Operation" if paged?
|
154
|
+
return paged_response_type == "::Google::Longrunning::Operation" if paged?
|
149
155
|
|
150
|
-
message_ruby_type(@method.output) == "Google::Longrunning::Operation"
|
156
|
+
message_ruby_type(@method.output) == "::Google::Longrunning::Operation"
|
151
157
|
end
|
152
158
|
|
153
159
|
def client_streaming?
|
@@ -221,12 +227,12 @@ module Gapic
|
|
221
227
|
message_ruby_type arg.enum
|
222
228
|
else
|
223
229
|
case arg.type
|
224
|
-
when 1, 2 then "Float"
|
225
|
-
when 3, 4, 5, 6, 7, 13, 15, 16, 17, 18 then "Integer"
|
226
|
-
when 9, 12 then "String"
|
227
|
-
when 8 then "Boolean"
|
230
|
+
when 1, 2 then "::Float"
|
231
|
+
when 3, 4, 5, 6, 7, 13, 15, 16, 17, 18 then "::Integer"
|
232
|
+
when 9, 12 then "::String"
|
233
|
+
when 8 then "::Boolean"
|
228
234
|
else
|
229
|
-
"Object"
|
235
|
+
"::Object"
|
230
236
|
end
|
231
237
|
end
|
232
238
|
end
|
@@ -251,7 +257,7 @@ module Gapic
|
|
251
257
|
when 9, 12 then "\"hello world\""
|
252
258
|
when 8 then "true"
|
253
259
|
else
|
254
|
-
"Object"
|
260
|
+
"::Object"
|
255
261
|
end
|
256
262
|
end
|
257
263
|
end
|
@@ -27,13 +27,14 @@ module Gapic
|
|
27
27
|
include Gapic::Helpers::FilepathHelper
|
28
28
|
include Gapic::Helpers::NamespaceHelper
|
29
29
|
|
30
|
-
def initialize api, package
|
30
|
+
def initialize gem_presenter, api, package
|
31
|
+
@gem_presenter = gem_presenter
|
31
32
|
@api = api
|
32
33
|
@package = package
|
33
34
|
end
|
34
35
|
|
35
36
|
def gem
|
36
|
-
|
37
|
+
@gem_presenter
|
37
38
|
end
|
38
39
|
|
39
40
|
def name
|
@@ -53,10 +54,17 @@ module Gapic
|
|
53
54
|
namespace.split("::").last
|
54
55
|
end
|
55
56
|
|
57
|
+
# Services whose clients should be generated in this package namespace.
|
56
58
|
def services
|
57
59
|
@services ||= begin
|
58
60
|
files = @api.generate_files.select { |f| f.package == @package }
|
59
|
-
files.map(&:services).flatten
|
61
|
+
services = files.map(&:services).flatten
|
62
|
+
# Omit common services in this package. Common service clients do not
|
63
|
+
# go into their own package.
|
64
|
+
normal_services = services.select { |s| @api.delegate_service_for(s).nil? }
|
65
|
+
# But include common services that delegate to normal services in this package.
|
66
|
+
common_services = normal_services.flat_map { |s| @api.common_services_for s }
|
67
|
+
(normal_services + common_services).map { |s| ServicePresenter.new @gem_presenter, @api, s }
|
60
68
|
end
|
61
69
|
end
|
62
70
|
|
@@ -15,7 +15,6 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
require "gapic/path_template"
|
18
|
-
require "ostruct"
|
19
18
|
require "active_support/inflector"
|
20
19
|
|
21
20
|
module Gapic
|
@@ -28,20 +27,10 @@ module Gapic
|
|
28
27
|
def initialize resource
|
29
28
|
@resource = resource
|
30
29
|
|
31
|
-
@patterns = resource.pattern.map
|
32
|
-
segments = Gapic::PathTemplate.parse template
|
33
|
-
OpenStruct.new(
|
34
|
-
template: template,
|
35
|
-
segments: segments,
|
36
|
-
arguments: arguments_for(segments),
|
37
|
-
path_string: path_string_for(segments)
|
38
|
-
)
|
39
|
-
end
|
30
|
+
@patterns = resource.pattern.map { |template| PatternPresenter.new template }
|
40
31
|
|
41
32
|
# Keep only patterns that can be used to create path helpers
|
42
|
-
@patterns.
|
43
|
-
named_arg_patterns?(pattern.segments) || positional_args?(pattern.segments)
|
44
|
-
end
|
33
|
+
@patterns.filter!(&:useful_for_helpers?)
|
45
34
|
end
|
46
35
|
|
47
36
|
def name
|
@@ -60,33 +49,64 @@ module Gapic
|
|
60
49
|
"#{ActiveSupport::Inflector.underscore name}_path"
|
61
50
|
end
|
62
51
|
|
63
|
-
|
52
|
+
##
|
53
|
+
# A presenter for a particular pattern
|
54
|
+
#
|
55
|
+
class PatternPresenter
|
56
|
+
def initialize template
|
57
|
+
@template = template
|
58
|
+
@segments = Gapic::PathTemplate.parse template
|
59
|
+
@arguments = arg_segments.map(&:name)
|
60
|
+
@path_string = build_path_string
|
61
|
+
end
|
64
62
|
|
65
|
-
|
66
|
-
arg_segments(segments).map(&:name)
|
67
|
-
end
|
63
|
+
attr_reader :template, :segments, :arguments, :path_string
|
68
64
|
|
69
|
-
|
70
|
-
|
71
|
-
|
65
|
+
def useful_for_helpers?
|
66
|
+
arg_segments.none?(&:nontrivial_pattern?) && arg_segments.none?(&:positional?)
|
67
|
+
end
|
72
68
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
"\#{#{segment.name}}"
|
77
|
-
else
|
78
|
-
# Should be a String
|
79
|
-
segment
|
80
|
-
end
|
81
|
-
end.join
|
82
|
-
end
|
69
|
+
def formal_arguments
|
70
|
+
arguments.map { |arg| "#{arg}:" }.join ", "
|
71
|
+
end
|
83
72
|
|
84
|
-
|
85
|
-
|
86
|
-
|
73
|
+
def arguments_key
|
74
|
+
arguments.sort.join ":"
|
75
|
+
end
|
76
|
+
|
77
|
+
def arguments_with_dummy_values
|
78
|
+
arguments.each_with_index.map { |arg, index| "#{arg}: \"value#{index}\"" }.join ", "
|
79
|
+
end
|
80
|
+
|
81
|
+
def expected_path_for_dummy_values
|
82
|
+
index = -1
|
83
|
+
segments.map do |segment|
|
84
|
+
if segment.is_a? Gapic::PathTemplate::Segment
|
85
|
+
index += 1
|
86
|
+
"value#{index}"
|
87
|
+
else
|
88
|
+
# Should be a String
|
89
|
+
segment
|
90
|
+
end
|
91
|
+
end.join
|
92
|
+
end
|
87
93
|
|
88
|
-
|
89
|
-
|
94
|
+
private
|
95
|
+
|
96
|
+
def arg_segments
|
97
|
+
segments.select { |segment| segment.is_a? Gapic::PathTemplate::Segment }
|
98
|
+
end
|
99
|
+
|
100
|
+
def build_path_string
|
101
|
+
segments.map do |segment|
|
102
|
+
if segment.is_a? Gapic::PathTemplate::Segment
|
103
|
+
"\#{#{segment.name}}"
|
104
|
+
else
|
105
|
+
# Should be a String
|
106
|
+
segment
|
107
|
+
end
|
108
|
+
end.join
|
109
|
+
end
|
90
110
|
end
|
91
111
|
end
|
92
112
|
end
|