gapic-common 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f181f3deefc2a5b42d783327db4c51a7e415cd7d5e58e16354ea2703cdb89293
4
- data.tar.gz: 8aebd8ac22c5f770c551a69a82e5bfc74d5d72c13448e8d66d12a182d1ff77b0
3
+ metadata.gz: fb55a8128893e307e6f1237157b9456481ce7aa2e09a6dbeb19786359cf774ef
4
+ data.tar.gz: 37b93b8e7b2d444679279d6f9e4b87b1ccfc460d4c9fc041ca390a22f115e4f5
5
5
  SHA512:
6
- metadata.gz: 1d8353989aaf3874d554ff160ee3d2504fa50f68a5627fb7bdb2b6b3f12941c3fb9ef677475ac0714fb7905750582ff3780ed7e6e976a890970e3ee12bdfa90b
7
- data.tar.gz: 3c867837b3b3aaa608f0b456536cd6b091e865ef3f2e5e882662545b31d1f6da95853486ec5b1544493c16edf5b6634f0e69dc87bf7cff8244b61f5c16c05c60
6
+ metadata.gz: b635e99c7a32cd3926e278312103197299a48679ea3d5ce6286ab7e5a5873cbb718106e3e69ac28b33316c5ff61c7b22fe67d5499b62298d1dc75c1f7f70eda6
7
+ data.tar.gz: 81cefba38844981e6c137aff1d2de3fc5282e77b93c7761d20ae04007e7d46d07529b29fcf8315e98505268d101c500ad8e8d8e3df38fab5e0f4d8edbb914e4d
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Release History
2
2
 
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
+
3
11
  ### 0.5.0 / 2021-06-15
4
12
 
5
13
  * Provide a way to create `x-goog-api-client` headers with rest library version and/or without grpc library version
@@ -14,6 +14,6 @@
14
14
 
15
15
  module Gapic
16
16
  module Common
17
- VERSION = "0.5.0".freeze
17
+ VERSION = "0.7.0".freeze
18
18
  end
19
19
  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.5.0
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-15 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: