azure-storage-common2 2.0.8 → 2.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/lib/azure/core/auth/authorizer.rb +36 -0
  3. data/lib/azure/core/auth/shared_key.rb +125 -0
  4. data/lib/azure/core/auth/shared_key_lite.rb +48 -0
  5. data/lib/azure/core/auth/signer.rb +51 -0
  6. data/lib/azure/core/default.rb +23 -0
  7. data/lib/azure/core/error.rb +21 -0
  8. data/lib/azure/core/filtered_service.rb +45 -0
  9. data/lib/azure/core/http/debug_filter.rb +36 -0
  10. data/lib/azure/core/http/http_error.rb +135 -0
  11. data/lib/azure/core/http/http_filter.rb +53 -0
  12. data/lib/azure/core/http/http_request.rb +195 -0
  13. data/lib/azure/core/http/http_response.rb +102 -0
  14. data/lib/azure/core/http/retry_policy.rb +84 -0
  15. data/lib/azure/core/http/signer_filter.rb +33 -0
  16. data/lib/azure/core/service.rb +46 -0
  17. data/lib/azure/core/signed_service.rb +45 -0
  18. data/lib/azure/core/utility.rb +244 -0
  19. data/lib/azure/core/version.rb +33 -0
  20. data/lib/azure/storage/common/autoload.rb +62 -0
  21. data/lib/azure/storage/common/client.rb +162 -0
  22. data/lib/azure/storage/common/client_options.rb +363 -0
  23. data/lib/azure/storage/common/client_options_error.rb +41 -0
  24. data/lib/azure/storage/common/configurable.rb +212 -0
  25. data/lib/azure/storage/common/core/auth/anonymous_signer.rb +43 -0
  26. data/lib/azure/storage/common/core/auth/shared_access_signature.rb +30 -0
  27. data/lib/azure/storage/common/core/auth/shared_access_signature_generator.rb +399 -0
  28. data/lib/azure/storage/common/core/auth/shared_access_signature_signer.rb +57 -0
  29. data/lib/azure/storage/common/core/auth/shared_key.rb +60 -0
  30. data/lib/azure/storage/common/core/auth/token_signer.rb +43 -0
  31. data/lib/azure/storage/common/core/autoload.rb +53 -0
  32. data/lib/azure/storage/common/core/error.rb +43 -0
  33. data/lib/azure/storage/common/core/filter/exponential_retry_filter.rb +64 -0
  34. data/lib/azure/storage/common/core/filter/linear_retry_filter.rb +55 -0
  35. data/lib/azure/storage/common/core/filter/retry_filter.rb +300 -0
  36. data/lib/azure/storage/common/core/http_client.rb +82 -0
  37. data/lib/azure/storage/common/core/sr.rb +85 -0
  38. data/lib/azure/storage/common/core/token_credential.rb +64 -0
  39. data/lib/azure/storage/common/core/utility.rb +261 -0
  40. data/lib/azure/storage/common/core.rb +35 -0
  41. data/lib/azure/storage/common/default.rb +868 -0
  42. data/lib/azure/storage/common/service/access_policy.rb +37 -0
  43. data/lib/azure/storage/common/service/cors.rb +38 -0
  44. data/lib/azure/storage/common/service/cors_rule.rb +48 -0
  45. data/lib/azure/storage/common/service/enumeration_results.rb +32 -0
  46. data/lib/azure/storage/common/service/geo_replication.rb +40 -0
  47. data/lib/azure/storage/common/service/logging.rb +47 -0
  48. data/lib/azure/storage/common/service/metrics.rb +45 -0
  49. data/lib/azure/storage/common/service/retention_policy.rb +37 -0
  50. data/lib/azure/storage/common/service/serialization.rb +335 -0
  51. data/lib/azure/storage/common/service/signed_identifier.rb +40 -0
  52. data/lib/azure/storage/common/service/storage_service.rb +322 -0
  53. data/lib/azure/storage/common/service/storage_service_properties.rb +48 -0
  54. data/lib/azure/storage/common/service/storage_service_stats.rb +39 -0
  55. data/lib/azure/storage/common/service/user_delegation_key.rb +50 -0
  56. data/lib/azure/storage/common/version.rb +49 -0
  57. metadata +57 -2
@@ -0,0 +1,244 @@
1
+ #-------------------------------------------------------------------------
2
+ # Copyright 2013 Microsoft Open Technologies, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
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
+
16
+ require 'ipaddr'
17
+
18
+ if RUBY_VERSION.to_f < 2.0
19
+ begin
20
+ require 'Win32/Console/ANSI' if RUBY_PLATFORM =~ /win32|mingw32/
21
+ rescue LoadError
22
+ puts 'WARNING: Output will look weird on Windows unless'\
23
+ ' you install the "win32console" gem.'
24
+ end
25
+ end
26
+
27
+ module Azure
28
+ module Error
29
+ # Azure Error
30
+ class Error < Azure::Core::Error
31
+ attr_reader :description
32
+ attr_reader :status_code
33
+ attr_reader :type
34
+
35
+ def initialize(type, status, description)
36
+ @type = type
37
+ @status_code = status
38
+ @description = description
39
+ super("#{type} (#{status_code}): #{description}")
40
+ end
41
+ end
42
+ end
43
+
44
+ module Core
45
+ module Utility
46
+ def random_string(str = 'azure', no_of_char = 5)
47
+ str + (0...no_of_char).map { ('a'..'z').to_a[rand(26)] }.join
48
+ end
49
+
50
+ def xml_content(xml, key, default = '')
51
+ content = default
52
+ node = xml.at_css(key)
53
+ content = node.text if node
54
+ content
55
+ end
56
+
57
+ def locate_file(name)
58
+ if File.exist? name
59
+ name
60
+ elsif File.exist?(File.join(ENV['HOME'], name))
61
+ File.join(ENV['HOME'], name)
62
+ else
63
+ Azure::Loggerx.error_with_exit "Unable to find #{name} file "
64
+ end
65
+ end
66
+
67
+ def export_der(cert, key, pass = nil, name = nil)
68
+ pkcs12 = OpenSSL::PKCS12.create(pass, name, key, cert)
69
+ Base64.encode64(pkcs12.to_der)
70
+ rescue Exception => e
71
+ puts e.message
72
+ abort
73
+ end
74
+
75
+ def export_fingerprint(certificate)
76
+ Digest::SHA1.hexdigest(certificate.to_der)
77
+ end
78
+
79
+ def enable_winrm?(winrm_transport)
80
+ (!winrm_transport.nil? && (winrm_transport.select { |x| x.downcase == 'http' || x.downcase == 'https' }.size > 0))
81
+ end
82
+
83
+ def get_certificate(private_key_file)
84
+ rsa = OpenSSL::PKey.read File.read(private_key_file)
85
+ cert = OpenSSL::X509::Certificate.new
86
+ cert.version = 2
87
+ cert.serial = 0
88
+ name = OpenSSL::X509::Name.new([['CN', 'Azure Management Certificate']])
89
+ cert.subject = cert.issuer = name
90
+ cert.not_before = Time.now
91
+ cert.not_after = cert.not_before + (60*60*24*365)
92
+ cert.public_key = rsa.public_key
93
+ cert.sign(rsa, OpenSSL::Digest::SHA1.new)
94
+ cert
95
+ end
96
+
97
+ def initialize_external_logger(logger)
98
+ Loggerx.initialize_external_logger(logger)
99
+ end
100
+ end
101
+
102
+ # Logger
103
+ module Logger
104
+ class << self
105
+ attr_accessor :logger
106
+
107
+ def info(msg)
108
+ if logger.nil?
109
+ puts msg.bold.white
110
+ else
111
+ logger.info(msg)
112
+ end
113
+ end
114
+
115
+ def error_with_exit(msg)
116
+ if logger.nil?
117
+ puts msg.bold.red
118
+ else
119
+ logger.error(msg)
120
+ end
121
+
122
+ raise msg.bold.red
123
+ end
124
+
125
+ def warn(msg)
126
+ if logger.nil?
127
+ puts msg.yellow
128
+ else
129
+ logger.warn(msg)
130
+ end
131
+
132
+ msg
133
+ end
134
+
135
+ def error(msg)
136
+ if logger.nil?
137
+ puts msg.bold.red
138
+ else
139
+ logger.error(msg)
140
+ end
141
+
142
+ msg
143
+ end
144
+
145
+ def exception_message(msg)
146
+ if logger.nil?
147
+ puts msg.bold.red
148
+ else
149
+ logger.warn(msg)
150
+ end
151
+
152
+ raise msg.bold.red
153
+ end
154
+
155
+ def success(msg)
156
+ msg_with_new_line = msg + "\n"
157
+ if logger.nil?
158
+ print msg_with_new_line.green
159
+ else
160
+ logger.info(msg)
161
+ end
162
+ end
163
+
164
+ def initialize_external_logger(logger)
165
+ @logger = logger
166
+ end
167
+ end
168
+ end
169
+ end
170
+ end
171
+
172
+ class String
173
+ { reset: 0,
174
+ bold: 1,
175
+ dark: 2,
176
+ underline: 4,
177
+ blink: 5,
178
+ orange: 6,
179
+ negative: 7,
180
+ black: 30,
181
+ red: 31,
182
+ green: 32,
183
+ yellow: 33,
184
+ blue: 34,
185
+ magenta: 35,
186
+ cyan: 36,
187
+ white: 37,
188
+ }.each do |key, value|
189
+ define_method key do
190
+ "\e[#{value}m" + self + "\e[0m"
191
+ end
192
+ end
193
+ end
194
+
195
+ # Code validate private/public IP acceptable ranges.
196
+ class IPAddr
197
+ PRIVATE_RANGES = [
198
+ IPAddr.new('10.0.0.0/8'),
199
+ IPAddr.new('172.16.0.0/12'),
200
+ IPAddr.new('192.168.0.0/16')
201
+ ]
202
+
203
+ def private?
204
+ return false unless self.ipv4?
205
+ PRIVATE_RANGES.each do |ipr|
206
+ return true if ipr.include?(self)
207
+ end
208
+ false
209
+ end
210
+
211
+ def public?
212
+ !private?
213
+ end
214
+
215
+ class << self
216
+ def validate_ip_and_prefix(ip, cidr)
217
+ if cidr.to_s.empty?
218
+ raise "Cidr is missing for IP '#{ip}'."
219
+ elsif valid?(ip)
220
+ raise "Ip address '#{ip}' is invalid."
221
+ elsif !IPAddr.new(ip).private?
222
+ raise "Ip Address #{ip} must be private."
223
+ end
224
+ end
225
+
226
+ def validate_address_space(ip)
227
+ if ip.split('/').size != 2
228
+ raise "Cidr is invalid for IP #{ip}."
229
+ elsif valid?(ip)
230
+ raise "Address space '#{ip}' is invalid."
231
+ end
232
+ end
233
+
234
+ def address_prefix(ip, cidr)
235
+ ip + '/' + cidr.to_s
236
+ end
237
+
238
+ def valid?(ip)
239
+ (IPAddr.new(ip) rescue nil).nil?
240
+ end
241
+ end
242
+ end
243
+
244
+ Azure::Loggerx = Azure::Core::Logger
@@ -0,0 +1,33 @@
1
+ #-------------------------------------------------------------------------
2
+ # # Copyright (c) Microsoft and contributors. All rights reserved.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
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
+
16
+ module Azure
17
+ module Core
18
+ class Version
19
+ MAJOR = 0 unless defined? MAJOR
20
+ MINOR = 2 unless defined? MINOR
21
+ UPDATE = 9 unless defined? UPDATE
22
+ PRE = nil unless defined? PRE
23
+
24
+ class << self
25
+
26
+ # @return [String]
27
+ def to_s
28
+ [MAJOR, MINOR, UPDATE].join('.') + (PRE.nil? ? '' : "-#{PRE}")
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ #-------------------------------------------------------------------------
4
+ # # Copyright (c) Microsoft and contributors. All rights reserved.
5
+ #
6
+ # The MIT License(MIT)
7
+
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ # of this software and associated documentation files(the "Software"), to deal
10
+ # in the Software without restriction, including without limitation the rights
11
+ # to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
12
+ # copies of the Software, and to permit persons to whom the Software is
13
+ # furnished to do so, subject to the following conditions :
14
+
15
+ # The above copyright notice and this permission notice shall be included in
16
+ # all copies or substantial portions of the Software.
17
+
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
21
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ # THE SOFTWARE.
25
+ #--------------------------------------------------------------------------
26
+
27
+ require "rubygems"
28
+ require "nokogiri"
29
+ require "base64"
30
+ require "openssl"
31
+ require "uri"
32
+ require "faraday"
33
+ require 'faraday/follow_redirects'
34
+
35
+ require "azure/storage/common/core/autoload"
36
+ require "azure/storage/common/default"
37
+
38
+ module Azure
39
+ module Storage
40
+ autoload :Common, "azure/storage/common/core"
41
+ module Common
42
+ autoload :Default, "azure/storage/common/default"
43
+ autoload :Configurable, "azure/storage/common/configurable"
44
+ autoload :Client, "azure/storage/common/client"
45
+ autoload :ClientOptions, "azure/storage/common/client_options"
46
+
47
+ module Auth
48
+ autoload :SharedAccessSignature, "azure/storage/common/core/auth/shared_access_signature"
49
+ end
50
+
51
+ module Service
52
+ autoload :Serialization, "azure/storage/common/service/serialization"
53
+ autoload :SignedIdentifier, "azure/storage/common/service/signed_identifier"
54
+ autoload :AccessPolicy, "azure/storage/common/service/access_policy"
55
+ autoload :StorageService, "azure/storage/common/service/storage_service"
56
+ autoload :CorsRule, "azure/storage/common/service/cors_rule"
57
+ autoload :EnumerationResults, "azure/storage/common/service/enumeration_results"
58
+ autoload :UserDelegationKey, "azure/storage/common/service/user_delegation_key"
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,162 @@
1
+ # frozen_string_literal: true
2
+
3
+ #-------------------------------------------------------------------------
4
+ # # Copyright (c) Microsoft and contributors. All rights reserved.
5
+ #
6
+ # The MIT License(MIT)
7
+
8
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ # of this software and associated documentation files(the "Software"), to deal
10
+ # in the Software without restriction, including without limitation the rights
11
+ # to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
12
+ # copies of the Software, and to permit persons to whom the Software is
13
+ # furnished to do so, subject to the following conditions :
14
+
15
+ # The above copyright notice and this permission notice shall be included in
16
+ # all copies or substantial portions of the Software.
17
+
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
21
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ # THE SOFTWARE.
25
+ #--------------------------------------------------------------------------
26
+
27
+ module Azure::Storage::Common
28
+ class Client
29
+ include Azure::Storage::Common::Configurable
30
+ include Azure::Storage::Common::ClientOptions
31
+ include Azure::Storage::Common::Core::HttpClient
32
+
33
+ # Public: Creates an instance of [Azure::Storage::Common::Client]
34
+ #
35
+ # ==== Attributes
36
+ #
37
+ # * +options+ - Hash. Optional parameters.
38
+ #
39
+ # ==== Options
40
+ #
41
+ # Accepted key/value pairs in options parameter are:
42
+ #
43
+ # * +:use_development_storage+ - TrueClass|FalseClass. Whether to use storage emulator.
44
+ # * +:development_storage_proxy_uri+ - String. Used with +:use_development_storage+ if emulator is hosted other than localhost.
45
+ # * +:storage_connection_string+ - String. The storage connection string.
46
+ # * +:storage_account_name+ - String. The name of the storage account.
47
+ # * +:storage_access_key+ - Base64 String. The access key of the storage account.
48
+ # * +:storage_sas_token+ - String. The signed access signature for the storage account or one of its service.
49
+ # * +:storage_blob_host+ - String. Specified Blob serivce endpoint or hostname
50
+ # * +:storage_table_host+ - String. Specified Table serivce endpoint or hostname
51
+ # * +:storage_queue_host+ - String. Specified Queue serivce endpoint or hostname
52
+ # * +:storage_dns_suffix+ - String. The suffix of a regional Storage Serivce, to
53
+ # * +:default_endpoints_protocol+ - String. http or https
54
+ # * +:use_path_style_uri+ - String. Whether use path style URI for specified endpoints
55
+ # * +:ca_file+ - String. File path of the CA file if having issue with SSL
56
+ # * +:user_agent_prefix+ - String. The user agent prefix that can identify the application calls the library
57
+ #
58
+ # The valid set of options include:
59
+ # * Storage Emulator: +:use_development_storage+ required, +:development_storage_proxy_uri+ optionally
60
+ # * Storage account name and key: +:storage_account_name+ and +:storage_access_key+ required, set +:storage_dns_suffix+ necessarily
61
+ # * Storage account name and SAS token: +:storage_account_name+ and +:storage_sas_token+ required, set +:storage_dns_suffix+ necessarily
62
+ # * Specified hosts and SAS token: At least one of the service host and SAS token. It's up to user to ensure the SAS token is suitable for the serivce
63
+ # * Anonymous Blob: only +:storage_blob_host+, if it is to only access blobs within a container
64
+ #
65
+ # Additional notes:
66
+ # * Specified hosts can be set when use account name with access key or sas token
67
+ # * +:default_endpoints_protocol+ can be set if the scheme is not specified in hosts
68
+ # * Storage emulator always use path style URI
69
+ # * +:ca_file+ is independent.
70
+ #
71
+ # When empty options are given, it will try to read settings from Environment Variables. Refer to [Azure::Storage::Common::ClientOptions.env_vars_mapping] for the mapping relationship
72
+ #
73
+ # @return [Azure::Storage::Common::Client]
74
+ def initialize(options = {}, &block)
75
+ if options.is_a?(Hash) && options.has_key?(:user_agent_prefix)
76
+ Azure::Storage::Common::Service::StorageService.user_agent_prefix = options[:user_agent_prefix]
77
+ options.delete :user_agent_prefix
78
+ end
79
+ Azure::Storage::Common::Service::StorageService.register_request_callback(&block) if block_given?
80
+ reset!(options)
81
+ end
82
+
83
+ class << self
84
+ # Public: Creates an instance of [Azure::Storage::Common::Client]
85
+ #
86
+ # ==== Attributes
87
+ #
88
+ # * +options+ - Hash. Optional parameters.
89
+ #
90
+ # ==== Options
91
+ #
92
+ # Accepted key/value pairs in options parameter are:
93
+ #
94
+ # * +:use_development_storage+ - TrueClass|FalseClass. Whether to use storage emulator.
95
+ # * +:development_storage_proxy_uri+ - String. Used with +:use_development_storage+ if emulator is hosted other than localhost.
96
+ # * +:storage_account_name+ - String. The name of the storage account.
97
+ # * +:storage_access_key+ - Base64 String. The access key of the storage account.
98
+ # * +:storage_sas_token+ - String. The signed access signature for the storage account or one of its service.
99
+ # * +:storage_blob_host+ - String. Specified Blob service endpoint or hostname
100
+ # * +:storage_table_host+ - String. Specified Table service endpoint or hostname
101
+ # * +:storage_queue_host+ - String. Specified Queue service endpoint or hostname
102
+ # * +:storage_dns_suffix+ - String. The suffix of a regional Storage Service, to
103
+ # * +:default_endpoints_protocol+ - String. http or https
104
+ # * +:use_path_style_uri+ - String. Whether use path style URI for specified endpoints
105
+ # * +:ca_file+ - String. File path of the CA file if having issue with SSL
106
+ # * +:ssl_version+ - Symbol. The ssl version to be used, sample: :TLSv1_1, :TLSv1_2, for the details, see https://github.com/ruby/openssl/blob/master/lib/openssl/ssl.rb
107
+ # * +:ssl_min_version+ - Symbol. The min ssl version supported, only supported in Ruby 2.5+
108
+ # * +:ssl_max_version+ - Symbol. The max ssl version supported, only supported in Ruby 2.5+
109
+ # * +:user_agent_prefix+ - String. The user agent prefix that can identify the application calls the library
110
+ #
111
+ # The valid set of options include:
112
+ # * Storage Emulator: +:use_development_storage+ required, +:development_storage_proxy_uri+ optionally
113
+ # * Storage account name and key: +:storage_account_name+ and +:storage_access_key+ required, set +:storage_dns_suffix+ necessarily
114
+ # * Storage account name and SAS token: +:storage_account_name+ and +:storage_sas_token+ required, set +:storage_dns_suffix+ necessarily
115
+ # * Specified hosts and SAS token: At least one of the service host and SAS token. It's up to user to ensure the SAS token is suitable for the serivce
116
+ # * Anonymous Blob: only +:storage_blob_host+, if it is to only access blobs within a container
117
+ #
118
+ # Additional notes:
119
+ # * Specified hosts can be set when use account name with access key or sas token
120
+ # * +:default_endpoints_protocol+ can be set if the scheme is not specified in hosts
121
+ # * Storage emulator always use path style URI
122
+ # * +:ca_file+ is independent.
123
+ #
124
+ # When empty options are given, it will try to read settings from Environment Variables. Refer to [Azure::Storage::Common::ClientOptions.env_vars_mapping] for the mapping relationship
125
+ #
126
+ # @return [Azure::Storage::Common::Client]
127
+ def create(options = {}, &block)
128
+ Client.new(options, &block)
129
+ end
130
+
131
+ # Public: Creates an instance of [Azure::Storage::Common::Client] with Storage Emulator
132
+ #
133
+ # ==== Attributes
134
+ #
135
+ # * +proxy_uri+ - String. Used with +:use_development_storage+ if emulator is hosted other than localhost.
136
+ #
137
+ # @return [Azure::Storage::Common::Client]
138
+ def create_development(proxy_uri = nil, &block)
139
+ proxy_uri ||= StorageServiceClientConstants::DEV_STORE_URI
140
+ create(use_development_storage: true, development_storage_proxy_uri: proxy_uri, &block)
141
+ end
142
+
143
+ # Public: Creates an instance of [Azure::Storage::Common::Client] from Environment Variables
144
+ #
145
+ # @return [Azure::Storage::Client]
146
+ def create_from_env(&block)
147
+ create(&block)
148
+ end
149
+
150
+ # Public: Creates an instance of [Azure::Storage::Common::Client] from Environment Variables
151
+ #
152
+ # ==== Attributes
153
+ #
154
+ # * +connection_string+ - String. Please refer to https://azure.microsoft.com/en-us/documentation/articles/storage-configure-connection-string/.
155
+ #
156
+ # @return [Azure::Storage::Common::Client]
157
+ def create_from_connection_string(connection_string, &block)
158
+ Client.new(connection_string, &block)
159
+ end
160
+ end
161
+ end
162
+ end