azure-storage 0.13.0.preview → 0.14.0.preview

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/lib/azure/storage.rb +14 -13
  3. data/lib/azure/storage/autoload.rb +31 -31
  4. data/lib/azure/storage/blob/append.rb +43 -41
  5. data/lib/azure/storage/blob/blob.rb +150 -147
  6. data/lib/azure/storage/blob/blob_service.rb +186 -184
  7. data/lib/azure/storage/blob/block.rb +56 -56
  8. data/lib/azure/storage/blob/container.rb +93 -92
  9. data/lib/azure/storage/blob/page.rb +187 -104
  10. data/lib/azure/storage/blob/serialization.rb +32 -18
  11. data/lib/azure/storage/client.rb +18 -17
  12. data/lib/azure/storage/client_options.rb +192 -193
  13. data/lib/azure/storage/client_options_error.rb +5 -5
  14. data/lib/azure/storage/configurable.rb +39 -39
  15. data/lib/azure/storage/core.rb +6 -4
  16. data/lib/azure/storage/core/auth/shared_access_signature.rb +5 -3
  17. data/lib/azure/storage/core/auth/shared_access_signature_generator.rb +34 -33
  18. data/lib/azure/storage/core/auth/shared_access_signature_signer.rb +5 -5
  19. data/lib/azure/storage/core/auth/shared_key.rb +17 -15
  20. data/lib/azure/storage/core/autoload.rb +15 -13
  21. data/lib/azure/storage/core/error.rb +3 -1
  22. data/lib/azure/storage/core/filter/exponential_retry_filter.rb +13 -11
  23. data/lib/azure/storage/core/filter/linear_retry_filter.rb +10 -8
  24. data/lib/azure/storage/core/filter/retry_filter.rb +30 -29
  25. data/lib/azure/storage/core/http_client.rb +18 -16
  26. data/lib/azure/storage/core/sr.rb +50 -48
  27. data/lib/azure/storage/core/utility.rb +19 -17
  28. data/lib/azure/storage/default.rb +371 -361
  29. data/lib/azure/storage/file/directory.rb +36 -31
  30. data/lib/azure/storage/file/file.rb +103 -100
  31. data/lib/azure/storage/file/file_service.rb +42 -40
  32. data/lib/azure/storage/file/serialization.rb +9 -6
  33. data/lib/azure/storage/file/share.rb +48 -46
  34. data/lib/azure/storage/queue/message.rb +3 -1
  35. data/lib/azure/storage/queue/queue.rb +3 -2
  36. data/lib/azure/storage/queue/queue_service.rb +152 -151
  37. data/lib/azure/storage/queue/serialization.rb +7 -5
  38. data/lib/azure/storage/service/access_policy.rb +3 -1
  39. data/lib/azure/storage/service/cors.rb +4 -2
  40. data/lib/azure/storage/service/cors_rule.rb +3 -1
  41. data/lib/azure/storage/service/enumeration_results.rb +3 -1
  42. data/lib/azure/storage/service/logging.rb +5 -3
  43. data/lib/azure/storage/service/metrics.rb +5 -3
  44. data/lib/azure/storage/service/retention_policy.rb +3 -1
  45. data/lib/azure/storage/service/serialization.rb +31 -30
  46. data/lib/azure/storage/service/signed_identifier.rb +5 -4
  47. data/lib/azure/storage/service/storage_service.rb +33 -32
  48. data/lib/azure/storage/service/storage_service_properties.rb +6 -4
  49. data/lib/azure/storage/table/auth/shared_key.rb +9 -8
  50. data/lib/azure/storage/table/batch.rb +55 -55
  51. data/lib/azure/storage/table/batch_response.rb +17 -17
  52. data/lib/azure/storage/table/edmtype.rb +9 -7
  53. data/lib/azure/storage/table/entity.rb +4 -3
  54. data/lib/azure/storage/table/guid.rb +3 -1
  55. data/lib/azure/storage/table/query.rb +17 -19
  56. data/lib/azure/storage/table/serialization.rb +14 -12
  57. data/lib/azure/storage/table/table_service.rb +79 -80
  58. data/lib/azure/storage/version.rb +7 -5
  59. metadata +2 -2
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #-------------------------------------------------------------------------
2
4
  # # Copyright (c) Microsoft and contributors. All rights reserved.
3
5
  #
@@ -22,13 +24,12 @@
22
24
  # THE SOFTWARE.
23
25
  #--------------------------------------------------------------------------
24
26
 
25
- require 'azure/storage/core'
27
+ require "azure/storage/core"
26
28
 
27
29
  module Azure::Storage
28
-
29
30
  class InvalidConnectionStringError < Core::StorageError
30
31
  def initialize(message = SR::INVALID_CONNECTION_STRING)
31
- super(message)
32
+ super(message)
32
33
  end
33
34
  end
34
35
 
@@ -37,5 +38,4 @@ module Azure::Storage
37
38
  super(message)
38
39
  end
39
40
  end
40
-
41
- end
41
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #-------------------------------------------------------------------------
2
4
  # # Copyright (c) Microsoft and contributors. All rights reserved.
3
5
  #
@@ -25,7 +27,6 @@
25
27
  module Azure::Storage
26
28
  # The Azure::Storage::Configurable module provides basic configuration for Azure storage activities.
27
29
  module Configurable
28
-
29
30
  # @!attribute [w] storage_access_key
30
31
  # @return [String] Azure Storage access key.
31
32
  # @!attribute storage_account_name
@@ -93,7 +94,7 @@ module Azure::Storage
93
94
  def reset_config!(options = {})
94
95
  Azure::Storage::Configurable.keys.each do |key|
95
96
  value = if self == Azure::Storage
96
- Azure::Storage::Default.options[key]
97
+ Azure::Storage::Default.options[key]
97
98
  else
98
99
  Azure::Storage.send(key)
99
100
  end
@@ -105,7 +106,7 @@ module Azure::Storage
105
106
  end
106
107
 
107
108
  alias setup reset_config!
108
-
109
+
109
110
  # Storage queue host
110
111
  # @return [String]
111
112
  def storage_queue_host
@@ -123,7 +124,7 @@ module Azure::Storage
123
124
  def storage_table_host
124
125
  @storage_table_host || default_host(:table)
125
126
  end
126
-
127
+
127
128
  # Storage file host
128
129
  # @return [String]
129
130
  def storage_file_host
@@ -132,48 +133,47 @@ module Azure::Storage
132
133
 
133
134
  private
134
135
 
135
- def default_host(service)
136
- "https://#{storage_account_name}.#{service}.core.windows.net" if storage_account_name
137
- end
136
+ def default_host(service)
137
+ "https://#{storage_account_name}.#{service}.core.windows.net" if storage_account_name
138
+ end
138
139
 
139
- def setup_options
140
- opts = {}
141
- Azure::Storage::Configurable.keys.map do |key|
142
- opts[key] = Azure::Storage.send(key) if Azure::Storage.send(key)
140
+ def setup_options
141
+ opts = {}
142
+ Azure::Storage::Configurable.keys.map do |key|
143
+ opts[key] = Azure::Storage.send(key) if Azure::Storage.send(key)
144
+ end
145
+ opts
143
146
  end
144
- opts
145
- end
146
147
 
147
- def account_name_from_endpoint endpoint
148
- return nil if endpoint.nil?
149
- uri = URI::parse endpoint
150
- fields = uri.host.split '.'
151
- fields[0]
152
- end
148
+ def account_name_from_endpoint(endpoint)
149
+ return nil if endpoint.nil?
150
+ uri = URI::parse endpoint
151
+ fields = uri.host.split "."
152
+ fields[0]
153
+ end
153
154
 
154
- def determine_account_name
155
- if instance_variable_get(:@storage_account_name).nil?
156
- hosts = [@storage_blob_host, @storage_table_host, @storage_queue_host, @storage_file_host]
157
- account_name = nil;
158
- hosts.each do |host|
159
- parsed = account_name_from_endpoint host
160
- if account_name.nil?
161
- account_name = parsed
162
- elsif !account_name.nil? and !parsed.nil? and (account_name <=> parsed) != 0
163
- raise InvalidOptionsError, "Ambiguous account name in service hosts."
155
+ def determine_account_name
156
+ if instance_variable_get(:@storage_account_name).nil?
157
+ hosts = [@storage_blob_host, @storage_table_host, @storage_queue_host, @storage_file_host]
158
+ account_name = nil;
159
+ hosts.each do |host|
160
+ parsed = account_name_from_endpoint host
161
+ if account_name.nil?
162
+ account_name = parsed
163
+ elsif !account_name.nil? && !parsed.nil? && (account_name <=> parsed) != (0)
164
+ raise InvalidOptionsError, "Ambiguous account name in service hosts."
165
+ end
164
166
  end
167
+ raise InvalidOptionsError, "Cannot identify account name." if account_name.nil?
168
+ @storage_account_name = account_name
165
169
  end
166
- raise InvalidOptionsError, "Cannot identify account name." if account_name.nil?
167
- @storage_account_name = account_name
168
170
  end
169
- end
170
171
 
171
- def setup_signer_for_service
172
- if @storage_sas_token
173
- determine_account_name
174
- @signer = Azure::Storage::Core::Auth::SharedAccessSignatureSigner.new @storage_account_name, @storage_sas_token
172
+ def setup_signer_for_service
173
+ if @storage_sas_token
174
+ determine_account_name
175
+ @signer = Azure::Storage::Core::Auth::SharedAccessSignatureSigner.new @storage_account_name, @storage_sas_token
176
+ end
175
177
  end
176
- end
177
-
178
178
  end
179
- end
179
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #-------------------------------------------------------------------------
2
4
  # # Copyright (c) Microsoft and contributors. All rights reserved.
3
5
  #
@@ -27,7 +29,7 @@ module Azure
27
29
  end
28
30
  end
29
31
 
30
- require 'azure/storage/core/error'
31
- require 'azure/storage/default'
32
- require 'azure/storage/core/sr'
33
- require 'azure/storage/core/utility'
32
+ require "azure/storage/core/error"
33
+ require "azure/storage/default"
34
+ require "azure/storage/core/sr"
35
+ require "azure/storage/core/utility"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #-------------------------------------------------------------------------
2
4
  # # Copyright (c) Microsoft and contributors. All rights reserved.
3
5
  #
@@ -22,7 +24,7 @@
22
24
  # THE SOFTWARE.
23
25
  #--------------------------------------------------------------------------
24
26
 
25
- require 'azure/storage/core/auth/shared_access_signature_generator'
26
- require 'azure/storage/core/auth/shared_access_signature_signer'
27
+ require "azure/storage/core/auth/shared_access_signature_generator"
28
+ require "azure/storage/core/auth/shared_access_signature_signer"
27
29
 
28
- include Azure::Storage::Core::Auth
30
+ include Azure::Storage::Core::Auth
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #-------------------------------------------------------------------------
2
4
  # # Copyright (c) Microsoft and contributors. All rights reserved.
3
5
  #
@@ -22,19 +24,18 @@
22
24
  # THE SOFTWARE.
23
25
  #--------------------------------------------------------------------------
24
26
 
25
- require 'azure/storage/core'
26
- require 'azure/storage/client_options_error'
27
- require 'azure/core/auth/signer'
28
- require 'time'
29
- require 'uri'
27
+ require "azure/storage/core"
28
+ require "azure/storage/client_options_error"
29
+ require "azure/core/auth/signer"
30
+ require "time"
31
+ require "uri"
30
32
 
31
33
  # @see https://msdn.microsoft.com/library/azure/dn140255.aspx for more information on construction
32
34
  module Azure::Storage::Core
33
35
  module Auth
34
36
  class SharedAccessSignature
35
-
36
37
  DEFAULTS = {
37
- permissions: 'r',
38
+ permissions: "r",
38
39
  version: Azure::Storage::Default::STG_VERSION
39
40
  }
40
41
 
@@ -102,7 +103,7 @@ module Azure::Storage::Core
102
103
  #
103
104
  # @param account_name [String] The account name. Defaults to the one in the global configuration.
104
105
  # @param access_key [String] The access_key encoded in Base64. Defaults to the one in the global configuration.
105
- def initialize(account_name=Azure::Storage.storage_account_name, access_key=Azure::Storage.storage_access_key)
106
+ def initialize(account_name = Azure::Storage.storage_account_name, access_key = Azure::Storage.storage_access_key)
106
107
  @account_name = account_name
107
108
  @signer = Azure::Core::Auth::Signer.new(access_key)
108
109
  end
@@ -122,7 +123,7 @@ module Azure::Storage::Core
122
123
  # Combination of 'r', 'a', 'u', 'p' in this order for a queue.
123
124
  # Combination of 'r', 'a', 'u', 'd' in this order for a table.
124
125
  # This option must be omitted if it has been specified in an associated stored access policy.
125
- # * +:start+ - String. Optional. UTC Date/Time in ISO8601 format.
126
+ # * +:start+ - String. Optional. UTC Date/Time in ISO8601 format.
126
127
  # * +:expiry+ - String. Optional. UTC Date/Time in ISO8601 format. Default now + 30 minutes.
127
128
  # * +:identifier+ - String. Optional. Identifier for stored access policy.
128
129
  # * +:protocol+ - String. Optional. Permitted protocols.
@@ -140,13 +141,13 @@ module Azure::Storage::Core
140
141
  # * +:endpk+ - String. Optional but must accompany endrk. The end partition key of a specified partition key range.
141
142
  # * +:startrk+ - String. Optional. The start row key of a specified row key range.
142
143
  # * +:endrk+ - String. Optional. The end row key of a specified row key range.
143
- def generate_service_sas_token(path, options={})
144
+ def generate_service_sas_token(path, options = {})
144
145
  if options.key?(:service)
145
146
  service_type = SERVICE_TYPE_MAPPING[options[:service].to_sym]
146
147
  options.delete(:service)
147
148
  end
148
149
 
149
- raise Azure::Storage::InvalidOptionsError,"SAS version cannot be set" if options[:version]
150
+ raise Azure::Storage::InvalidOptionsError, "SAS version cannot be set" if options[:version]
150
151
 
151
152
  options = DEFAULTS.merge(options)
152
153
  valid_mappings = SERVICE_KEY_MAPPINGS
@@ -154,7 +155,7 @@ module Azure::Storage::Core
154
155
  if options[:resource]
155
156
  options.merge!(resource: options[:resource])
156
157
  else
157
- options.merge!(resource: 'b')
158
+ options.merge!(resource: "b")
158
159
  end
159
160
  valid_mappings.merge!(BLOB_KEY_MAPPINGS)
160
161
  elsif service_type == Azure::Storage::ServiceType::TABLE
@@ -164,20 +165,20 @@ module Azure::Storage::Core
164
165
  if options[:resource]
165
166
  options.merge!(resource: options[:resource])
166
167
  else
167
- options.merge!(resource: 'f')
168
+ options.merge!(resource: "f")
168
169
  end
169
170
  valid_mappings.merge!(FILE_KEY_MAPPINGS)
170
171
  end
171
172
 
172
173
  invalid_options = options.reject { |k, _| valid_mappings.key?(k) }
173
- raise Azure::Storage::InvalidOptionsError,"invalid options #{invalid_options} provided for SAS token generate" if invalid_options.length > 0
174
+ raise Azure::Storage::InvalidOptionsError, "invalid options #{invalid_options} provided for SAS token generate" if invalid_options.length > 0
174
175
 
175
176
  canonicalize_time(options)
176
177
 
177
178
  query_hash = Hash[options.map { |k, v| [SERVICE_KEY_MAPPINGS[k], v] }]
178
- .reject { |k, v| SERVICE_OPTIONAL_QUERY_PARAMS.include?(k) && v.to_s == '' }
179
- .merge( sig: @signer.sign(signable_string_for_service(service_type, path, options)) )
180
-
179
+ .reject { |k, v| SERVICE_OPTIONAL_QUERY_PARAMS.include?(k) && v.to_s == "" }
180
+ .merge(sig: @signer.sign(signable_string_for_service(service_type, path, options)))
181
+
181
182
  URI.encode_www_form(query_hash)
182
183
  end
183
184
 
@@ -225,28 +226,28 @@ module Azure::Storage::Core
225
226
  # * +:service+ - String. Required. Accessible services. Combination of 'b' (blob), 'q' (queue), 't' (table), 'f' (file).
226
227
  # * +:resource+ - String. Required. Accessible resource types. Combination of 's' (service), 'c' (container-level), 'o'(object-level).
227
228
  # * +:permissions+ - String. Required. Permissions. Combination of 'r' (read), 'w' (write), 'd'(delete), 'l'(list), 'a'(add),
228
- # 'c'(create), 'u'(update), 'p'(process). Permissions are only valid if they match
229
+ # 'c'(create), 'u'(update), 'p'(process). Permissions are only valid if they match
229
230
  # the specified signed resource type; otherwise they are ignored.
230
231
  # * +:start+ - String. Optional. UTC Date/Time in ISO8601 format.
231
232
  # * +:expiry+ - String. Optional. UTC Date/Time in ISO8601 format. Default now + 30 minutes.
232
233
  # * +:protocol+ - String. Optional. Permitted protocols.
233
- # * +:ip_range+ - String. Optional. An IP address or a range of IP addresses from which to accept requests.
234
+ # * +:ip_range+ - String. Optional. An IP address or a range of IP addresses from which to accept requests.
234
235
  # When specifying a range, note that the range is inclusive.
235
- def generate_account_sas_token(options={})
236
- raise Azure::Storage::InvalidOptionsError,"SAS version cannot be set" if options[:version]
236
+ def generate_account_sas_token(options = {})
237
+ raise Azure::Storage::InvalidOptionsError, "SAS version cannot be set" if options[:version]
237
238
 
238
239
  options = DEFAULTS.merge(options)
239
240
  valid_mappings = ACCOUNT_KEY_MAPPINGS
240
241
 
241
242
  invalid_options = options.reject { |k, _| valid_mappings.key?(k) }
242
- raise Azure::Storage::InvalidOptionsError,"invalid options #{invalid_options} provided for SAS token generate" if invalid_options.length > 0
243
+ raise Azure::Storage::InvalidOptionsError, "invalid options #{invalid_options} provided for SAS token generate" if invalid_options.length > 0
243
244
 
244
245
  canonicalize_time(options)
245
246
 
246
247
  query_hash = Hash[options.map { |k, v| [ACCOUNT_KEY_MAPPINGS[k], v] }]
247
- .reject { |k, v| ACCOUNT_OPTIONAL_QUERY_PARAMS.include?(k) && v.to_s == '' }
248
- .merge( sig: @signer.sign(signable_string_for_account(options)) )
249
-
248
+ .reject { |k, v| ACCOUNT_OPTIONAL_QUERY_PARAMS.include?(k) && v.to_s == "" }
249
+ .merge(sig: @signer.sign(signable_string_for_account(options)))
250
+
250
251
  URI.encode_www_form(query_hash)
251
252
  end
252
253
 
@@ -265,7 +266,7 @@ module Azure::Storage::Core
265
266
  options[:ip_range],
266
267
  options[:protocol],
267
268
  Azure::Storage::Default::STG_VERSION,
268
- ''
269
+ ""
269
270
  ].join("\n")
270
271
  end
271
272
 
@@ -278,7 +279,7 @@ module Azure::Storage::Core
278
279
  def canonicalize_time(options)
279
280
  options[:start] = Time.parse(options[:start]).utc.iso8601 if options[:start]
280
281
  options[:expiry] = Time.parse(options[:expiry]).utc.iso8601 if options[:expiry]
281
- options[:expiry] ||= (Time.now + 60*30).utc.iso8601
282
+ options[:expiry] ||= (Time.now + 60 * 30).utc.iso8601
282
283
  end
283
284
 
284
285
  # A customised URI reflecting options for the resource signed with Shared Access Signature
@@ -291,7 +292,7 @@ module Azure::Storage::Core
291
292
  # * +:start+ - String. Optional. UTC Date/Time in ISO8601 format.
292
293
  # * +:expiry+ - String. Optional. UTC Date/Time in ISO8601 format. Default now + 30 minutes.
293
294
  # * +:protocol+ - String. Optional. Permitted protocols.
294
- # * +:ip_range+ - String. Optional. An IP address or a range of IP addresses from which to accept requests.
295
+ # * +:ip_range+ - String. Optional. An IP address or a range of IP addresses from which to accept requests.
295
296
  # When specifying a range, note that the range is inclusive.
296
297
  #
297
298
  # Below options for account SAS only
@@ -326,20 +327,20 @@ module Azure::Storage::Core
326
327
  # * +:startrk+ - String. Optional. The start row key of a specified row key range.
327
328
  # * +:endrk+ - String. Optional. The end row key of a specified row key range.
328
329
  def signed_uri(uri, use_account_sas, options)
329
- CGI::parse(uri.query || '').inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
330
+ CGI::parse(uri.query || "").inject({}) { |memo, (k, v)| memo[k.to_sym] = v; memo }
330
331
 
331
- if options[:service] == nil and uri.host != nil
332
- host_splits = uri.host.split('.')
332
+ if options[:service] == (nil) && uri.host != (nil)
333
+ host_splits = uri.host.split(".")
333
334
  options[:service] = host_splits[1].chr if host_splits.length > 1 && host_splits[0] == @account_name
334
335
  end
335
336
 
336
337
  sas_params = if use_account_sas
337
- generate_account_sas_token(options)
338
+ generate_account_sas_token(options)
338
339
  else
339
340
  generate_service_sas_token(uri.path, options)
340
341
  end
341
342
 
342
- URI.parse(uri.to_s + (uri.query.nil? ? '?' : '&') + sas_params)
343
+ URI.parse(uri.to_s + (uri.query.nil? ? "?" : "&") + sas_params)
343
344
  end
344
345
  end
345
346
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #-------------------------------------------------------------------------
2
4
  # # Copyright (c) Microsoft and contributors. All rights reserved.
3
5
  #
@@ -22,27 +24,25 @@
22
24
  # THE SOFTWARE.
23
25
  #--------------------------------------------------------------------------
24
26
 
25
- require 'azure/core/auth/signer'
27
+ require "azure/core/auth/signer"
26
28
 
27
29
  module Azure::Storage::Core
28
30
  module Auth
29
31
  class SharedAccessSignatureSigner < Azure::Core::Auth::Signer
30
-
31
32
  attr :account_name, :sas_token
32
33
 
33
34
  # Public: Initialize the Signer with a SharedAccessSignature
34
35
  #
35
36
  # @param account_name [String] The account name. Defaults to the one in the global configuration.
36
37
  # @param sas_token [String] The sas token to be used for signing
37
- def initialize(account_name=Azure::Storage.storage_account_name, sas_token=Azure::Storage.storage_sas_token)
38
+ def initialize(account_name = Azure::Storage.storage_account_name, sas_token = Azure::Storage.storage_sas_token)
38
39
  @account_name = account_name
39
40
  @sas_token = sas_token
40
41
  end
41
42
 
42
43
  def sign_request(req)
43
- req.uri = URI.parse(req.uri.to_s + (req.uri.query.nil? ? '?' : '&') + sas_token.sub(/^\?/,'') + '&api-version=' + Azure::Storage::Default::STG_VERSION)
44
+ req.uri = URI.parse(req.uri.to_s + (req.uri.query.nil? ? "?" : "&") + sas_token.sub(/^\?/, "") + "&api-version=" + Azure::Storage::Default::STG_VERSION)
44
45
  end
45
-
46
46
  end
47
47
  end
48
48
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #-------------------------------------------------------------------------
2
4
  # # Copyright (c) Microsoft and contributors. All rights reserved.
3
5
  #
@@ -21,9 +23,9 @@
21
23
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
24
  # THE SOFTWARE.
23
25
  #--------------------------------------------------------------------------
24
- require 'cgi'
25
- require 'azure/core/auth/signer'
26
- require 'azure/core/auth/shared_key'
26
+ require "cgi"
27
+ require "azure/core/auth/signer"
28
+ require "azure/core/auth/shared_key"
27
29
 
28
30
  module Azure::Storage::Core
29
31
  module Auth
@@ -38,21 +40,21 @@ module Azure::Storage::Core
38
40
  def signable_string(method, uri, headers)
39
41
  [
40
42
  method.to_s.upcase,
41
- headers.fetch('Content-Encoding', ''),
42
- headers.fetch('Content-Language', ''),
43
- headers.fetch('Content-Length', '').sub(/^0+/,''), # from 2015-02-21, if Content-Length == 0, it won't be signed
44
- headers.fetch('Content-MD5', ''),
45
- headers.fetch('Content-Type', ''),
46
- headers.fetch('Date', ''),
47
- headers.fetch('If-Modified-Since', ''),
48
- headers.fetch('If-Match', ''),
49
- headers.fetch('If-None-Match', ''),
50
- headers.fetch('If-Unmodified-Since', ''),
51
- headers.fetch('Range', ''),
43
+ headers.fetch("Content-Encoding", ""),
44
+ headers.fetch("Content-Language", ""),
45
+ headers.fetch("Content-Length", "").sub(/^0+/, ""), # from 2015-02-21, if Content-Length == 0, it won't be signed
46
+ headers.fetch("Content-MD5", ""),
47
+ headers.fetch("Content-Type", ""),
48
+ headers.fetch("Date", ""),
49
+ headers.fetch("If-Modified-Since", ""),
50
+ headers.fetch("If-Match", ""),
51
+ headers.fetch("If-None-Match", ""),
52
+ headers.fetch("If-Unmodified-Since", ""),
53
+ headers.fetch("Range", ""),
52
54
  canonicalized_headers(headers),
53
55
  canonicalized_resource(uri)
54
56
  ].join("\n")
55
57
  end
56
58
  end
57
59
  end
58
- end
60
+ end