gapic-generator 0.1.7 → 0.2.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 +19 -0
- data/lib/gapic/formatting_utils.rb +9 -4
- data/lib/gapic/generator/version.rb +1 -1
- data/lib/gapic/generators/base_generator.rb +0 -8
- data/lib/gapic/generators/default_generator.rb +2 -4
- 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 +170 -0
- data/lib/gapic/presenters/message_presenter.rb +73 -0
- data/lib/gapic/presenters/method_presenter.rb +298 -0
- data/lib/gapic/presenters/package_presenter.rb +72 -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 +297 -0
- data/lib/gapic/resource_lookup.rb +8 -1
- data/lib/gapic/schema/api.rb +16 -0
- data/lib/gapic/schema/wrappers.rb +9 -2
- data/templates/default/gem/readme.erb +2 -2
- 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/service/client/_client.erb +7 -1
- metadata +16 -14
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d4dfb48094e9e52bcc6563460bfc9bf458496d81607777cecd231f497025e1a
|
4
|
+
data.tar.gz: a52c7434b5497d85543ac55149d54987ebfa950c191b1af7673a1f32fa58dd39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be4a0672c23603bc0df2174f52d5cdc5ddd60264f322079f9c96e03bafcfa2b7fed187103ad864b19cc1a7e1ee3bb50eecc0e64a29e2534d4183c574fa5d1cc7
|
7
|
+
data.tar.gz: a80ec4c7604511c4b7d87fb4868dd928676aaaec205a32fc7cbda8facd52e7f9a347d1104ba8840df80f2e3df81f87b831483615540761ffdffd45575a129aa4
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
# Release History for gapic-generator
|
2
2
|
|
3
|
+
### 0.2.0 / 2020-03-23
|
4
|
+
|
5
|
+
Generation updates:
|
6
|
+
|
7
|
+
* Proto service documentation is rendered into client class YARD docs.
|
8
|
+
* Generated Apache license is now well-formatted markdown.
|
9
|
+
* YARD titles updated with the word "API".
|
10
|
+
* Tweaks to the default summary and description text.
|
11
|
+
* Generated rakefiles can run acceptance tests if present.
|
12
|
+
* Switch the order of summary and description in the readmes.
|
13
|
+
* Exempt a few more files (notably gemspec and rakefile) from rubocop.
|
14
|
+
* Several formatting tweaks, including removal of redundant whitespace.
|
15
|
+
|
16
|
+
Internal changes:
|
17
|
+
|
18
|
+
* New configuration allows path helpers to be generated from outputs.
|
19
|
+
* Moved presenters into lib so they can be changed/subclassed more easily.
|
20
|
+
* Several additions to GemPresenter to support new features.
|
21
|
+
|
3
22
|
### 0.1.7 / 2020-03-18
|
4
23
|
|
5
24
|
* Path modules extend self so helpers can be invoked on them directly
|
@@ -33,10 +33,14 @@ module Gapic
|
|
33
33
|
#
|
34
34
|
# Tries to be smart about exempting preformatted text blocks.
|
35
35
|
#
|
36
|
+
# @param api [Gapic::Schema::Api]
|
36
37
|
# @param lines [Enumerable<String>]
|
38
|
+
# @param disable_xrefs [Boolean] (default is `false`) Disable linking to
|
39
|
+
# cross-references, and render them simply as text. This can be used if
|
40
|
+
# it is known that the targets are not present in the current library.
|
37
41
|
# @return [Enumerable<String>]
|
38
42
|
#
|
39
|
-
def format_doc_lines api, lines
|
43
|
+
def format_doc_lines api, lines, disable_xrefs: false
|
40
44
|
# To detect preformatted blocks, this tracks the "expected" base indent
|
41
45
|
# according to Markdown. Specifically, this is the effective indent of
|
42
46
|
# previous block, which is normally 0 except if we're in a list item.
|
@@ -53,7 +57,7 @@ module Gapic
|
|
53
57
|
in_block, base_indent = update_indent_state in_block, base_indent, line, indent
|
54
58
|
if in_block == false
|
55
59
|
line = escape_line_braces line
|
56
|
-
line = format_line_xrefs api, line
|
60
|
+
line = format_line_xrefs api, line, disable_xrefs
|
57
61
|
end
|
58
62
|
end
|
59
63
|
line
|
@@ -104,11 +108,12 @@ module Gapic
|
|
104
108
|
line
|
105
109
|
end
|
106
110
|
|
107
|
-
def format_line_xrefs api, line
|
111
|
+
def format_line_xrefs api, line, disable_xrefs
|
108
112
|
while (m = @xref_detector.match line)
|
109
113
|
entity = api.lookup m[:addr]
|
110
114
|
return line if entity.nil?
|
111
|
-
|
115
|
+
text = m[:text]
|
116
|
+
yard_link = disable_xrefs ? text : yard_link_for_entity(entity, text)
|
112
117
|
return line if yard_link.nil?
|
113
118
|
line = "#{m[:pre]}#{yard_link}#{m[:post]}"
|
114
119
|
end
|
@@ -55,14 +55,6 @@ module Gapic
|
|
55
55
|
controller.class.all_helpers_from_path helpers_path
|
56
56
|
end
|
57
57
|
|
58
|
-
def use_helpers! *helper_methods
|
59
|
-
helper_methods.each do |helper_method|
|
60
|
-
define_singleton_method helper_method do |*args|
|
61
|
-
controller.class.helpers.method(helper_method).call(*args)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
58
|
def controller
|
67
59
|
# Each controller gets a new class, so multiple generators can be
|
68
60
|
# active at the same time without stomping on each other.
|
@@ -15,6 +15,7 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
require "gapic/generators/base_generator"
|
18
|
+
require "gapic/presenters"
|
18
19
|
|
19
20
|
module Gapic
|
20
21
|
module Generators
|
@@ -29,9 +30,6 @@ module Gapic
|
|
29
30
|
|
30
31
|
# Configure to use a custom templates directory
|
31
32
|
use_templates! File.join __dir__, "../../../templates/default"
|
32
|
-
|
33
|
-
# Configure these helper method to be used by the generator
|
34
|
-
use_helpers! :gem_presenter
|
35
33
|
end
|
36
34
|
|
37
35
|
# Disable Rubocop because we expect generate to grow and violate more
|
@@ -46,7 +44,7 @@ module Gapic
|
|
46
44
|
def generate
|
47
45
|
files = []
|
48
46
|
|
49
|
-
gem = gem_presenter @api
|
47
|
+
gem = Gapic::Presenters.gem_presenter @api
|
50
48
|
|
51
49
|
gem.packages.each do |package|
|
52
50
|
# Package level files
|
@@ -0,0 +1,45 @@
|
|
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
|
+
module Gapic
|
20
|
+
module Helpers
|
21
|
+
##
|
22
|
+
# Helpers related to generating paths to ruby files (e.g. for require)
|
23
|
+
#
|
24
|
+
module FilepathHelper
|
25
|
+
##
|
26
|
+
# Converts a ruby namespace string to a file path string.
|
27
|
+
def ruby_file_path api, namespace
|
28
|
+
file_path = ruby_file_path_for_namespace namespace
|
29
|
+
fix_file_path api, file_path
|
30
|
+
end
|
31
|
+
|
32
|
+
##
|
33
|
+
# Converts a ruby namespace string to a file path string.
|
34
|
+
def ruby_file_path_for_namespace namespace
|
35
|
+
ActiveSupport::Inflector.underscore namespace
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# Corrects a namespace by replacing known bad values with good values.
|
40
|
+
def fix_file_path api, file_path
|
41
|
+
file_path.split("/").map { |node| api.fix_file_path node }.join("/")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,51 @@
|
|
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
|
+
module Gapic
|
20
|
+
module Helpers
|
21
|
+
##
|
22
|
+
# Helpers related to generating ruby namespaces
|
23
|
+
#
|
24
|
+
module NamespaceHelper
|
25
|
+
##
|
26
|
+
# Looks up the ruby_package for a dot-separated address string to a new string
|
27
|
+
# and creates the corrected Ruby namespace
|
28
|
+
def ruby_namespace api, address
|
29
|
+
file = api.file_for address
|
30
|
+
address = address.dup
|
31
|
+
address[file.package] = file.ruby_package if file.ruby_package.present?
|
32
|
+
namespace = ruby_namespace_for_address address
|
33
|
+
fix_namespace api, namespace
|
34
|
+
end
|
35
|
+
|
36
|
+
##
|
37
|
+
# Converts an array or dot-separated address string to a new string with
|
38
|
+
# Ruby double-semicolon separators.
|
39
|
+
def ruby_namespace_for_address address
|
40
|
+
address = address.split "." if address.is_a? String
|
41
|
+
address.reject(&:empty?).map(&:camelize).join "::"
|
42
|
+
end
|
43
|
+
|
44
|
+
##
|
45
|
+
# Corrects a namespace by replacing known bad values with good values.
|
46
|
+
def fix_namespace api, namespace
|
47
|
+
namespace.split("::").map { |node| api.fix_namespace node }.join("::")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2020 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/presenters/enum_presenter"
|
18
|
+
require "gapic/presenters/enum_value_presenter"
|
19
|
+
require "gapic/presenters/field_presenter"
|
20
|
+
require "gapic/presenters/file_presenter"
|
21
|
+
require "gapic/presenters/gem_presenter"
|
22
|
+
require "gapic/presenters/message_presenter"
|
23
|
+
require "gapic/presenters/method_presenter"
|
24
|
+
require "gapic/presenters/package_presenter"
|
25
|
+
require "gapic/presenters/resource_presenter"
|
26
|
+
require "gapic/presenters/sample_presenter"
|
27
|
+
require "gapic/presenters/service_presenter"
|
28
|
+
|
29
|
+
module Gapic
|
30
|
+
##
|
31
|
+
# A namespace for presenter classes.
|
32
|
+
#
|
33
|
+
module Presenters
|
34
|
+
##
|
35
|
+
# Return a gem presenter
|
36
|
+
#
|
37
|
+
# @param api [Gapic::Schema::Api] The api schema object
|
38
|
+
# @return [Gapic::Presenters::GemPresenter]
|
39
|
+
#
|
40
|
+
def self.gem_presenter api
|
41
|
+
GemPresenter.new api
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -14,22 +14,27 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
-
|
17
|
+
module Gapic
|
18
|
+
module Presenters
|
19
|
+
##
|
20
|
+
# A presenter for proto enums.
|
21
|
+
#
|
22
|
+
class EnumPresenter
|
23
|
+
def initialize enum
|
24
|
+
@enum = enum
|
25
|
+
end
|
18
26
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
def name
|
25
|
-
@enum.name
|
26
|
-
end
|
27
|
+
def name
|
28
|
+
@enum.name
|
29
|
+
end
|
27
30
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
+
def doc_description
|
32
|
+
@enum.docs_leading_comments
|
33
|
+
end
|
31
34
|
|
32
|
-
|
33
|
-
|
35
|
+
def values
|
36
|
+
@values ||= @enum.values.map { |v| EnumValuePresenter.new v }
|
37
|
+
end
|
38
|
+
end
|
34
39
|
end
|
35
40
|
end
|
@@ -14,20 +14,27 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
module Gapic
|
18
|
+
module Presenters
|
19
|
+
##
|
20
|
+
# A presenter for proto enum values.
|
21
|
+
#
|
22
|
+
class EnumValuePresenter
|
23
|
+
def initialize value
|
24
|
+
@value = value
|
25
|
+
end
|
21
26
|
|
22
|
-
|
23
|
-
|
24
|
-
|
27
|
+
def name
|
28
|
+
@value.name
|
29
|
+
end
|
25
30
|
|
26
|
-
|
27
|
-
|
28
|
-
|
31
|
+
def doc_description
|
32
|
+
@value.docs_leading_comments
|
33
|
+
end
|
29
34
|
|
30
|
-
|
31
|
-
|
35
|
+
def number
|
36
|
+
@value.number
|
37
|
+
end
|
38
|
+
end
|
32
39
|
end
|
33
40
|
end
|
@@ -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
|