azure-core 0.1.12 → 0.1.13

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
- SHA1:
3
- metadata.gz: 9633ae4d67b96a41ca289286b59a6acfb3eada61
4
- data.tar.gz: 6b13301832d6cd68b9c16f78b9eea614a78d93ab
2
+ SHA256:
3
+ metadata.gz: 28eb15120a2cc99f76064d85594a4126e014ff83be784b7ee8b6c7bc1dcaed0c
4
+ data.tar.gz: 6ae6620c660aa76e47841fb01d3a7089c044fd404feebc187568c6bfc1d0980d
5
5
  SHA512:
6
- metadata.gz: 4bec89582a3c07f810cb4874bf92c5313f9c0ba3ac78569031ceeee05524120822c46d2de3328b7a21ea9fb2cadecd7abb0c658bd29efdb1ac1d3a037b27f13d
7
- data.tar.gz: 3e93068317140579daef9a4d931d4de91ad0f732221f1af0a7bb6c4c445f3242eff3453b6d4f7db5b6d164a67576e59c1703c63aad4479266c1dcaf16a13f6b0
6
+ metadata.gz: d182d7cb1c220bfb20dac275166c1d948b25ef6ca5a914c7b450829dc04ca2d90a7b2dec7814bd458d5eed76408ac3b659a919e8653058ce5076f8674caa73c2
7
+ data.tar.gz: 7e3f948e02cf99a942e1bb5199a1020b5b09c821a7683dd58da2221f46dadec6f9acd627ab212b6c140e2c9b020fd6a17d820ec7375277183f920638e8028ac2
@@ -1,3 +1,7 @@
1
+ # 2017.11.10 - azure-core gem @version 0.1.13
2
+ * Added the call options in the retry data.
3
+ * Added the support for retrying a request with a different URL.
4
+
1
5
  # 2017.08.31 - azure-core gem @version 0.1.12
2
6
  * Changed default value of header `MaxDataServiceVersion` to `3.0;NetFx` now that the service is available.
3
7
  * `Azure::Core::Http::HTTPError` now can also parse JSON format response body for error type and description.
@@ -30,9 +30,9 @@ module Azure
30
30
 
31
31
  attr_accessor :filters
32
32
 
33
- def call(method, uri, body=nil, headers=nil)
33
+ def call(method, uri, body=nil, headers=nil, options={})
34
34
  super(method, uri, body, headers) do |request|
35
- filters.reverse.each { |filter| request.with_filter filter } if filters
35
+ filters.reverse.each { |filter| request.with_filter filter, options } if filters
36
36
  end
37
37
  end
38
38
 
@@ -80,6 +80,9 @@ module Azure
80
80
  # returns a HttpResponse eg. HttpFilter, Proc,
81
81
  # lambda, etc. (optional)
82
82
  #
83
+ # options - The options that are used when call Azure::Core::FilteredService.call.
84
+ # It can be used by retry policies to determine changes in the retry.
85
+ #
83
86
  # &block - An inline block may be used instead of a filter
84
87
  #
85
88
  # example:
@@ -93,10 +96,13 @@ module Azure
93
96
  # The code block provided must call _next or the filter pipeline
94
97
  # will not complete and the HTTP request will never execute
95
98
  #
96
- def with_filter(filter=nil, &block)
99
+ def with_filter(filter=nil, options={}, &block)
97
100
  filter = filter || block
98
101
  if filter
99
- @has_retry_filter ||= filter.is_a?(Azure::Core::Http::RetryPolicy)
102
+ is_retry_policy = filter.is_a?(Azure::Core::Http::RetryPolicy)
103
+ filter.retry_data[:request_options] = options if is_retry_policy
104
+ @has_retry_filter ||= is_retry_policy
105
+
100
106
  original_call = self._method(:call)
101
107
 
102
108
  # support 1.8.7 (define_singleton_method doesn't exist until 1.9.1)
@@ -151,27 +157,36 @@ module Azure
151
157
  private
152
158
 
153
159
  def apply_body_headers
154
- if body
155
- if IO === body
156
- headers['Content-Length'] = body.size.to_s
157
- headers['Content-MD5'] = Digest::MD5.file(body.path).base64digest unless headers['Content-MD5']
158
- elsif StringIO === body
159
- headers['Content-Length'] = body.size.to_s
160
- unless headers['Content-MD5']
161
- headers['Content-MD5'] = Digest::MD5.new.tap do |checksum|
162
- while chunk = body.read(5242880)
163
- checksum << chunk
164
- end
165
- body.rewind
166
- end.base64digest
167
- end
168
- else
169
- headers['Content-Length'] = body.bytesize.to_s
170
- headers['Content-MD5'] = Base64.strict_encode64(Digest::MD5.digest(body)) unless headers['Content-MD5']
171
- end
172
- else
173
- headers['Content-Length'] = '0'
160
+ return headers['Content-Length'] = '0' unless body
161
+
162
+ return apply_io_headers if IO === body
163
+ return apply_string_io_headers if StringIO === body
164
+ return apply_miscellaneous_headers
165
+ end
166
+
167
+ def apply_io_headers
168
+ headers['Content-Length'] = body.size.to_s if body.respond_to?('size')
169
+ if headers['Content-Length'].nil?
170
+ raise ArgumentError, '\'Content-Length\' must be defined if size cannot be obtained from body IO.'
174
171
  end
172
+ headers['Content-MD5'] = Digest::MD5.file(body.path).base64digest unless headers['Content-MD5']
173
+ end
174
+
175
+ def apply_string_io_headers
176
+ headers['Content-Length'] = body.size.to_s
177
+ unless headers['Content-MD5']
178
+ headers['Content-MD5'] = Digest::MD5.new.tap do |checksum|
179
+ while chunk = body.read(5242880)
180
+ checksum << chunk
181
+ end
182
+ body.rewind
183
+ end.base64digest
184
+ end
185
+ end
186
+
187
+ def apply_miscellaneous_headers
188
+ headers['Content-Length'] = body.bytesize.to_s
189
+ headers['Content-MD5'] = Base64.strict_encode64(Digest::MD5.digest(body)) unless headers['Content-MD5']
175
190
  end
176
191
  end
177
192
  end
@@ -24,6 +24,7 @@ module Azure
24
24
 
25
25
  def initialize(&block)
26
26
  @block = block
27
+ @retry_data = {}
27
28
  end
28
29
 
29
30
  attr_accessor :retry_data
@@ -35,17 +36,20 @@ module Azure
35
36
  # req - HttpRequest. The HTTP request
36
37
  # _next - HttpFilter. The next filter in the pipeline
37
38
  def call(req, _next)
38
- retry_data = {}
39
39
  response = nil
40
40
  begin
41
+ # URI could change in the retry, e.g. secondary endpoint
42
+ unless @retry_data[:uri].nil?
43
+ req.uri = @retry_data[:uri]
44
+ end
41
45
  response = _next.call
42
46
  rescue
43
- retry_data[:error] = $!
44
- end while should_retry?(response, retry_data)
47
+ @retry_data[:error] = $!
48
+ end while should_retry?(response, @retry_data)
45
49
  # Assign the error when HTTP error is not thrown from the previous filter
46
- retry_data[:error] = response.error if response && !response.success?
47
- if retry_data.has_key?(:error)
48
- raise retry_data[:error]
50
+ @retry_data[:error] = response.error if response && !response.success?
51
+ if @retry_data.has_key?(:error)
52
+ raise @retry_data[:error]
49
53
  else
50
54
  response
51
55
  end
@@ -37,8 +37,8 @@ module Azure
37
37
  attr_accessor :account_name
38
38
  attr_accessor :signer
39
39
 
40
- def call(method, uri, body=nil, headers=nil)
41
- super(method, uri, body, headers)
40
+ def call(method, uri, body=nil, headers=nil, options={})
41
+ super(method, uri, body, headers, options)
42
42
  end
43
43
  end
44
44
  end
@@ -18,7 +18,7 @@ module Azure
18
18
  class Version
19
19
  MAJOR = 0 unless defined? MAJOR
20
20
  MINOR = 1 unless defined? MINOR
21
- UPDATE = 12 unless defined? UPDATE
21
+ UPDATE = 13 unless defined? UPDATE
22
22
  PRE = nil unless defined? PRE
23
23
 
24
24
  class << self
@@ -48,5 +48,18 @@ module Azure
48
48
  end
49
49
  end
50
50
 
51
+ class NewUriRetryPolicy < Azure::Core::Http::RetryPolicy
52
+ def initialize
53
+ @count = 1
54
+ super &:should_retry?
55
+ end
56
+
57
+ def should_retry?(response, retry_data)
58
+ retry_data[:uri] = URI.parse "http://bar.com"
59
+ @count = @count - 1
60
+ @count >= 0
61
+ end
62
+ end
63
+
51
64
  end
52
65
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: azure-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Microsoft Corporation
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-09-12 00:00:00.000000000 Z
12
+ date: 2017-11-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -209,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
209
  version: '0'
210
210
  requirements: []
211
211
  rubyforge_project:
212
- rubygems_version: 2.6.13
212
+ rubygems_version: 2.7.2
213
213
  signing_key:
214
214
  specification_version: 4
215
215
  summary: Core library to be consumed by Ruby SDK gems