google-api-client 0.52.0 → 0.53.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.
Files changed (264) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +0 -14
  3. data/CHANGELOG.md +6 -0
  4. data/OVERVIEW.md +36 -27
  5. data/generated/google/apis/accesscontextmanager_v1.rb +1 -1
  6. data/generated/google/apis/accesscontextmanager_v1/classes.rb +326 -0
  7. data/generated/google/apis/accesscontextmanager_v1/representations.rb +139 -0
  8. data/generated/google/apis/admin_directory_v1.rb +1 -1
  9. data/generated/google/apis/admin_directory_v1/service.rb +2 -2
  10. data/generated/google/apis/analyticsadmin_v1alpha.rb +2 -2
  11. data/generated/google/apis/analyticsadmin_v1alpha/classes.rb +8 -0
  12. data/generated/google/apis/analyticsadmin_v1alpha/representations.rb +1 -0
  13. data/generated/google/apis/analyticsadmin_v1alpha/service.rb +12 -1
  14. data/{lib/google/apis/core/logging.rb → generated/google/apis/apigateway_v1.rb} +14 -10
  15. data/generated/google/apis/apigateway_v1/classes.rb +1116 -0
  16. data/generated/google/apis/apigateway_v1/representations.rb +442 -0
  17. data/generated/google/apis/apigateway_v1/service.rb +1172 -0
  18. data/generated/google/apis/apigateway_v1beta.rb +1 -1
  19. data/generated/google/apis/apigateway_v1beta/classes.rb +19 -8
  20. data/generated/google/apis/apigateway_v1beta/representations.rb +1 -0
  21. data/generated/google/apis/apigee_v1.rb +1 -1
  22. data/generated/google/apis/apigee_v1/classes.rb +24 -22
  23. data/generated/google/apis/apigee_v1/service.rb +50 -48
  24. data/generated/google/apis/artifactregistry_v1.rb +38 -0
  25. data/generated/google/apis/artifactregistry_v1/classes.rb +242 -0
  26. data/generated/google/apis/artifactregistry_v1/representations.rb +116 -0
  27. data/generated/google/apis/artifactregistry_v1/service.rb +210 -0
  28. data/generated/google/apis/artifactregistry_v1beta1.rb +1 -1
  29. data/generated/google/apis/artifactregistry_v1beta1/classes.rb +0 -120
  30. data/generated/google/apis/artifactregistry_v1beta1/representations.rb +0 -62
  31. data/generated/google/apis/artifactregistry_v1beta2.rb +1 -1
  32. data/generated/google/apis/artifactregistry_v1beta2/classes.rb +0 -120
  33. data/generated/google/apis/artifactregistry_v1beta2/representations.rb +0 -62
  34. data/generated/google/apis/chat_v1.rb +1 -1
  35. data/generated/google/apis/chat_v1/service.rb +132 -0
  36. data/generated/google/apis/cloudasset_v1.rb +1 -1
  37. data/generated/google/apis/cloudasset_v1/classes.rb +326 -0
  38. data/generated/google/apis/cloudasset_v1/representations.rb +139 -0
  39. data/generated/google/apis/cloudasset_v1beta1.rb +1 -1
  40. data/generated/google/apis/cloudasset_v1beta1/classes.rb +326 -0
  41. data/generated/google/apis/cloudasset_v1beta1/representations.rb +139 -0
  42. data/generated/google/apis/cloudasset_v1p5beta1.rb +1 -1
  43. data/generated/google/apis/cloudasset_v1p5beta1/classes.rb +326 -0
  44. data/generated/google/apis/cloudasset_v1p5beta1/representations.rb +139 -0
  45. data/generated/google/apis/cloudbuild_v1.rb +1 -1
  46. data/generated/google/apis/cloudbuild_v1/classes.rb +3 -3
  47. data/generated/google/apis/cloudbuild_v1alpha1.rb +1 -1
  48. data/generated/google/apis/cloudbuild_v1alpha1/classes.rb +3 -3
  49. data/generated/google/apis/cloudbuild_v1alpha2.rb +1 -1
  50. data/generated/google/apis/cloudbuild_v1alpha2/classes.rb +3 -3
  51. data/generated/google/apis/cloudidentity_v1beta1.rb +1 -1
  52. data/generated/google/apis/cloudidentity_v1beta1/classes.rb +1 -1
  53. data/generated/google/apis/cloudresourcemanager_v1.rb +1 -1
  54. data/generated/google/apis/cloudresourcemanager_v1/classes.rb +0 -26
  55. data/generated/google/apis/cloudresourcemanager_v1/representations.rb +0 -24
  56. data/generated/google/apis/cloudresourcemanager_v1beta1.rb +1 -1
  57. data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +0 -26
  58. data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +0 -24
  59. data/generated/google/apis/cloudresourcemanager_v2.rb +1 -1
  60. data/generated/google/apis/cloudresourcemanager_v2/classes.rb +0 -26
  61. data/generated/google/apis/cloudresourcemanager_v2/representations.rb +0 -24
  62. data/generated/google/apis/cloudresourcemanager_v2beta1.rb +1 -1
  63. data/generated/google/apis/cloudresourcemanager_v2beta1/classes.rb +0 -26
  64. data/generated/google/apis/cloudresourcemanager_v2beta1/representations.rb +0 -24
  65. data/generated/google/apis/container_v1.rb +1 -1
  66. data/generated/google/apis/container_v1/classes.rb +7 -7
  67. data/generated/google/apis/container_v1beta1.rb +1 -1
  68. data/generated/google/apis/container_v1beta1/classes.rb +7 -7
  69. data/generated/google/apis/content_v2_1.rb +1 -1
  70. data/generated/google/apis/content_v2_1/classes.rb +434 -0
  71. data/generated/google/apis/content_v2_1/representations.rb +187 -0
  72. data/generated/google/apis/content_v2_1/service.rb +116 -0
  73. data/generated/google/apis/datacatalog_v1beta1.rb +1 -1
  74. data/generated/google/apis/datacatalog_v1beta1/classes.rb +6 -0
  75. data/generated/google/apis/datacatalog_v1beta1/representations.rb +1 -0
  76. data/generated/google/apis/dataflow_v1b3.rb +1 -1
  77. data/generated/google/apis/datalabeling_v1beta1.rb +1 -1
  78. data/generated/google/apis/dataproc_v1.rb +1 -1
  79. data/generated/google/apis/dataproc_v1/classes.rb +29 -1
  80. data/generated/google/apis/dataproc_v1/representations.rb +14 -0
  81. data/generated/google/apis/dataproc_v1/service.rb +42 -0
  82. data/generated/google/apis/dataproc_v1beta2.rb +1 -1
  83. data/generated/google/apis/dataproc_v1beta2/classes.rb +29 -1
  84. data/generated/google/apis/dataproc_v1beta2/representations.rb +14 -0
  85. data/generated/google/apis/dataproc_v1beta2/service.rb +42 -0
  86. data/generated/google/apis/dialogflow_v2.rb +1 -1
  87. data/generated/google/apis/dialogflow_v2/classes.rb +4041 -678
  88. data/generated/google/apis/dialogflow_v2/representations.rb +1851 -298
  89. data/generated/google/apis/dialogflow_v2beta1.rb +1 -1
  90. data/generated/google/apis/dialogflow_v2beta1/classes.rb +4047 -684
  91. data/generated/google/apis/dialogflow_v2beta1/representations.rb +1862 -309
  92. data/generated/google/apis/dialogflow_v3.rb +1 -1
  93. data/generated/google/apis/dialogflow_v3/classes.rb +3120 -311
  94. data/generated/google/apis/dialogflow_v3/representations.rb +2002 -617
  95. data/generated/google/apis/dialogflow_v3/service.rb +408 -0
  96. data/generated/google/apis/dialogflow_v3beta1.rb +1 -1
  97. data/generated/google/apis/dialogflow_v3beta1/classes.rb +5145 -2336
  98. data/generated/google/apis/dialogflow_v3beta1/representations.rb +1729 -344
  99. data/generated/google/apis/dialogflow_v3beta1/service.rb +408 -0
  100. data/generated/google/apis/dlp_v2.rb +1 -1
  101. data/generated/google/apis/dlp_v2/service.rb +3 -9
  102. data/generated/google/apis/documentai_v1beta2.rb +1 -1
  103. data/generated/google/apis/documentai_v1beta2/classes.rb +5 -92
  104. data/generated/google/apis/documentai_v1beta2/representations.rb +2 -15
  105. data/generated/google/apis/documentai_v1beta3.rb +1 -1
  106. data/generated/google/apis/documentai_v1beta3/classes.rb +5 -92
  107. data/generated/google/apis/documentai_v1beta3/representations.rb +2 -15
  108. data/generated/google/apis/gameservices_v1.rb +1 -1
  109. data/generated/google/apis/gameservices_v1/service.rb +14 -14
  110. data/generated/google/apis/gameservices_v1beta.rb +1 -1
  111. data/generated/google/apis/gameservices_v1beta/service.rb +14 -14
  112. data/generated/google/apis/localservices_v1.rb +4 -1
  113. data/generated/google/apis/manufacturers_v1.rb +1 -1
  114. data/generated/google/apis/manufacturers_v1/classes.rb +2 -2
  115. data/generated/google/apis/monitoring_v3.rb +1 -1
  116. data/generated/google/apis/monitoring_v3/classes.rb +2 -2
  117. data/generated/google/apis/notebooks_v1.rb +1 -1
  118. data/generated/google/apis/notebooks_v1/classes.rb +13 -0
  119. data/generated/google/apis/notebooks_v1/representations.rb +12 -0
  120. data/generated/google/apis/notebooks_v1/service.rb +34 -0
  121. data/generated/google/apis/prod_tt_sasportal_v1alpha1.rb +1 -1
  122. data/generated/google/apis/prod_tt_sasportal_v1alpha1/classes.rb +0 -37
  123. data/generated/google/apis/prod_tt_sasportal_v1alpha1/representations.rb +0 -18
  124. data/generated/google/apis/recommendationengine_v1beta1.rb +1 -1
  125. data/generated/google/apis/recommendationengine_v1beta1/service.rb +2 -1
  126. data/generated/google/apis/securitycenter_v1.rb +1 -1
  127. data/generated/google/apis/securitycenter_v1/classes.rb +18 -10
  128. data/generated/google/apis/securitycenter_v1/representations.rb +1 -0
  129. data/generated/google/apis/securitycenter_v1/service.rb +30 -30
  130. data/generated/google/apis/securitycenter_v1beta1.rb +1 -1
  131. data/generated/google/apis/securitycenter_v1beta1/classes.rb +7 -0
  132. data/generated/google/apis/securitycenter_v1beta1/representations.rb +1 -0
  133. data/generated/google/apis/securitycenter_v1beta2.rb +1 -1
  134. data/generated/google/apis/securitycenter_v1beta2/classes.rb +7 -0
  135. data/generated/google/apis/securitycenter_v1beta2/representations.rb +1 -0
  136. data/generated/google/apis/servicemanagement_v1.rb +1 -1
  137. data/generated/google/apis/servicemanagement_v1/classes.rb +11 -10
  138. data/generated/google/apis/sqladmin_v1beta4.rb +1 -1
  139. data/generated/google/apis/sqladmin_v1beta4/classes.rb +7 -7
  140. data/generated/google/apis/sqladmin_v1beta4/service.rb +4 -1
  141. data/generated/google/apis/storagetransfer_v1.rb +1 -1
  142. data/generated/google/apis/storagetransfer_v1/classes.rb +25 -0
  143. data/generated/google/apis/storagetransfer_v1/representations.rb +3 -0
  144. data/generated/google/apis/webmasters_v3/classes.rb +8 -0
  145. data/generated/google/apis/webmasters_v3/representations.rb +1 -0
  146. data/generated/google/apis/youtube_v3.rb +1 -1
  147. data/generated/google/apis/youtube_v3/classes.rb +18 -143
  148. data/generated/google/apis/youtube_v3/representations.rb +0 -57
  149. data/generated/google/apis/youtube_v3/service.rb +0 -43
  150. data/lib/google/apis/version.rb +1 -23
  151. metadata +27 -263
  152. data/.github/CONTRIBUTING.md +0 -31
  153. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -36
  154. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -21
  155. data/.github/ISSUE_TEMPLATE/support_request.md +0 -7
  156. data/.github/workflows/autoapprove.yml +0 -49
  157. data/.github/workflows/release-please.yml +0 -57
  158. data/.gitignore +0 -23
  159. data/.kokoro/build.bat +0 -11
  160. data/.kokoro/build.sh +0 -4
  161. data/.kokoro/continuous/common.cfg +0 -25
  162. data/.kokoro/continuous/linux.cfg +0 -25
  163. data/.kokoro/continuous/osx.cfg +0 -8
  164. data/.kokoro/continuous/post.cfg +0 -30
  165. data/.kokoro/continuous/windows.cfg +0 -29
  166. data/.kokoro/osx.sh +0 -4
  167. data/.kokoro/presubmit/common.cfg +0 -24
  168. data/.kokoro/presubmit/linux.cfg +0 -24
  169. data/.kokoro/presubmit/osx.cfg +0 -8
  170. data/.kokoro/presubmit/windows.cfg +0 -29
  171. data/.kokoro/release.cfg +0 -94
  172. data/.kokoro/trampoline.bat +0 -10
  173. data/.kokoro/trampoline.sh +0 -4
  174. data/.repo-metadata.json +0 -5
  175. data/.rspec +0 -2
  176. data/.rubocop.yml +0 -12
  177. data/.rubocop_todo.yml +0 -63
  178. data/CODE_OF_CONDUCT.md +0 -43
  179. data/Gemfile +0 -55
  180. data/MIGRATING.md +0 -215
  181. data/README.md +0 -402
  182. data/Rakefile +0 -131
  183. data/api_list_config.yaml +0 -9
  184. data/api_names.yaml +0 -1082
  185. data/bin/generate-api +0 -194
  186. data/docs/api-keys.md +0 -20
  187. data/docs/auth.md +0 -53
  188. data/docs/client-secrets.md +0 -69
  189. data/docs/getting-started.md +0 -340
  190. data/docs/installation.md +0 -0
  191. data/docs/logging.md +0 -34
  192. data/docs/media-upload.md +0 -25
  193. data/docs/oauth-installed.md +0 -191
  194. data/docs/oauth-server.md +0 -133
  195. data/docs/oauth-web.md +0 -280
  196. data/docs/oauth.md +0 -268
  197. data/docs/pagination.md +0 -29
  198. data/docs/performance.md +0 -25
  199. data/google-api-client.gemspec +0 -36
  200. data/lib/google/api_client/auth/installed_app.rb +0 -143
  201. data/lib/google/api_client/auth/key_utils.rb +0 -94
  202. data/lib/google/api_client/auth/storage.rb +0 -104
  203. data/lib/google/api_client/auth/storages/file_store.rb +0 -57
  204. data/lib/google/api_client/auth/storages/redis_store.rb +0 -59
  205. data/lib/google/api_client/client_secrets.rb +0 -176
  206. data/lib/google/apis.rb +0 -58
  207. data/lib/google/apis/core/api_command.rb +0 -209
  208. data/lib/google/apis/core/base_service.rb +0 -447
  209. data/lib/google/apis/core/batch.rb +0 -236
  210. data/lib/google/apis/core/composite_io.rb +0 -97
  211. data/lib/google/apis/core/download.rb +0 -118
  212. data/lib/google/apis/core/hashable.rb +0 -44
  213. data/lib/google/apis/core/http_command.rb +0 -447
  214. data/lib/google/apis/core/json_representation.rb +0 -153
  215. data/lib/google/apis/core/multipart.rb +0 -135
  216. data/lib/google/apis/core/upload.rb +0 -273
  217. data/lib/google/apis/errors.rb +0 -89
  218. data/lib/google/apis/generator.rb +0 -71
  219. data/lib/google/apis/generator/annotator.rb +0 -339
  220. data/lib/google/apis/generator/helpers.rb +0 -76
  221. data/lib/google/apis/generator/model.rb +0 -187
  222. data/lib/google/apis/generator/template.rb +0 -124
  223. data/lib/google/apis/generator/templates/_class.tmpl +0 -43
  224. data/lib/google/apis/generator/templates/_method.tmpl +0 -92
  225. data/lib/google/apis/generator/templates/_representation.tmpl +0 -51
  226. data/lib/google/apis/generator/templates/_representation_stub.tmpl +0 -17
  227. data/lib/google/apis/generator/templates/_representation_type.tmpl +0 -10
  228. data/lib/google/apis/generator/templates/classes.rb.tmpl +0 -29
  229. data/lib/google/apis/generator/templates/module.rb.tmpl +0 -40
  230. data/lib/google/apis/generator/templates/representations.rb.tmpl +0 -32
  231. data/lib/google/apis/generator/templates/service.rb.tmpl +0 -61
  232. data/lib/google/apis/options.rb +0 -116
  233. data/rakelib/devsite/devsite_builder.rb +0 -126
  234. data/rakelib/devsite/link_checker.rb +0 -64
  235. data/rakelib/devsite/repo_metadata.rb +0 -56
  236. data/rakelib/metrics.rake +0 -22
  237. data/rakelib/rubocop.rake +0 -10
  238. data/rakelib/spec.rake +0 -11
  239. data/rakelib/yard.rake +0 -11
  240. data/samples/cli/.env +0 -4
  241. data/samples/cli/Gemfile +0 -7
  242. data/samples/cli/README.md +0 -51
  243. data/samples/cli/google-api-samples +0 -32
  244. data/samples/cli/lib/base_cli.rb +0 -95
  245. data/samples/cli/lib/samples/adsense.rb +0 -99
  246. data/samples/cli/lib/samples/analytics.rb +0 -80
  247. data/samples/cli/lib/samples/androidpublisher.rb +0 -47
  248. data/samples/cli/lib/samples/bigquery.rb +0 -101
  249. data/samples/cli/lib/samples/calendar.rb +0 -83
  250. data/samples/cli/lib/samples/drive.rb +0 -82
  251. data/samples/cli/lib/samples/gmail.rb +0 -157
  252. data/samples/cli/lib/samples/pubsub.rb +0 -114
  253. data/samples/cli/lib/samples/sheets.rb +0 -61
  254. data/samples/cli/lib/samples/translate.rb +0 -44
  255. data/samples/cli/lib/samples/vision.rb +0 -69
  256. data/samples/cli/lib/samples/you_tube.rb +0 -47
  257. data/samples/web/Gemfile +0 -9
  258. data/samples/web/README.md +0 -44
  259. data/samples/web/app.rb +0 -120
  260. data/samples/web/views/calendar.erb +0 -34
  261. data/samples/web/views/drive.erb +0 -33
  262. data/samples/web/views/home.erb +0 -34
  263. data/samples/web/views/layout.erb +0 -40
  264. data/synth.py +0 -40
@@ -1,89 +0,0 @@
1
- # Copyright 2015 Google Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- module Google
16
- module Apis
17
- # Base error, capable of wrapping another
18
- class Error < StandardError
19
- attr_reader :status_code
20
- attr_reader :header
21
- attr_reader :body
22
-
23
- def initialize(err, status_code: nil, header: nil, body: nil)
24
- @cause = nil
25
-
26
- if err.respond_to?(:backtrace)
27
- super(err.message)
28
- @cause = err
29
- else
30
- super(err.to_s)
31
- end
32
- @status_code = status_code
33
- @header = header.dup unless header.nil?
34
- @body = body
35
- end
36
-
37
- def backtrace
38
- if @cause
39
- @cause.backtrace
40
- else
41
- super
42
- end
43
- end
44
-
45
- def inspect
46
- extra = ""
47
- extra << " status_code: #{status_code.inspect}" unless status_code.nil?
48
- extra << " header: #{header.inspect}" unless header.nil?
49
- extra << " body: #{body.inspect}" unless body.nil?
50
-
51
- "#<#{self.class.name}: #{message}#{extra}>"
52
- end
53
- end
54
-
55
- # An error which is raised when there is an unexpected response or other
56
- # transport error that prevents an operation from succeeding.
57
- class TransmissionError < Error
58
- end
59
-
60
- # An exception that is raised if a redirect is required
61
- #
62
- class RedirectError < Error
63
- end
64
-
65
- # A 4xx class HTTP error occurred.
66
- class ClientError < Error
67
- end
68
-
69
- # A 4xx class HTTP error occurred.
70
- class RateLimitError < Error
71
- end
72
-
73
- # A 403 HTTP error occurred.
74
- class ProjectNotLinkedError < Error
75
- end
76
-
77
- # A 401 HTTP error occurred.
78
- class AuthorizationError < Error
79
- end
80
-
81
- # A 5xx class HTTP error occurred.
82
- class ServerError < Error
83
- end
84
-
85
- # Error class for problems in batch requests.
86
- class BatchError < Error
87
- end
88
- end
89
- end
@@ -1,71 +0,0 @@
1
- # Copyright 2015 Google Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'google/apis/discovery_v1'
16
- require 'google/apis/generator/annotator'
17
- require 'google/apis/generator/model'
18
- require 'google/apis/generator/template'
19
- require 'active_support/inflector'
20
- require 'yaml'
21
-
22
- module Google
23
- module Apis
24
- # Generates ruby classes for APIs from discovery documents
25
- # @private
26
- class Generator
27
- Discovery = Google::Apis::DiscoveryV1
28
-
29
- # Load templates
30
- def initialize(api_names: nil, api_names_out: nil)
31
- @names = Google::Apis::Generator::Names.new(api_names_out || File.join(Google::Apis::ROOT, 'api_names_out.yaml'),
32
- api_names || File.join(Google::Apis::ROOT, 'api_names.yaml'))
33
- @module_template = Template.load('module.rb')
34
- @service_template = Template.load('service.rb')
35
- @classes_template = Template.load('classes.rb')
36
- @representations_template = Template.load('representations.rb')
37
- end
38
-
39
- # Generates ruby source for an API
40
- #
41
- # @param [String] json
42
- # API Description, as JSON text
43
- # @return [Hash<String,String>]
44
- # Hash of generated files keyed by path
45
- def render(json)
46
- api = parse_description(json)
47
- Annotator.process(api, @names)
48
- base_path = ActiveSupport::Inflector.underscore(api.qualified_name)
49
- context = {
50
- 'api' => api
51
- }
52
- files = {}
53
- files[base_path + '.rb'] = @module_template.render(context)
54
- files[File.join(base_path, 'service.rb')] = @service_template.render(context)
55
- files[File.join(base_path, 'classes.rb')] = @classes_template.render(context)
56
- files[File.join(base_path, 'representations.rb')] = @representations_template.render(context)
57
- files
58
- end
59
-
60
- # Dump mapping of API names
61
- # @return [String] Mapping of paths to ruby names in YAML format
62
- def dump_api_names
63
- @names.dump
64
- end
65
-
66
- def parse_description(json)
67
- Discovery::RestDescription::Representation.new(Discovery::RestDescription.new).from_json(json)
68
- end
69
- end
70
- end
71
- end
@@ -1,339 +0,0 @@
1
- # Copyright 2015 Google Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'logger'
16
- require 'erb'
17
- require 'yaml'
18
- require 'json'
19
- require 'active_support/inflector'
20
- require 'google/apis/core/logging'
21
- require 'google/apis/generator/template'
22
- require 'google/apis/generator/model'
23
- require 'google/apis/generator/helpers'
24
- require 'addressable/uri'
25
-
26
- module Google
27
- module Apis
28
-
29
- # @private
30
- class Generator
31
-
32
- # Helper for picking names for methods, properties, types, etc. Performs various normaliations
33
- # as well as allows for overriding individual names from a configuration file for cases
34
- # where algorithmic approaches produce poor APIs.
35
- class Names
36
- ActiveSupport::Inflector.inflections do |inflections|
37
- inflections.uncountable('send_as', 'as')
38
- inflections.irregular('drive', 'drives')
39
- inflections.irregular('teamdrive', 'teamdrives')
40
- end
41
-
42
- include Google::Apis::Core::Logging
43
- include NameHelpers
44
-
45
- def initialize(names_out_file_path = nil, names_file_path = nil)
46
- if names_out_file_path && File.file?(names_out_file_path)
47
- logger.info { sprintf('Loading API names from %s', names_out_file_path) }
48
- @names = YAML.load(File.read(names_out_file_path)) || {}
49
- else
50
- @names = {}
51
- end
52
- if names_file_path && File.file?(names_file_path)
53
- logger.info { sprintf('Loading API names from %s', names_file_path) }
54
- @names = @names.merge(YAML.load(File.read(names_file_path)) || {})
55
- end
56
- @path = []
57
- end
58
-
59
- def with_path(path)
60
- @path.push(path)
61
- begin
62
- yield
63
- ensure
64
- @path.pop
65
- end
66
- end
67
-
68
- def infer_parameter_name
69
- pick_name(normalize_param_name(@path.last))
70
- end
71
-
72
- def infer_property_name
73
- pick_name(normalize_property_name(@path.last))
74
- end
75
-
76
- def pick_name(alt_name)
77
- preferred_name = @names[key]
78
- if preferred_name && preferred_name == alt_name
79
- # logger.warn { sprintf("Unnecessary name override '%s': %s", key, alt_name) }
80
- elsif preferred_name.nil?
81
- preferred_name = @names[key] = alt_name
82
- end
83
- preferred_name
84
- end
85
-
86
- def [](key)
87
- @names[key]
88
- end
89
-
90
- def []=(key, value)
91
- @names[key] = value
92
- end
93
-
94
- def dump
95
- YAML.dump(Hash[@names.sort])
96
- end
97
-
98
- def key
99
- @path.reduce('') { |a, e| a + '/' + e }
100
- end
101
-
102
- def option(opt_name)
103
- @names[sprintf('%s?%s', key, opt_name)]
104
- end
105
-
106
- # For RPC style methods, pick a name based off the request objects.
107
- # @param [Google::Apis::DiscoveryV1::RestMethod] method
108
- # @param [Boolean] pick_name
109
- # Fragment of the discovery doc describing the method
110
- def infer_method_name_for_rpc(method, pick_name = true)
111
- return nil if method.request.nil?
112
- parts = method.id.split('.')
113
- parts.shift
114
- verb = ActiveSupport::Inflector.underscore(parts.pop)
115
- match = method.request._ref.match(/(.*)(?i:request)/)
116
- return nil if match.nil?
117
- name = ActiveSupport::Inflector.underscore(match[1])
118
- return nil unless name == verb || name.start_with?(verb + '_')
119
- if !parts.empty?
120
- resource_name = ActiveSupport::Inflector.singularize(parts.pop)
121
- resource_name = ActiveSupport::Inflector.underscore(resource_name)
122
- if !name.include?(resource_name)
123
- name = name.split('_').insert(1, resource_name).join('_')
124
- end
125
- end
126
- if pick_name
127
- pick_name(name)
128
- else
129
- name
130
- end
131
- end
132
-
133
- # For REST style methods, build a method name from the verb/resource(s) in the method
134
- # id. IDs are in the form <api>.<resource>.<verb>
135
- # @param [Google::Apis::DiscoveryV1::RestMethod] method
136
- # Fragment of the discovery doc describing the method
137
- def infer_method_name_from_id(method)
138
- parts = method.id.split('.')
139
- parts.shift
140
- verb = ActiveSupport::Inflector.underscore(parts.pop)
141
- return verb if parts.empty?
142
- resource_name = ActiveSupport::Inflector.underscore(parts.pop)
143
- if pluralize_method?(verb)
144
- resource_name = ActiveSupport::Inflector.pluralize(resource_name)
145
- else
146
- resource_name = ActiveSupport::Inflector.singularize(resource_name)
147
- end
148
- if parts.empty?
149
- resource_path = resource_name
150
- else
151
- resource_path = parts.map do |p|
152
- p = ActiveSupport::Inflector.singularize(p)
153
- ActiveSupport::Inflector.underscore(p)
154
- end.join('_') + '_' + resource_name
155
- end
156
- method_name = verb.split('_').insert(1, resource_path.split('_')).join('_')
157
- pick_name(method_name)
158
- end
159
- end
160
-
161
- # Modifies an API description to support ruby code generation. Primarily does:
162
- # - Ensure all names follow appopriate ruby conventions
163
- # - Maps types to ruby types, classes, and resolves $refs
164
- # - Attempts to simplify names where possible to make APIs more sensible
165
- class Annotator
166
- include NameHelpers
167
- include Google::Apis::Core::Logging
168
-
169
- # Prepare the API for the templates.
170
- # @param [Google::Apis::DiscoveryV1::RestDescription] description
171
- # API Description
172
- def self.process(description, api_names = nil)
173
- Annotator.new(description, api_names).annotate_api
174
- end
175
-
176
- # @param [Google::Apis::DiscoveryV1::RestDescription] description
177
- # API Description
178
- # @param [Google::Api::Generator::Names] api_names
179
- # Name helper instanace
180
- def initialize(description, api_names = nil)
181
- api_names = Names.new if api_names.nil?
182
- @names = api_names
183
- @rest_description = description
184
- @registered_types = []
185
- @deferred_types = []
186
- @strip_prefixes = []
187
- @all_methods = {}
188
- @dup_method_names_for_rpc = collect_dup_method_names_for_rpc
189
- @path = []
190
- end
191
-
192
- def collect_method_names_for_rpc(resource, method_names_for_rpc)
193
- resource.api_methods.each do |_k, v|
194
- # First look for the method name in the `@names` hash. If there's
195
- # no override set, generate it without inserting the generated name
196
- # into the `@names` hash.
197
- method_name_for_rpc = @names[@names.key]
198
- if method_name_for_rpc.nil?
199
- method_name_for_rpc = @names.infer_method_name_for_rpc(v, false)
200
- end
201
- method_names_for_rpc << method_name_for_rpc if method_name_for_rpc
202
- end unless resource.api_methods.nil?
203
-
204
- resource.resources.each do |_k, v|
205
- collect_method_names_for_rpc(v, method_names_for_rpc)
206
- end unless resource.resources.nil?
207
- end
208
-
209
- def collect_dup_method_names_for_rpc
210
- method_names_for_rpc = []
211
- collect_method_names_for_rpc(@rest_description, method_names_for_rpc)
212
- method_names_for_rpc.group_by{ |e| e }.select { |k, v| v.size > 1 }.map(&:first)
213
- end
214
-
215
- def annotate_api
216
- @names.with_path(@rest_description.id) do
217
- @strip_prefixes << @rest_description.name
218
- if @rest_description.auth
219
- @rest_description.auth.oauth2.scopes.each do |key, value|
220
- value.constant = constantize_scope(key)
221
- end
222
- end
223
- @rest_description.force_alt_json = @names.option('force_alt_json')
224
- annotate_parameters(@rest_description.parameters)
225
- annotate_resource(@rest_description.name, @rest_description)
226
- @rest_description.schemas.each do |k, v|
227
- annotate_type(k, v, @rest_description)
228
- end unless @rest_description.schemas.nil?
229
- end
230
- resolve_type_references
231
- resolve_variants
232
- end
233
-
234
- def annotate_type(name, type, parent)
235
- @names.with_path(name) do
236
- type.name = name
237
- type.path = @names.key
238
- type.generated_name = @names.infer_property_name
239
- if type.type == 'object'
240
- type.generated_class_name = ActiveSupport::Inflector.camelize(type.generated_name)
241
- @registered_types << type
242
- end
243
- type.parent = parent
244
- @deferred_types << type if type._ref
245
- type.properties.each do |k, v|
246
- annotate_type(k, v, type)
247
- end unless type.properties.nil?
248
- if type.additional_properties
249
- type.type = 'hash'
250
- annotate_type(ActiveSupport::Inflector.singularize(type.generated_name), type.additional_properties,
251
- parent)
252
- end
253
- annotate_type(ActiveSupport::Inflector.singularize(type.generated_name), type.items, parent) if type.items
254
- end
255
- end
256
-
257
- def annotate_resource(name, resource, parent_resource = nil)
258
- @strip_prefixes << name
259
- resource.parent = parent_resource unless parent_resource.nil?
260
- resource.api_methods.each do |_k, v|
261
- annotate_method(v, resource)
262
- end unless resource.api_methods.nil?
263
-
264
- resource.resources.each do |k, v|
265
- annotate_resource(k, v, resource)
266
- end unless resource.resources.nil?
267
- end
268
-
269
- def annotate_method(method, parent_resource = nil)
270
- @names.with_path(method.id) do
271
- method.parent = parent_resource
272
- # Grab the method name generated from the request object without
273
- # inserting into, or querying, the names hash.
274
- method_name_for_rpc = @names.infer_method_name_for_rpc(method, false)
275
- # If `method_name_for_rpc` is a duplicate (more than one method in
276
- # the API will generate this name), generate the method name from
277
- # the method ID instead.
278
- if @dup_method_names_for_rpc.include?(method_name_for_rpc)
279
- method.generated_name = @names.infer_method_name_from_id(method)
280
- # Otherwise, proceed as normal.
281
- elsif method_name_for_rpc
282
- method.generated_name = @names.infer_method_name_for_rpc(method)
283
- else
284
- method.generated_name = @names.infer_method_name_from_id(method)
285
- end
286
- check_duplicate_method(method)
287
- annotate_parameters(method.parameters)
288
- end
289
- end
290
-
291
- def annotate_parameters(parameters)
292
- parameters.each do |key, value|
293
- @names.with_path(key) do
294
- value.name = key
295
- value.generated_name = @names.infer_parameter_name
296
- @deferred_types << value if value._ref
297
- end
298
- end unless parameters.nil?
299
- end
300
-
301
- def resolve_type_references
302
- @deferred_types.each do |type|
303
- if type._ref
304
- ref = @rest_description.schemas[type._ref]
305
- ivars = ref.instance_variables - [:@name, :@generated_name]
306
- (ivars).each do |var|
307
- type.instance_variable_set(var, ref.instance_variable_get(var))
308
- end
309
- end
310
- end
311
- end
312
-
313
- def resolve_variants
314
- @deferred_types.each do |type|
315
- if type.variant
316
- type.variant.map.each do |v|
317
- ref = @rest_description.schemas[v._ref]
318
- ref.base_ref = type
319
- ref.discriminant = type.variant.discriminant
320
- ref.discriminant_value = v.type_value
321
- end
322
- end
323
- end
324
- end
325
-
326
- def check_duplicate_method(m)
327
- if @all_methods.include?(m.generated_name)
328
- logger.error do
329
- sprintf('Duplicate method %s generated, conflicting paths %s and %s',
330
- m.generated_name, @names.key, @all_methods[m.generated_name])
331
- end
332
- fail 'Duplicate name generated'
333
- end
334
- @all_methods[m.generated_name] = @names.key
335
- end
336
- end
337
- end
338
- end
339
- end