google-api-client 0.52.0 → 0.53.0

Sign up to get free protection for your applications and to get access to all the features.
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