gapic-common 0.4.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e757f6cec4043dffd4d2b89e6f3fc02297074d6a28b361331fa16fbb0eef5d9b
4
- data.tar.gz: 4dc4b0631dea8a91020bb7a004d9f17cfa48b9c2face5ef7ceb515a6a6ac4bfa
3
+ metadata.gz: fb55a8128893e307e6f1237157b9456481ce7aa2e09a6dbeb19786359cf774ef
4
+ data.tar.gz: 37b93b8e7b2d444679279d6f9e4b87b1ccfc460d4c9fc041ca390a22f115e4f5
5
5
  SHA512:
6
- metadata.gz: 30b58a2dd114652b524b2878745cc16028c0d65b197a4f3cf8c112883165b0509697a4909fffc19874efb08ee47d059e44b15151b9a74962bbcadac0c085054f
7
- data.tar.gz: b6e463d4d9ff2c0366d334503da2660d403ee97c40529db65ec0929cf0547407e458d20dd37031536c1129c0439e11d8cce6975baa08f4df14369f475a690b0e
6
+ metadata.gz: b635e99c7a32cd3926e278312103197299a48679ea3d5ce6286ab7e5a5873cbb718106e3e69ac28b33316c5ff61c7b22fe67d5499b62298d1dc75c1f7f70eda6
7
+ data.tar.gz: 81cefba38844981e6c137aff1d2de3fc5282e77b93c7761d20ae04007e7d46d07529b29fcf8315e98505268d101c500ad8e8d8e3df38fab5e0f4d8edbb914e4d
data/CHANGELOG.md CHANGED
@@ -1,6 +1,22 @@
1
1
  # Release History
2
2
 
3
- ### 0.4.2 / 20201-06-07
3
+ ### 0.7.0 / 2021-08-03
4
+
5
+ * Require googleauth 0.17 for proper support of JWT credentials with custom scopes
6
+
7
+ ### 0.6.0 / 2021-07-22
8
+
9
+ * Added helper for REST pagination
10
+
11
+ ### 0.5.0 / 2021-06-15
12
+
13
+ * Provide a way to create `x-goog-api-client` headers with rest library version and/or without grpc library version
14
+
15
+ ### 0.4.3 / 2021-06-10
16
+
17
+ * Fix file permissions.
18
+
19
+ ### 0.4.2 / 2021-06-07
4
20
 
5
21
  * Expand googleauth dependency to include 1.x
6
22
  * Add a REST PUT method helper to Gapic::Rest.
@@ -14,6 +14,6 @@
14
14
 
15
15
  module Gapic
16
16
  module Common
17
- VERSION = "0.4.2".freeze
17
+ VERSION = "0.7.0".freeze
18
18
  end
19
19
  end
data/lib/gapic/headers.rb CHANGED
@@ -26,17 +26,27 @@ module Gapic
26
26
  # @param gax_version [String] The Gapic version. Defaults to `Gapic::Common::VERSION`.
27
27
  # @param gapic_version [String] The Gapic version.
28
28
  # @param grpc_version [String] The GRPC version. Defaults to `GRPC::VERSION`.
29
- def self.x_goog_api_client ruby_version: nil, lib_name: nil, lib_version: nil,
30
- gax_version: nil, gapic_version: nil, grpc_version: nil
29
+ # @param rest_version [String] The Rest Library (Faraday) version. Defaults to `Faraday::VERSION`.
30
+ # @param transports_version_send [Array] Which transports to send versions for.
31
+ # Allowed values to contain are:
32
+ # `:grpc` to send the GRPC library version (if defined)
33
+ # `:rest` to send the REST library version (if defined)
34
+ # Defaults to `[:grpc]`
35
+ def self.x_goog_api_client ruby_version: nil, lib_name: nil, lib_version: nil, gax_version: nil,
36
+ gapic_version: nil, grpc_version: nil, rest_version: nil,
37
+ transports_version_send: [:grpc]
38
+
31
39
  ruby_version ||= ::RUBY_VERSION
32
40
  gax_version ||= ::Gapic::Common::VERSION
33
41
  grpc_version ||= ::GRPC::VERSION if defined? ::GRPC
42
+ rest_version ||= ::Faraday::VERSION if defined? ::Faraday
34
43
 
35
44
  x_goog_api_client_header = ["gl-ruby/#{ruby_version}"]
36
45
  x_goog_api_client_header << "#{lib_name}/#{lib_version}" if lib_name
37
46
  x_goog_api_client_header << "gax/#{gax_version}"
38
47
  x_goog_api_client_header << "gapic/#{gapic_version}" if gapic_version
39
- x_goog_api_client_header << "grpc/#{grpc_version}" if grpc_version
48
+ x_goog_api_client_header << "grpc/#{grpc_version}" if grpc_version && transports_version_send.include?(:grpc)
49
+ x_goog_api_client_header << "rest/#{rest_version}" if rest_version && transports_version_send.include?(:rest)
40
50
  x_goog_api_client_header.join " ".freeze
41
51
  end
42
52
  end
data/lib/gapic/rest.rb CHANGED
@@ -24,4 +24,6 @@ require "gapic/protobuf"
24
24
  require "gapic/rest/client_stub"
25
25
  require "gapic/rest/error"
26
26
  require "gapic/rest/faraday_middleware"
27
+ require "gapic/rest/operation"
28
+ require "gapic/rest/paged_enumerable"
27
29
  require "json"
@@ -0,0 +1,33 @@
1
+ # Copyright 2021 Google LLC
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
+ # https://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 Gapic
16
+ module Rest
17
+ ##
18
+ # A base class for the wrappers over the long-running operations to the response of a REST LRO method.
19
+ #
20
+ # @attribute [r] operation
21
+ # @return [Object] The wrapped operation object.
22
+ class BaseOperation
23
+ attr_reader :operation
24
+
25
+ ##
26
+ # @private
27
+ # @param operation [Object] The wrapped operation object.
28
+ def initialize operation
29
+ @operation = operation
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,225 @@
1
+ # Copyright 2021 Google LLC
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
+ # https://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 Gapic
16
+ module Rest
17
+ ##
18
+ # A class to provide the Enumerable interface to the response of a REST paginated method.
19
+ # PagedEnumerable assumes response message holds a list of resources and the token to the next page.
20
+ #
21
+ # PagedEnumerable provides the enumerations over the resource data, and also provides the enumerations over the
22
+ # pages themselves.
23
+ #
24
+ # @example normal iteration over resources.
25
+ # paged_enumerable.each { |resource| puts resource }
26
+ #
27
+ # @example per-page iteration.
28
+ # paged_enumerable.each_page { |page| puts page }
29
+ #
30
+ # @example Enumerable over pages.
31
+ # paged_enumerable.each_page do |page|
32
+ # page.each { |resource| puts resource }
33
+ # end
34
+ #
35
+ # @example more exact operations over pages.
36
+ # while some_condition()
37
+ # page = paged_enumerable.page
38
+ # do_something(page)
39
+ # break if paged_enumerable.next_page?
40
+ # paged_enumerable.next_page
41
+ # end
42
+ #
43
+ # @attribute [r] page
44
+ # @return [Page] The current page object.
45
+ #
46
+ class PagedEnumerable
47
+ include Enumerable
48
+
49
+ attr_reader :page
50
+
51
+ ##
52
+ # @private
53
+ # @param service_stub [Object] The REST service_stub with the baseline implementation for the wrapped method.
54
+ # @param method_name [Symbol] The REST method name that is being wrapped.
55
+ # @param request [Object] The request object.
56
+ # @param response [Object] The response object.
57
+ # @param options [Gapic::CallOptions] The options for making the RPC call.
58
+ # @param format_resource [Proc] A Proc object to format the resource object. The Proc should accept response as an
59
+ # argument, and return a formatted resource object. Optional.
60
+ #
61
+ def initialize service_stub, method_name, resource_field_name, request, response, options, format_resource: nil
62
+ @service_stub = service_stub
63
+ @method_name = method_name
64
+ @resource_field_name = resource_field_name
65
+ @request = request
66
+ @response = response
67
+ @options = options
68
+ @format_resource = format_resource
69
+
70
+ @page = Page.new response, resource_field_name, format_resource: @format_resource
71
+ end
72
+
73
+ ##
74
+ # Iterate over the individual resources, automatically requesting new pages as needed.
75
+ #
76
+ # @yield [Object] Gives the resource objects in the stream.
77
+ #
78
+ # @return [Enumerator] if no block is provided
79
+ #
80
+ def each &block
81
+ return enum_for :each unless block_given?
82
+
83
+ each_page do |page|
84
+ page.each(&block)
85
+ end
86
+ end
87
+
88
+ ##
89
+ # Iterate over the pages.
90
+ #
91
+ # @yield [Page] Gives the pages in the stream.
92
+ #
93
+ # @return [Enumerator] if no block is provided
94
+ #
95
+ def each_page
96
+ return enum_for :each_page unless block_given?
97
+
98
+ loop do
99
+ break if @page.nil?
100
+ yield @page
101
+ next_page!
102
+ end
103
+ end
104
+
105
+ ##
106
+ # True if there is at least one more page of results.
107
+ #
108
+ # @return [Boolean]
109
+ #
110
+ def next_page?
111
+ !next_page_token.nil? && !next_page_token.empty?
112
+ end
113
+
114
+ ##
115
+ # Load the next page and set it as the current page.
116
+ # If there is no next page, sets nil as a current page.
117
+ #
118
+ # @return [Page, nil] the new page object.
119
+ #
120
+ def next_page!
121
+ unless next_page?
122
+ @page = nil
123
+ return @page
124
+ end
125
+
126
+ next_request = @request.dup
127
+ next_request.page_token = @page.next_page_token
128
+
129
+ @response = @service_stub.send @method_name, next_request, @options
130
+ @page = Page.new @response, @resource_field_name, format_resource: @format_resource
131
+ end
132
+ alias next_page next_page!
133
+
134
+ ##
135
+ # The page token to be used for the next RPC call, or the empty string if there is no next page.
136
+ # nil if the iteration is complete.
137
+ #
138
+ # @return [String, nil]
139
+ #
140
+ def next_page_token
141
+ @page&.next_page_token
142
+ end
143
+
144
+ ##
145
+ # The current response object, for the current page.
146
+ # nil if the iteration is complete.
147
+ #
148
+ # @return [Object, nil]
149
+ #
150
+ def response
151
+ @page&.response
152
+ end
153
+
154
+ ##
155
+ # A class to represent a page in a PagedEnumerable. This also implements Enumerable, so it can iterate over the
156
+ # resource elements.
157
+ #
158
+ # @attribute [r] response
159
+ # @return [Object] the response object for the page.
160
+ class Page
161
+ include Enumerable
162
+ attr_reader :response
163
+
164
+ ##
165
+ # @private
166
+ # @param response [Object] The response object for the page.
167
+ # @param resource_field [String] The name of the field in response which holds the resources.
168
+ # @param format_resource [Proc, nil] A Proc object to format the resource object. Default nil (no formatting).
169
+ # The Proc should accept response as an argument, and return a formatted resource object. Optional.
170
+ #
171
+ def initialize response, resource_field, format_resource: nil
172
+ @response = response
173
+ @resource_field = resource_field
174
+ @format_resource = format_resource
175
+ end
176
+
177
+ ##
178
+ # Iterate over the resources.
179
+ #
180
+ # @yield [Object] Gives the resource objects in the page.
181
+ #
182
+ # @return [Enumerator] if no block is provided
183
+ #
184
+ def each
185
+ return enum_for :each unless block_given?
186
+
187
+ # We trust that the field exists and is an Enumerable
188
+ resources.each do |resource|
189
+ resource = @format_resource.call resource if @format_resource
190
+ yield resource
191
+ end
192
+ end
193
+
194
+ ##
195
+ # The page token to be used for the next RPC call, or the empty string if there is no next page.
196
+ #
197
+ # @return [String]
198
+ #
199
+ def next_page_token
200
+ @response.next_page_token
201
+ end
202
+
203
+ ##
204
+ # Whether the next_page_token exists and is not empty
205
+ #
206
+ # @return [Boolean]
207
+ #
208
+ def next_page_token?
209
+ !next_page_token.empty?
210
+ end
211
+
212
+ ##
213
+ # Resources in this page presented as an array.
214
+ # When the iterable is a protobuf map, the `.each |item|` gives just the keys
215
+ # to iterate like a normal hash it should be converted to an array first
216
+ #
217
+ # @return [Array]
218
+ #
219
+ def resources
220
+ @resources ||= @response[@resource_field].to_a
221
+ end
222
+ end
223
+ end
224
+ end
225
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gapic-common
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Google API Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-08 00:00:00.000000000 Z
11
+ date: 2021-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -70,7 +70,7 @@ dependencies:
70
70
  requirements:
71
71
  - - ">="
72
72
  - !ruby/object:Gem::Version
73
- version: 0.16.2
73
+ version: 0.17.0
74
74
  - - "<"
75
75
  - !ruby/object:Gem::Version
76
76
  version: 2.a
@@ -80,7 +80,7 @@ dependencies:
80
80
  requirements:
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
- version: 0.16.2
83
+ version: 0.17.0
84
84
  - - "<"
85
85
  - !ruby/object:Gem::Version
86
86
  version: 2.a
@@ -272,6 +272,8 @@ files:
272
272
  - lib/gapic/rest/client_stub.rb
273
273
  - lib/gapic/rest/error.rb
274
274
  - lib/gapic/rest/faraday_middleware.rb
275
+ - lib/gapic/rest/operation.rb
276
+ - lib/gapic/rest/paged_enumerable.rb
275
277
  - lib/gapic/stream_input.rb
276
278
  homepage: https://github.com/googleapis/gapic-generator-ruby
277
279
  licenses: