azure 0.6.0 → 0.6.1

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.
Files changed (283) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -11
  3. data/.travis.yml +11 -33
  4. data/ChangeLog.txt +20 -5
  5. data/Gemfile +15 -15
  6. data/README.md +541 -537
  7. data/Rakefile +129 -127
  8. data/azure.gemspec +43 -42
  9. data/lib/azure.rb +52 -51
  10. data/lib/azure/base_management/affinity_group.rb +32 -32
  11. data/lib/azure/base_management/base_management_service.rb +234 -234
  12. data/lib/azure/base_management/location.rb +27 -27
  13. data/lib/azure/base_management/management_http_request.rb +171 -148
  14. data/lib/azure/base_management/serialization.rb +129 -129
  15. data/lib/azure/base_management/sql_management_http_request.rb +45 -0
  16. data/lib/azure/blob/blob.rb +31 -31
  17. data/lib/azure/blob/blob_service.rb +1423 -1423
  18. data/lib/azure/blob/block.rb +30 -30
  19. data/lib/azure/blob/container.rb +31 -31
  20. data/lib/azure/blob/serialization.rb +284 -284
  21. data/lib/azure/cloud_service_management/cloud_service.rb +38 -31
  22. data/lib/azure/cloud_service_management/cloud_service_management_service.rb +134 -125
  23. data/lib/azure/cloud_service_management/serialization.rb +101 -63
  24. data/lib/azure/core.rb +39 -36
  25. data/lib/azure/core/auth/authorizer.rb +36 -36
  26. data/lib/azure/core/auth/shared_key.rb +110 -110
  27. data/lib/azure/core/auth/shared_key_lite.rb +48 -48
  28. data/lib/azure/core/auth/signer.rb +48 -48
  29. data/lib/azure/core/configuration.rb +211 -184
  30. data/lib/azure/core/error.rb +22 -22
  31. data/lib/azure/core/filtered_service.rb +43 -43
  32. data/lib/azure/core/http/debug_filter.rb +35 -35
  33. data/lib/azure/core/http/http_error.rb +88 -88
  34. data/lib/azure/core/http/http_filter.rb +52 -52
  35. data/lib/azure/core/http/http_request.rb +157 -157
  36. data/lib/azure/core/http/http_response.rb +140 -140
  37. data/lib/azure/core/http/retry_policy.rb +73 -73
  38. data/lib/azure/core/http/signer_filter.rb +33 -33
  39. data/lib/azure/core/service.rb +62 -62
  40. data/lib/azure/core/signed_service.rb +42 -42
  41. data/lib/azure/core/utility.rb +190 -190
  42. data/lib/azure/queue/message.rb +29 -29
  43. data/lib/azure/queue/queue.rb +28 -28
  44. data/lib/azure/queue/queue_service.rb +567 -567
  45. data/lib/azure/queue/serialization.rb +106 -106
  46. data/lib/azure/service/access_policy.rb +25 -25
  47. data/lib/azure/service/enumeration_results.rb +20 -20
  48. data/lib/azure/service/logging.rb +31 -31
  49. data/lib/azure/service/metrics.rb +30 -30
  50. data/lib/azure/service/retention_policy.rb +24 -24
  51. data/lib/azure/service/serialization.rb +239 -239
  52. data/lib/azure/service/signed_identifier.rb +29 -29
  53. data/lib/azure/service/storage_service.rb +78 -78
  54. data/lib/azure/service/storage_service_properties.rb +31 -31
  55. data/lib/azure/service_bus/action.rb +21 -21
  56. data/lib/azure/service_bus/auth/wrap_service.rb +88 -88
  57. data/lib/azure/service_bus/auth/wrap_signer.rb +68 -68
  58. data/lib/azure/service_bus/brokered_message.rb +123 -123
  59. data/lib/azure/service_bus/brokered_message_serializer.rb +159 -159
  60. data/lib/azure/service_bus/correlation_filter.rb +45 -45
  61. data/lib/azure/service_bus/empty_rule_action.rb +29 -29
  62. data/lib/azure/service_bus/false_filter.rb +38 -38
  63. data/lib/azure/service_bus/filter.rb +21 -21
  64. data/lib/azure/service_bus/interval.rb +103 -103
  65. data/lib/azure/service_bus/queue.rb +229 -229
  66. data/lib/azure/service_bus/resource.rb +108 -108
  67. data/lib/azure/service_bus/rule.rb +97 -97
  68. data/lib/azure/service_bus/rule_aspect.rb +34 -34
  69. data/lib/azure/service_bus/serialization.rb +160 -160
  70. data/lib/azure/service_bus/service_bus_service.rb +828 -828
  71. data/lib/azure/service_bus/sql_filter.rb +50 -50
  72. data/lib/azure/service_bus/sql_rule_action.rb +50 -50
  73. data/lib/azure/service_bus/subscription.rb +183 -183
  74. data/lib/azure/service_bus/topic.rb +186 -186
  75. data/lib/azure/service_bus/true_filter.rb +38 -38
  76. data/lib/azure/sql_database_management/serialization.rb +111 -90
  77. data/lib/azure/sql_database_management/sql_database.rb +31 -31
  78. data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -202
  79. data/lib/azure/storage_management/serialization.rb +190 -50
  80. data/lib/azure/storage_management/storage_account.rb +40 -29
  81. data/lib/azure/storage_management/storage_management_service.rb +166 -99
  82. data/lib/azure/table/auth/shared_key.rb +92 -92
  83. data/lib/azure/table/auth/shared_key_lite.rb +44 -44
  84. data/lib/azure/table/batch.rb +329 -329
  85. data/lib/azure/table/batch_response.rb +118 -118
  86. data/lib/azure/table/edmtype.rb +126 -126
  87. data/lib/azure/table/entity.rb +30 -30
  88. data/lib/azure/table/guid.rb +23 -23
  89. data/lib/azure/table/query.rb +111 -111
  90. data/lib/azure/table/serialization.rb +107 -107
  91. data/lib/azure/table/table_service.rb +559 -559
  92. data/lib/azure/version.rb +30 -30
  93. data/lib/azure/virtual_machine_image_management/serialization.rb +49 -49
  94. data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +27 -27
  95. data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +27 -27
  96. data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +66 -66
  97. data/lib/azure/virtual_machine_management/serialization.rb +257 -247
  98. data/lib/azure/virtual_machine_management/virtual_machine.rb +41 -57
  99. data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +317 -304
  100. data/lib/azure/virtual_network_management/serialization.rb +186 -186
  101. data/lib/azure/virtual_network_management/virtual_network.rb +36 -36
  102. data/lib/azure/virtual_network_management/virtual_network_management_service.rb +109 -109
  103. data/test/fixtures/affinity_group.xml +33 -33
  104. data/test/fixtures/all_containers.xml +20 -20
  105. data/test/fixtures/all_tables.xml +22 -22
  106. data/test/fixtures/certificate.pem +21 -21
  107. data/test/fixtures/container_acl.xml +11 -11
  108. data/test/fixtures/create_sql_database_server.xml +1 -1
  109. data/test/fixtures/create_storage_desc_error.xml +5 -0
  110. data/test/fixtures/create_storage_extendedprop_error.xml +8 -0
  111. data/test/fixtures/create_storage_extendedpropname_error.xml +6 -0
  112. data/test/fixtures/create_storage_full_error.xml +6 -0
  113. data/test/fixtures/create_storage_label_error.xml +5 -0
  114. data/test/fixtures/create_storage_location_error.xml +5 -0
  115. data/test/fixtures/create_storage_name_error.xml +6 -0
  116. data/test/fixtures/create_table_response_entry.xml +15 -15
  117. data/test/fixtures/delete_storage_container_error.xml +5 -0
  118. data/test/fixtures/delete_storage_error.xml +5 -0
  119. data/test/fixtures/deployment_error.xml +5 -5
  120. data/test/fixtures/get_storage_account_error.xml +5 -0
  121. data/test/fixtures/get_storage_account_properties.xml +32 -0
  122. data/test/fixtures/get_storage_account_properties_new.xml +32 -0
  123. data/test/fixtures/http_error.xml +5 -5
  124. data/test/fixtures/insert_entity_response_entry.xml +25 -25
  125. data/test/fixtures/list_affinity_groups.xml +22 -22
  126. data/test/fixtures/list_blobs.xml +120 -120
  127. data/test/fixtures/list_block_all_with_none_committed.xml +21 -21
  128. data/test/fixtures/list_blocks_all.xml +22 -22
  129. data/test/fixtures/list_blocks_committed.xml +12 -12
  130. data/test/fixtures/list_cloud_services.xml +38 -28
  131. data/test/fixtures/list_containers.xml +37 -37
  132. data/test/fixtures/list_firewall_management_endpoint.xml +27 -0
  133. data/test/fixtures/list_images.xml +110 -110
  134. data/test/fixtures/list_locations.xml +62 -62
  135. data/test/fixtures/list_page_ranges.xml +10 -10
  136. data/test/fixtures/list_sql_database.xml +36 -36
  137. data/test/fixtures/list_sql_server_firewall.xml +23 -23
  138. data/test/fixtures/list_storage_accounts.xml +45 -45
  139. data/test/fixtures/list_virtual_networks.xml +92 -92
  140. data/test/fixtures/logging.xml +11 -11
  141. data/test/fixtures/management_certificate.pem +55 -55
  142. data/test/fixtures/messages.xml +12 -12
  143. data/test/fixtures/metrics.xml +10 -10
  144. data/test/fixtures/privatekey.key +28 -28
  145. data/test/fixtures/query_entities_empty_response.xml +7 -7
  146. data/test/fixtures/query_entities_response.xml +45 -45
  147. data/test/fixtures/queue_service_properties.xml +22 -22
  148. data/test/fixtures/queue_service_properties_original.xml +19 -19
  149. data/test/fixtures/queues.xml +16 -16
  150. data/test/fixtures/retention_policy.xml +5 -5
  151. data/test/fixtures/sb_default_create_queue_response.xml +23 -23
  152. data/test/fixtures/sb_default_create_topic_response.xml +18 -18
  153. data/test/fixtures/sb_get_access_token_response.txt +1 -1
  154. data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -9
  155. data/test/fixtures/storage_service_properties.xml +23 -23
  156. data/test/fixtures/update_storage_account.xml +16 -0
  157. data/test/fixtures/update_storage_error.xml +5 -0
  158. data/test/fixtures/updated_storage_accounts.xml +53 -0
  159. data/test/fixtures/virtual_machine.xml +108 -107
  160. data/test/fixtures/windows_virtual_machine.xml +106 -106
  161. data/test/integration/affinity_group/Affinity_test.rb +55 -55
  162. data/test/integration/affinity_group/Create_Affinity_test.rb +63 -63
  163. data/test/integration/affinity_group/Delete_Affinity_test.rb +56 -56
  164. data/test/integration/affinity_group/List_Affinity_test.rb +41 -41
  165. data/test/integration/affinity_group/Update_Affinity_test.rb +82 -82
  166. data/test/integration/blob/blob_gb18030_test.rb +199 -199
  167. data/test/integration/blob/blob_metadata_test.rb +75 -75
  168. data/test/integration/blob/blob_pages_test.rb +119 -119
  169. data/test/integration/blob/blob_properties_test.rb +77 -77
  170. data/test/integration/blob/block_blob_test.rb +254 -254
  171. data/test/integration/blob/container/container_acl_test.rb +69 -69
  172. data/test/integration/blob/container/container_metadata_test.rb +50 -50
  173. data/test/integration/blob/container/create_container_test.rb +60 -60
  174. data/test/integration/blob/container/delete_container_test.rb +39 -39
  175. data/test/integration/blob/container/get_container_properties_test.rb +48 -48
  176. data/test/integration/blob/container/list_containers_test.rb +79 -79
  177. data/test/integration/blob/container/root_container_test.rb +53 -53
  178. data/test/integration/blob/copy_blob_test.rb +113 -113
  179. data/test/integration/blob/create_blob_snapshot_test.rb +80 -80
  180. data/test/integration/blob/create_page_blob_test.rb +83 -83
  181. data/test/integration/blob/delete_blob_test.rb +159 -159
  182. data/test/integration/blob/get_blob_test.rb +65 -65
  183. data/test/integration/blob/informative_errors_test.rb +38 -38
  184. data/test/integration/blob/lease/acquire_lease_test.rb +36 -36
  185. data/test/integration/blob/lease/break_lease_test.rb +40 -40
  186. data/test/integration/blob/lease/release_lease_test.rb +40 -40
  187. data/test/integration/blob/lease/renew_lease_test.rb +42 -42
  188. data/test/integration/blob/list_blobs_test.rb +113 -113
  189. data/test/integration/database/create_sql_server_firewall_test.rb +86 -86
  190. data/test/integration/database/create_sql_server_test.rb +53 -57
  191. data/test/integration/database/delete_sql_server_firewall_test.rb +70 -72
  192. data/test/integration/database/delete_sql_server_test.rb +58 -63
  193. data/test/integration/database/list_sql_server_firewall_test.rb +45 -46
  194. data/test/integration/database/list_sql_servers_test.rb +44 -45
  195. data/test/integration/database/reset_password_sql_server_test.rb +55 -56
  196. data/test/integration/location/Location_List_test.rb +39 -39
  197. data/test/integration/queue/clear_messages_test.rb +42 -42
  198. data/test/integration/queue/create_message_test.rb +75 -75
  199. data/test/integration/queue/create_queue_test.rb +50 -50
  200. data/test/integration/queue/delete_message_test.rb +67 -67
  201. data/test/integration/queue/delete_queue_test.rb +45 -45
  202. data/test/integration/queue/informative_errors_test.rb +41 -41
  203. data/test/integration/queue/list_messages_encoded_test.rb +79 -79
  204. data/test/integration/queue/list_messages_test.rb +79 -79
  205. data/test/integration/queue/list_queues_test.rb +44 -44
  206. data/test/integration/queue/peek_messages_test.rb +59 -59
  207. data/test/integration/queue/queue_gb18030_test.rb +131 -131
  208. data/test/integration/queue/queue_metadata_test.rb +40 -40
  209. data/test/integration/queue/update_message_test.rb +74 -74
  210. data/test/integration/service_bus/informative_errors_test.rb +36 -36
  211. data/test/integration/service_bus/queues_scenario_test.rb +200 -200
  212. data/test/integration/service_bus/queues_test.rb +265 -265
  213. data/test/integration/service_bus/rules_test.rb +144 -144
  214. data/test/integration/service_bus/sb_queue_gb18030_test.rb +182 -182
  215. data/test/integration/service_bus/scenario_test.rb +101 -101
  216. data/test/integration/service_bus/subscriptions_test.rb +211 -211
  217. data/test/integration/service_bus/topics_scenario_test.rb +406 -406
  218. data/test/integration/service_bus/topics_test.rb +129 -129
  219. data/test/integration/storage_management/storage_management_test.rb +160 -0
  220. data/test/integration/table/create_table_test.rb +35 -35
  221. data/test/integration/table/delete_entity_batch_test.rb +106 -106
  222. data/test/integration/table/delete_entity_test.rb +93 -93
  223. data/test/integration/table/delete_table_test.rb +39 -39
  224. data/test/integration/table/get_table_test.rb +36 -36
  225. data/test/integration/table/informative_errors_test.rb +38 -38
  226. data/test/integration/table/insert_entity_batch_test.rb +99 -99
  227. data/test/integration/table/insert_entity_test.rb +87 -87
  228. data/test/integration/table/insert_or_merge_entity_batch_test.rb +158 -158
  229. data/test/integration/table/insert_or_merge_entity_test.rb +142 -142
  230. data/test/integration/table/insert_or_replace_entity_batch_test.rb +151 -151
  231. data/test/integration/table/insert_or_replace_entity_test.rb +136 -136
  232. data/test/integration/table/merge_entity_batch_test.rb +127 -127
  233. data/test/integration/table/merge_entity_test.rb +112 -112
  234. data/test/integration/table/query_entities_test.rb +194 -194
  235. data/test/integration/table/query_tables_test.rb +42 -42
  236. data/test/integration/table/query_test.rb +250 -250
  237. data/test/integration/table/table_acl_test.rb +51 -51
  238. data/test/integration/table/table_gb18030_test.rb +355 -355
  239. data/test/integration/table/update_entity_batch_test.rb +148 -148
  240. data/test/integration/table/update_entity_test.rb +130 -130
  241. data/test/integration/test_helper.rb +42 -44
  242. data/test/integration/vm/VM_Create_test.rb +213 -235
  243. data/test/integration/vm/VM_Delete_test.rb +55 -55
  244. data/test/integration/vm/VM_List_test.rb +71 -71
  245. data/test/integration/vm/VM_ShutDown_test.rb +59 -59
  246. data/test/integration/vm_image/virtual_machine_disk_test.rb +37 -37
  247. data/test/integration/vm_image/virtual_machine_image_test.rb +36 -36
  248. data/test/integration/vnet/Virtual_Network_Create_test.rb +122 -122
  249. data/test/integration/vnet/Virtual_Network_list_test.rb +53 -53
  250. data/test/support/env.rb +19 -19
  251. data/test/support/fixtures.rb +36 -36
  252. data/test/support/name_generator.rb +160 -160
  253. data/test/support/stubs.rb +42 -42
  254. data/test/support/virtual_machine_name_generator.rb +117 -127
  255. data/test/support/virtual_network_helper.rb +73 -73
  256. data/test/test_helper.rb +52 -52
  257. data/test/unit/affinity_group/affinity_group_test.rb +192 -192
  258. data/test/unit/affinity_group/serialization_test.rb +88 -88
  259. data/test/unit/base_management/location_test.rb +57 -57
  260. data/test/unit/blob/blob_service_test.rb +1946 -1946
  261. data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +94 -94
  262. data/test/unit/cloud_service_management/serialization_test.rb +169 -76
  263. data/test/unit/core/auth/shared_key_lite_test.rb +51 -51
  264. data/test/unit/core/auth/shared_key_test.rb +58 -58
  265. data/test/unit/core/auth/signer_test.rb +30 -30
  266. data/test/unit/core/http/http_error_test.rb +57 -57
  267. data/test/unit/core/http/http_request_test.rb +66 -66
  268. data/test/unit/core/http/http_response_test.rb +45 -45
  269. data/test/unit/core/http/retry_policy_test.rb +23 -23
  270. data/test/unit/database/serialization_test.rb +97 -95
  271. data/test/unit/database/sql_database_server_service_test.rb +288 -152
  272. data/test/unit/service/serialization_test.rb +501 -501
  273. data/test/unit/service/storage_service_test.rb +290 -290
  274. data/test/unit/storage_management/serialization_test.rb +232 -65
  275. data/test/unit/storage_management/storage_management_service_test.rb +233 -94
  276. data/test/unit/table/edmtype_test.rb +107 -107
  277. data/test/unit/virtual_machine_image_management/serialization_test.rb +34 -34
  278. data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +60 -60
  279. data/test/unit/virtual_machine_management/serialization_test.rb +119 -116
  280. data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +383 -386
  281. data/test/unit/vnet/serialization_test.rb +187 -187
  282. data/test/unit/vnet/virtual_network_management_service_test.rb +131 -131
  283. metadata +55 -23
@@ -1,157 +1,157 @@
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
- require "digest/md5"
16
- require "base64"
17
- require "net/http"
18
- require "time"
19
-
20
- require "azure/version"
21
- require "azure/core/http/http_response"
22
-
23
- module Azure
24
- module Core
25
- module Http
26
- # Represents a HTTP request can perform synchronous queries to a
27
- # HTTP server, returning a HttpResponse
28
- class HttpRequest
29
-
30
- alias_method :_method, :method
31
-
32
- # The HTTP method to use (:get, :post, :put, :delete, etc...)
33
- attr_accessor :method
34
-
35
- # The URI of the HTTP endpoint to query
36
- attr_accessor :uri
37
-
38
- # The header values as a Hash
39
- attr_accessor :headers
40
-
41
- # The body of the request (IO or String)
42
- attr_accessor :body
43
-
44
- # Public: Create the HttpRequest
45
- #
46
- # method - Symbol. The HTTP method to use (:get, :post, :put, :del, etc...)
47
- # uri - URI. The URI of the HTTP endpoint to query
48
- # body - IO or String. The request body (optional)
49
- # current_time - String. The current time as a HTTP date string
50
- def initialize(method, uri, body=nil, current_time=Time.now.httpdate)
51
- @method = method
52
- @uri = uri
53
- @body = body
54
- @headers = {}
55
-
56
- default_headers current_time
57
- end
58
-
59
- # Public: Applies a HttpFilter to the HTTP Pipeline
60
- #
61
- # filter - Any object that responds to .call(req, _next) and
62
- # returns a HttpResponse eg. HttpFilter, Proc,
63
- # lambda, etc. (optional)
64
- #
65
- # &block - An inline block may be used instead of a filter
66
- #
67
- # example:
68
- #
69
- # request.with_filter do |req, _next|
70
- # _next.call
71
- # end
72
- #
73
- # NOTE:
74
- #
75
- # The code block provided must call _next or the filter pipeline
76
- # will not complete and the HTTP request will never execute
77
- #
78
- def with_filter(filter=nil, &block)
79
- filter = filter || block
80
- if filter
81
- old_impl = self._method(:call)
82
-
83
- # support 1.8.7 (define_singleton_method doesn't exist until 1.9.1)
84
- new_impl = Proc.new do filter.call(self, old_impl) end
85
- k = class << self; self; end
86
- if k.method_defined? :define_singleton_method
87
- self.define_singleton_method(:call, new_impl)
88
- else
89
- k.send(:define_method, :call, new_impl)
90
- end
91
- end
92
- end
93
-
94
- # Build a default headers Hash
95
- def default_headers(current_time)
96
- headers["User-Agent"] = "Azure-SDK-For-Ruby/" + Azure::Version.to_s
97
- headers["x-ms-date"] = current_time
98
- headers["x-ms-version"] = "2012-02-12"
99
- headers["DataServiceVersion"] = "1.0;NetFx"
100
- headers["MaxDataServiceVersion"] = "2.0;NetFx"
101
-
102
- if body
103
- headers["Content-Type"] = "application/atom+xml; charset=utf-8"
104
- headers["Content-Length"] = body.bytesize.to_s
105
- headers["Content-MD5"] = Base64.strict_encode64(Digest::MD5.digest(body))
106
- else
107
- headers["Content-Length"] = "0"
108
- headers["Content-Type"] = ""
109
- end
110
- end
111
-
112
- # Obtain the Net::HTTP class that will handle this request
113
- #
114
- # Returns a subclass of Net::HTTPRequest
115
- def http_request_class
116
- Net::HTTP.const_get(method.to_s.capitalize)
117
- rescue NameError => e
118
- e.message = "#{method} is an invalid HTTP method"
119
- raise
120
- end
121
-
122
-
123
- # Public: Sends request to HTTP server and returns a HttpResponse
124
- #
125
- # Returns a HttpResponse
126
- def call
127
- request = http_request_class.new(uri.request_uri, headers)
128
- request.body = body if body
129
-
130
- http = nil
131
- if ENV['HTTP_PROXY'] || ENV['HTTPS_PROXY']
132
- if ENV['HTTP_PROXY']
133
- proxy_uri = URI::parse(ENV['HTTP_PROXY'])
134
- else
135
- proxy_uri = URI::parse(ENV['HTTPS_PROXY'])
136
- end
137
-
138
- http = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port).new(uri.host, uri.port)
139
- else
140
- http = Net::HTTP.new(uri.host, uri.port)
141
- end
142
-
143
- if uri.scheme.downcase == 'https'
144
- # require 'net/https'
145
- http.use_ssl = true
146
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
147
- end
148
-
149
- response = HttpResponse.new(http.request(request))
150
- response.uri = uri
151
- raise response.error unless response.success?
152
- response
153
- end
154
- end
155
- end
156
- end
157
- end
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
+ require "digest/md5"
16
+ require "base64"
17
+ require "net/http"
18
+ require "time"
19
+
20
+ require "azure/version"
21
+ require "azure/core/http/http_response"
22
+
23
+ module Azure
24
+ module Core
25
+ module Http
26
+ # Represents a HTTP request can perform synchronous queries to a
27
+ # HTTP server, returning a HttpResponse
28
+ class HttpRequest
29
+
30
+ alias_method :_method, :method
31
+
32
+ # The HTTP method to use (:get, :post, :put, :delete, etc...)
33
+ attr_accessor :method
34
+
35
+ # The URI of the HTTP endpoint to query
36
+ attr_accessor :uri
37
+
38
+ # The header values as a Hash
39
+ attr_accessor :headers
40
+
41
+ # The body of the request (IO or String)
42
+ attr_accessor :body
43
+
44
+ # Public: Create the HttpRequest
45
+ #
46
+ # method - Symbol. The HTTP method to use (:get, :post, :put, :del, etc...)
47
+ # uri - URI. The URI of the HTTP endpoint to query
48
+ # body - IO or String. The request body (optional)
49
+ # current_time - String. The current time as a HTTP date string
50
+ def initialize(method, uri, body=nil, current_time=Time.now.httpdate)
51
+ @method = method
52
+ @uri = uri
53
+ @body = body
54
+ @headers = {}
55
+
56
+ default_headers current_time
57
+ end
58
+
59
+ # Public: Applies a HttpFilter to the HTTP Pipeline
60
+ #
61
+ # filter - Any object that responds to .call(req, _next) and
62
+ # returns a HttpResponse eg. HttpFilter, Proc,
63
+ # lambda, etc. (optional)
64
+ #
65
+ # &block - An inline block may be used instead of a filter
66
+ #
67
+ # example:
68
+ #
69
+ # request.with_filter do |req, _next|
70
+ # _next.call
71
+ # end
72
+ #
73
+ # NOTE:
74
+ #
75
+ # The code block provided must call _next or the filter pipeline
76
+ # will not complete and the HTTP request will never execute
77
+ #
78
+ def with_filter(filter=nil, &block)
79
+ filter = filter || block
80
+ if filter
81
+ old_impl = self._method(:call)
82
+
83
+ # support 1.8.7 (define_singleton_method doesn't exist until 1.9.1)
84
+ new_impl = Proc.new do filter.call(self, old_impl) end
85
+ k = class << self; self; end
86
+ if k.method_defined? :define_singleton_method
87
+ self.define_singleton_method(:call, new_impl)
88
+ else
89
+ k.send(:define_method, :call, new_impl)
90
+ end
91
+ end
92
+ end
93
+
94
+ # Build a default headers Hash
95
+ def default_headers(current_time)
96
+ headers["User-Agent"] = "Azure-SDK-For-Ruby/" + Azure::Version.to_s
97
+ headers["x-ms-date"] = current_time
98
+ headers["x-ms-version"] = "2012-02-12"
99
+ headers["DataServiceVersion"] = "1.0;NetFx"
100
+ headers["MaxDataServiceVersion"] = "2.0;NetFx"
101
+
102
+ if body
103
+ headers["Content-Type"] = "application/atom+xml; charset=utf-8"
104
+ headers["Content-Length"] = body.bytesize.to_s
105
+ headers["Content-MD5"] = Base64.strict_encode64(Digest::MD5.digest(body))
106
+ else
107
+ headers["Content-Length"] = "0"
108
+ headers["Content-Type"] = ""
109
+ end
110
+ end
111
+
112
+ # Obtain the Net::HTTP class that will handle this request
113
+ #
114
+ # Returns a subclass of Net::HTTPRequest
115
+ def http_request_class
116
+ Net::HTTP.const_get(method.to_s.capitalize)
117
+ rescue NameError => e
118
+ e.message = "#{method} is an invalid HTTP method"
119
+ raise
120
+ end
121
+
122
+
123
+ # Public: Sends request to HTTP server and returns a HttpResponse
124
+ #
125
+ # Returns a HttpResponse
126
+ def call
127
+ request = http_request_class.new(uri.request_uri, headers)
128
+ request.body = body if body
129
+
130
+ http = nil
131
+ if ENV['HTTP_PROXY'] || ENV['HTTPS_PROXY']
132
+ if ENV['HTTP_PROXY']
133
+ proxy_uri = URI::parse(ENV['HTTP_PROXY'])
134
+ else
135
+ proxy_uri = URI::parse(ENV['HTTPS_PROXY'])
136
+ end
137
+
138
+ http = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port).new(uri.host, uri.port)
139
+ else
140
+ http = Net::HTTP.new(uri.host, uri.port)
141
+ end
142
+
143
+ if uri.scheme.downcase == 'https'
144
+ # require 'net/https'
145
+ http.use_ssl = true
146
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
147
+ end
148
+
149
+ response = HttpResponse.new(http.request(request))
150
+ response.uri = uri
151
+ raise response.error unless response.success?
152
+ response
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
@@ -1,140 +1,140 @@
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
- require "azure/core/http/http_error"
16
-
17
- module Azure
18
- module Core
19
- module Http
20
- # A small proxy to clean up the API of Net::HTTPResponse.
21
- class HttpResponse
22
-
23
- # Public: Initialize a new response.
24
- #
25
- # http_response - A Net::HTTPResponse.
26
- def initialize(http_response, uri="")
27
- @http_response = http_response
28
- @uri = uri
29
- end
30
-
31
- attr_accessor :uri
32
-
33
- # Public: Get the response body.
34
- #
35
- # Returns a String.
36
- def body
37
- @http_response.body
38
- end
39
-
40
- # Public: Get the response status message.
41
- #
42
- # Returns a String.
43
- def message
44
- @http_response.message
45
- end
46
-
47
- # Public: Get the response status code.
48
- #
49
- # Returns a Fixnum.
50
- def status_code
51
- @http_response.code.to_i
52
- end
53
-
54
- # Public: Check if this response was successful. A request is considered
55
- # successful if the response is in the 200 - 399 range.
56
- #
57
- # Returns nil|false.
58
- def success?
59
- (200..399).include? status_code
60
- end
61
-
62
- # Public: Get all the response headers as a Hash.
63
- #
64
- # Returns a Hash.
65
- def headers
66
- @headers ||= HeaderHash.new(@http_response.to_hash)
67
- end
68
-
69
- # Public: Get an error that wraps this HTTP response, as long as this
70
- # response was unsuccessful. This method will return nil if the
71
- # response was successful.
72
- #
73
- # Returns an Azure::Core::Http::HTTPError.
74
- def exception
75
- HTTPError.new(self) unless success?
76
- end
77
-
78
- alias_method :error, :exception
79
-
80
- # Since HTTP Headers are case insensitive, this class will
81
- # normalize them to lowercase. This also wraps Net::HTTPResponse
82
- # headers by returning their values as strings, not arrays, by selecting
83
- # the first value from the array.
84
- class HeaderHash < Hash
85
- # Public: Initialize the header hash.
86
- #
87
- # headers - A Hash of headers as returned from Net::HTTPResponse#to_hash.
88
- def initialize(headers)
89
- super
90
- headers = Hash[headers.map { |k,v| [k.downcase.freeze, v.first.freeze] }]
91
- replace(headers)
92
- end
93
-
94
- # Public: Get a header's value or nil if it's not present.
95
- #
96
- # header - A string with the header's name.
97
- #
98
- # Returns a String or nil.
99
- def [](header)
100
- super(header.downcase)
101
- end
102
-
103
- # Public: Get a header's value or a specified default.
104
- #
105
- # header - A string with the header's name.
106
- # default - A default value.
107
- #
108
- # Yields a block where you can specify the default value.
109
- #
110
- # Returns a String, or the specified default.
111
- def fetch(header, *default, &block)
112
- if (args = default.size) > 1
113
- raise ArgumentError, "wrong number of arguments(#{args + 1} for 2)"
114
- end
115
-
116
- super(header.downcase, *default, &block)
117
- end
118
- end
119
-
120
- class MockResponse
121
- def initialize(code, body, headers)
122
- @code = code.to_s
123
- @body = body
124
- @headers = headers
125
- @headers.each { |k,v|
126
- @headers[k] = [v] unless v.respond_to? first
127
- }
128
- end
129
- attr_accessor :code
130
- attr_accessor :body
131
- attr_accessor :headers
132
-
133
- def to_hash
134
- @headers
135
- end
136
- end
137
- end
138
- end
139
- end
140
- end
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
+ require "azure/core/http/http_error"
16
+
17
+ module Azure
18
+ module Core
19
+ module Http
20
+ # A small proxy to clean up the API of Net::HTTPResponse.
21
+ class HttpResponse
22
+
23
+ # Public: Initialize a new response.
24
+ #
25
+ # http_response - A Net::HTTPResponse.
26
+ def initialize(http_response, uri="")
27
+ @http_response = http_response
28
+ @uri = uri
29
+ end
30
+
31
+ attr_accessor :uri
32
+
33
+ # Public: Get the response body.
34
+ #
35
+ # Returns a String.
36
+ def body
37
+ @http_response.body
38
+ end
39
+
40
+ # Public: Get the response status message.
41
+ #
42
+ # Returns a String.
43
+ def message
44
+ @http_response.message
45
+ end
46
+
47
+ # Public: Get the response status code.
48
+ #
49
+ # Returns a Fixnum.
50
+ def status_code
51
+ @http_response.code.to_i
52
+ end
53
+
54
+ # Public: Check if this response was successful. A request is considered
55
+ # successful if the response is in the 200 - 399 range.
56
+ #
57
+ # Returns nil|false.
58
+ def success?
59
+ (200..399).include? status_code
60
+ end
61
+
62
+ # Public: Get all the response headers as a Hash.
63
+ #
64
+ # Returns a Hash.
65
+ def headers
66
+ @headers ||= HeaderHash.new(@http_response.to_hash)
67
+ end
68
+
69
+ # Public: Get an error that wraps this HTTP response, as long as this
70
+ # response was unsuccessful. This method will return nil if the
71
+ # response was successful.
72
+ #
73
+ # Returns an Azure::Core::Http::HTTPError.
74
+ def exception
75
+ HTTPError.new(self) unless success?
76
+ end
77
+
78
+ alias_method :error, :exception
79
+
80
+ # Since HTTP Headers are case insensitive, this class will
81
+ # normalize them to lowercase. This also wraps Net::HTTPResponse
82
+ # headers by returning their values as strings, not arrays, by selecting
83
+ # the first value from the array.
84
+ class HeaderHash < Hash
85
+ # Public: Initialize the header hash.
86
+ #
87
+ # headers - A Hash of headers as returned from Net::HTTPResponse#to_hash.
88
+ def initialize(headers)
89
+ super
90
+ headers = Hash[headers.map { |k,v| [k.downcase.freeze, v.first.freeze] }]
91
+ replace(headers)
92
+ end
93
+
94
+ # Public: Get a header's value or nil if it's not present.
95
+ #
96
+ # header - A string with the header's name.
97
+ #
98
+ # Returns a String or nil.
99
+ def [](header)
100
+ super(header.downcase)
101
+ end
102
+
103
+ # Public: Get a header's value or a specified default.
104
+ #
105
+ # header - A string with the header's name.
106
+ # default - A default value.
107
+ #
108
+ # Yields a block where you can specify the default value.
109
+ #
110
+ # Returns a String, or the specified default.
111
+ def fetch(header, *default, &block)
112
+ if (args = default.size) > 1
113
+ raise ArgumentError, "wrong number of arguments(#{args + 1} for 2)"
114
+ end
115
+
116
+ super(header.downcase, *default, &block)
117
+ end
118
+ end
119
+
120
+ class MockResponse
121
+ def initialize(code, body, headers)
122
+ @code = code.to_s
123
+ @body = body
124
+ @headers = headers
125
+ @headers.each { |k,v|
126
+ @headers[k] = [v] unless v.respond_to? first
127
+ }
128
+ end
129
+ attr_accessor :code
130
+ attr_accessor :body
131
+ attr_accessor :headers
132
+
133
+ def to_hash
134
+ @headers
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end