gapic-generator 0.1.5 → 0.3.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 +55 -0
- data/lib/gapic/formatting_utils.rb +63 -12
- data/lib/gapic/generator/version.rb +1 -1
- data/lib/gapic/generators/base_generator.rb +0 -8
- data/lib/gapic/generators/default_generator.rb +13 -14
- data/lib/gapic/helpers/filepath_helper.rb +45 -0
- data/lib/gapic/helpers/namespace_helper.rb +51 -0
- data/lib/gapic/presenters.rb +44 -0
- data/{templates/default/helpers → lib/gapic}/presenters/enum_presenter.rb +19 -14
- data/{templates/default/helpers → lib/gapic}/presenters/enum_value_presenter.rb +19 -12
- data/lib/gapic/presenters/field_presenter.rb +154 -0
- data/lib/gapic/presenters/file_presenter.rb +59 -0
- data/lib/gapic/presenters/gem_presenter.rb +176 -0
- data/lib/gapic/presenters/message_presenter.rb +73 -0
- data/lib/gapic/presenters/method_presenter.rb +307 -0
- data/lib/gapic/presenters/package_presenter.rb +80 -0
- data/lib/gapic/presenters/resource_presenter.rb +99 -0
- data/lib/gapic/presenters/sample_presenter.rb +84 -0
- data/lib/gapic/presenters/service_presenter.rb +306 -0
- data/lib/gapic/resource_lookup.rb +23 -38
- data/lib/gapic/schema/api.rb +70 -0
- data/lib/gapic/schema/loader.rb +9 -2
- data/lib/gapic/schema/wrappers.rb +134 -24
- data/templates/default/gem/entrypoint.erb +8 -0
- data/templates/default/gem/gemspec.erb +2 -2
- data/templates/default/gem/readme.erb +17 -3
- data/templates/default/gem/rubocop.erb +13 -41
- data/templates/default/helpers/filepath_helper.rb +2 -21
- data/templates/default/helpers/namespace_helper.rb +2 -27
- data/templates/default/layouts/_ruby.erb +1 -3
- data/templates/default/lib/_package.erb +17 -0
- data/templates/default/lib/_service.erb +32 -0
- data/templates/default/package.erb +5 -5
- data/templates/default/service.erb +5 -7
- data/templates/default/service/_helpers.erb +3 -0
- data/templates/default/service/client/_client.erb +7 -17
- data/templates/default/service/client/_operations.erb +0 -4
- data/templates/default/service/client/_paths.erb +1 -0
- data/templates/default/service/client/method/def/_options_defaults.erb +1 -1
- data/templates/default/service/client/method/def/_response_normal.erb +1 -1
- data/templates/default/service/client/method/docs/_request_normal.erb +10 -5
- data/templates/default/service/client/method/docs/_request_streaming.erb +1 -1
- metadata +20 -15
- data/templates/default/helpers/presenter_helper.rb +0 -24
- data/templates/default/helpers/presenters/field_presenter.rb +0 -146
- data/templates/default/helpers/presenters/file_presenter.rb +0 -53
- data/templates/default/helpers/presenters/gem_presenter.rb +0 -140
- data/templates/default/helpers/presenters/message_presenter.rb +0 -66
- data/templates/default/helpers/presenters/method_presenter.rb +0 -293
- data/templates/default/helpers/presenters/package_presenter.rb +0 -65
- data/templates/default/helpers/presenters/resource_presenter.rb +0 -92
- data/templates/default/helpers/presenters/sample_presenter.rb +0 -74
- data/templates/default/helpers/presenters/service_presenter.rb +0 -276
- data/templates/default/service/client/_helpers.erb +0 -9
@@ -0,0 +1,154 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2018 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
|
+
require "gapic/helpers/namespace_helper"
|
19
|
+
|
20
|
+
module Gapic
|
21
|
+
module Presenters
|
22
|
+
##
|
23
|
+
# A presenter for proto fields.
|
24
|
+
#
|
25
|
+
class FieldPresenter
|
26
|
+
include Gapic::Helpers::NamespaceHelper
|
27
|
+
|
28
|
+
def initialize api, message, field
|
29
|
+
@api = api
|
30
|
+
@message = message
|
31
|
+
@field = field
|
32
|
+
end
|
33
|
+
|
34
|
+
def name
|
35
|
+
@field.name
|
36
|
+
end
|
37
|
+
|
38
|
+
def doc_types
|
39
|
+
field_doc_types @field, false
|
40
|
+
end
|
41
|
+
|
42
|
+
def doc_attribute_type
|
43
|
+
mode = @field.output_only? ? "r" : "rw"
|
44
|
+
"@!attribute [#{mode}] #{@field.name}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def output_doc_types
|
48
|
+
field_doc_types @field, true
|
49
|
+
end
|
50
|
+
|
51
|
+
def doc_description
|
52
|
+
@field.docs_leading_comments
|
53
|
+
end
|
54
|
+
|
55
|
+
def default_value
|
56
|
+
single = default_singular_value
|
57
|
+
return "[#{single}]" if @field.repeated? && !@field.map?
|
58
|
+
single
|
59
|
+
end
|
60
|
+
|
61
|
+
def as_kwarg value: nil
|
62
|
+
"#{name}: #{value || name}"
|
63
|
+
end
|
64
|
+
|
65
|
+
# TODO: remove, only used in tests
|
66
|
+
def type_name
|
67
|
+
@field.type_name
|
68
|
+
end
|
69
|
+
|
70
|
+
def type_name_full
|
71
|
+
return nil if type_name.blank?
|
72
|
+
ruby_namespace @api, type_name
|
73
|
+
end
|
74
|
+
|
75
|
+
def message?
|
76
|
+
@field.message?
|
77
|
+
end
|
78
|
+
|
79
|
+
def enum?
|
80
|
+
@field.enum?
|
81
|
+
end
|
82
|
+
|
83
|
+
def repeated?
|
84
|
+
@field.repeated?
|
85
|
+
end
|
86
|
+
|
87
|
+
def map?
|
88
|
+
@field.map?
|
89
|
+
end
|
90
|
+
|
91
|
+
protected
|
92
|
+
|
93
|
+
def field_doc_types field, output
|
94
|
+
return field_map_type field.message, output if field.map?
|
95
|
+
base_type =
|
96
|
+
if field.message?
|
97
|
+
type = message_ruby_type field.message
|
98
|
+
output ? type : "#{type}, Hash"
|
99
|
+
elsif field.enum?
|
100
|
+
# TODO: handle when arg message is nil and enum is the type
|
101
|
+
message_ruby_type field.enum
|
102
|
+
else
|
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"
|
108
|
+
else
|
109
|
+
"Object"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
field.repeated? ? "Array<#{base_type}>" : base_type
|
113
|
+
end
|
114
|
+
|
115
|
+
def field_map_type entry_message, output
|
116
|
+
key_field = value_field = nil
|
117
|
+
entry_message.fields.each do |field|
|
118
|
+
key_field = field if field.name == "key"
|
119
|
+
value_field = field if field.name == "value"
|
120
|
+
end
|
121
|
+
class_name = output ? "Google::Protobuf::Map" : "Hash"
|
122
|
+
if key_field && value_field
|
123
|
+
key_type = field_doc_types key_field, output
|
124
|
+
value_type = field_doc_types value_field, output
|
125
|
+
"#{class_name}{#{key_type} => #{value_type}}"
|
126
|
+
else
|
127
|
+
class_name
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def default_singular_value
|
132
|
+
if @field.message?
|
133
|
+
"{}"
|
134
|
+
elsif @field.enum?
|
135
|
+
# TODO: select the first non-0 enum value
|
136
|
+
":#{@field.enum.values.first.name}"
|
137
|
+
else
|
138
|
+
case @field.type
|
139
|
+
when 1, 2 then "3.5"
|
140
|
+
when 3, 4, 5, 6, 7, 13, 15, 16, 17, 18 then "42"
|
141
|
+
when 9, 12 then "\"hello world\""
|
142
|
+
when 8 then "true"
|
143
|
+
else
|
144
|
+
"Object"
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def message_ruby_type message
|
150
|
+
ruby_namespace @api, message.address.join(".")
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2018 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 "gapic/helpers/namespace_helper"
|
18
|
+
|
19
|
+
module Gapic
|
20
|
+
module Presenters
|
21
|
+
##
|
22
|
+
# A presenter for proto files.
|
23
|
+
#
|
24
|
+
class FilePresenter
|
25
|
+
include Gapic::Helpers::NamespaceHelper
|
26
|
+
|
27
|
+
# @param file [Gapic::Schema::File] the file to present
|
28
|
+
def initialize api, file
|
29
|
+
@api = api
|
30
|
+
@file = file
|
31
|
+
end
|
32
|
+
|
33
|
+
def name
|
34
|
+
@file.name
|
35
|
+
end
|
36
|
+
|
37
|
+
def address
|
38
|
+
@file.address
|
39
|
+
end
|
40
|
+
|
41
|
+
def namespace
|
42
|
+
return @file.ruby_package if @file.ruby_package.present?
|
43
|
+
ruby_namespace_for_address address
|
44
|
+
end
|
45
|
+
|
46
|
+
def messages
|
47
|
+
@messages ||= @file.messages.map { |m| MessagePresenter.new @api, m }
|
48
|
+
end
|
49
|
+
|
50
|
+
def enums
|
51
|
+
@enums ||= @file.enums.map { |e| EnumPresenter.new e }
|
52
|
+
end
|
53
|
+
|
54
|
+
def docs_file_path
|
55
|
+
@file.name.gsub ".proto", ".rb"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,176 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2019 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 "gapic/helpers/filepath_helper"
|
18
|
+
require "gapic/helpers/namespace_helper"
|
19
|
+
|
20
|
+
module Gapic
|
21
|
+
module Presenters
|
22
|
+
##
|
23
|
+
# A presenter for gems.
|
24
|
+
#
|
25
|
+
class GemPresenter
|
26
|
+
include Gapic::Helpers::FilepathHelper
|
27
|
+
include Gapic::Helpers::NamespaceHelper
|
28
|
+
|
29
|
+
def initialize api
|
30
|
+
@api = api
|
31
|
+
end
|
32
|
+
|
33
|
+
def packages
|
34
|
+
@packages ||= begin
|
35
|
+
packages = @api.generate_files.map(&:package).uniq.sort
|
36
|
+
packages.map { |p| PackagePresenter.new @api, p }.delete_if(&:empty?)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def packages?
|
41
|
+
!packages.empty?
|
42
|
+
end
|
43
|
+
|
44
|
+
def services
|
45
|
+
@services ||= begin
|
46
|
+
files = @api.generate_files
|
47
|
+
files.map(&:services).flatten.map { |s| ServicePresenter.new @api, s }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def proto_files
|
52
|
+
@proto_files ||= begin
|
53
|
+
files = @api.files
|
54
|
+
files = files.reject { |f| blacklist_protos.include? f.name }
|
55
|
+
files = files.reject { |f| f.messages.empty? && f.enums.empty? }
|
56
|
+
files.map { |f| FilePresenter.new @api, f }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def address
|
61
|
+
name.split("-").map(&:camelize)
|
62
|
+
end
|
63
|
+
|
64
|
+
def name
|
65
|
+
gem_config :name
|
66
|
+
end
|
67
|
+
|
68
|
+
def namespace
|
69
|
+
gem_config(:namespace) ||
|
70
|
+
fix_namespace(@api, name.split("-").map(&:camelize).join("::"))
|
71
|
+
end
|
72
|
+
|
73
|
+
def title
|
74
|
+
gem_config(:title) ||
|
75
|
+
namespace.split("::").join(" ")
|
76
|
+
end
|
77
|
+
|
78
|
+
def version
|
79
|
+
gem_config(:version) ||
|
80
|
+
"0.0.1"
|
81
|
+
end
|
82
|
+
|
83
|
+
def version_require
|
84
|
+
ruby_file_path @api, version_name_full
|
85
|
+
end
|
86
|
+
|
87
|
+
def version_file_path
|
88
|
+
"#{version_require}.rb"
|
89
|
+
end
|
90
|
+
|
91
|
+
def version_name_full
|
92
|
+
"#{namespace}::VERSION"
|
93
|
+
end
|
94
|
+
|
95
|
+
def authors
|
96
|
+
gem_config(:authors) ||
|
97
|
+
["Google LLC"]
|
98
|
+
end
|
99
|
+
|
100
|
+
def email
|
101
|
+
gem_config(:email) ||
|
102
|
+
"googleapis-packages@google.com"
|
103
|
+
end
|
104
|
+
|
105
|
+
def description
|
106
|
+
gem_config(:description) ||
|
107
|
+
"#{name} is the official client library for the #{title} API."
|
108
|
+
end
|
109
|
+
|
110
|
+
def summary
|
111
|
+
gem_config(:summary) ||
|
112
|
+
"API Client library for the #{title} API"
|
113
|
+
end
|
114
|
+
|
115
|
+
def homepage
|
116
|
+
gem_config(:homepage) ||
|
117
|
+
"https://github.com/googleapis/googleapis"
|
118
|
+
end
|
119
|
+
|
120
|
+
def env_prefix
|
121
|
+
(gem_config(:env_prefix) || name.split("-").last).upcase
|
122
|
+
end
|
123
|
+
|
124
|
+
def iam_dependency?
|
125
|
+
@api.files.map(&:name).any? { |f| f.start_with? "google/iam/v1/" }
|
126
|
+
end
|
127
|
+
|
128
|
+
def library_documentation_url
|
129
|
+
gem_config(:library_documentation_url) || "https://googleapis.dev/ruby/#{name}/latest"
|
130
|
+
end
|
131
|
+
|
132
|
+
def product_documentation_url
|
133
|
+
gem_config :product_documentation_url
|
134
|
+
end
|
135
|
+
|
136
|
+
def api_id
|
137
|
+
gem_config :api_id
|
138
|
+
end
|
139
|
+
|
140
|
+
def free_tier?
|
141
|
+
# Default to false unless the config is explicitly set to "true"
|
142
|
+
gem_config(:free_tier) == "true"
|
143
|
+
end
|
144
|
+
|
145
|
+
def yard_strict?
|
146
|
+
# Default to true unless the config is explicitly set to "false"
|
147
|
+
gem_config(:yard_strict) != "false"
|
148
|
+
end
|
149
|
+
|
150
|
+
def entrypoint_require
|
151
|
+
packages.first.package_require
|
152
|
+
end
|
153
|
+
|
154
|
+
private
|
155
|
+
|
156
|
+
def gem_config key
|
157
|
+
return unless @api.configuration[:gem]
|
158
|
+
|
159
|
+
@api.configuration[:gem][key]
|
160
|
+
end
|
161
|
+
|
162
|
+
def blacklist_protos
|
163
|
+
blacklist = gem_config :blacklist
|
164
|
+
|
165
|
+
return default_blacklist_protos if blacklist.nil?
|
166
|
+
return default_blacklist_protos if blacklist[:protos].nil?
|
167
|
+
|
168
|
+
default_blacklist_protos[:protos]
|
169
|
+
end
|
170
|
+
|
171
|
+
def default_blacklist_protos
|
172
|
+
["google/api/http.proto", "google/protobuf/descriptor.proto"]
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2018 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
|
+
require "gapic/helpers/namespace_helper"
|
20
|
+
|
21
|
+
module Gapic
|
22
|
+
module Presenters
|
23
|
+
##
|
24
|
+
# A presenter for proto messages.
|
25
|
+
#
|
26
|
+
class MessagePresenter
|
27
|
+
include Gapic::Helpers::NamespaceHelper
|
28
|
+
|
29
|
+
def initialize api, message
|
30
|
+
@api = api
|
31
|
+
@message = message
|
32
|
+
end
|
33
|
+
|
34
|
+
def name
|
35
|
+
@message.name
|
36
|
+
end
|
37
|
+
|
38
|
+
def doc_types
|
39
|
+
type_name_full
|
40
|
+
end
|
41
|
+
|
42
|
+
def doc_description
|
43
|
+
@message.docs_leading_comments
|
44
|
+
end
|
45
|
+
|
46
|
+
def default_value
|
47
|
+
"{}"
|
48
|
+
end
|
49
|
+
|
50
|
+
def type_name_full
|
51
|
+
message_ruby_type @message
|
52
|
+
end
|
53
|
+
|
54
|
+
def fields
|
55
|
+
@fields = @message.fields.map { |f| FieldPresenter.new @api, @message, f }
|
56
|
+
end
|
57
|
+
|
58
|
+
def nested_enums
|
59
|
+
@nested_enums ||= @message.nested_enums.map { |e| EnumPresenter.new e }
|
60
|
+
end
|
61
|
+
|
62
|
+
def nested_messages
|
63
|
+
@nested_messages ||= @message.nested_messages.map { |m| MessagePresenter.new @api, m }
|
64
|
+
end
|
65
|
+
|
66
|
+
protected
|
67
|
+
|
68
|
+
def message_ruby_type message
|
69
|
+
ruby_namespace @api, message.address.join(".")
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|