stuartpreston-azure-sdk-for-ruby 0.7.1 → 0.7.2

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 (290) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -11
  3. data/.travis.yml +10 -10
  4. data/ChangeLog.txt +70 -68
  5. data/Gemfile +15 -15
  6. data/README.md +618 -618
  7. data/Rakefile +133 -133
  8. data/azure.gemspec +44 -44
  9. data/lib/azure.rb +52 -52
  10. data/lib/azure/base_management/affinity_group.rb +32 -32
  11. data/lib/azure/base_management/base_management_service.rb +304 -304
  12. data/lib/azure/base_management/location.rb +27 -27
  13. data/lib/azure/base_management/management_http_request.rb +171 -171
  14. data/lib/azure/base_management/serialization.rb +129 -129
  15. data/lib/azure/base_management/sql_management_http_request.rb +45 -45
  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 -38
  22. data/lib/azure/cloud_service_management/cloud_service_management_service.rb +140 -140
  23. data/lib/azure/cloud_service_management/serialization.rb +117 -117
  24. data/lib/azure/core.rb +39 -39
  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 -211
  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/cors.rb +11 -11
  48. data/lib/azure/service/cors_rule.rb +15 -15
  49. data/lib/azure/service/enumeration_results.rb +20 -20
  50. data/lib/azure/service/logging.rb +31 -31
  51. data/lib/azure/service/metrics.rb +30 -30
  52. data/lib/azure/service/retention_policy.rb +24 -24
  53. data/lib/azure/service/serialization.rb +297 -297
  54. data/lib/azure/service/signed_identifier.rb +29 -29
  55. data/lib/azure/service/storage_service.rb +82 -82
  56. data/lib/azure/service/storage_service_properties.rb +37 -37
  57. data/lib/azure/service_bus/action.rb +21 -21
  58. data/lib/azure/service_bus/auth/wrap_service.rb +88 -88
  59. data/lib/azure/service_bus/auth/wrap_signer.rb +68 -68
  60. data/lib/azure/service_bus/brokered_message.rb +123 -123
  61. data/lib/azure/service_bus/brokered_message_serializer.rb +159 -159
  62. data/lib/azure/service_bus/correlation_filter.rb +45 -45
  63. data/lib/azure/service_bus/empty_rule_action.rb +29 -29
  64. data/lib/azure/service_bus/false_filter.rb +38 -38
  65. data/lib/azure/service_bus/filter.rb +21 -21
  66. data/lib/azure/service_bus/interval.rb +103 -103
  67. data/lib/azure/service_bus/queue.rb +229 -229
  68. data/lib/azure/service_bus/relay.rb +87 -87
  69. data/lib/azure/service_bus/resource.rb +108 -108
  70. data/lib/azure/service_bus/rule.rb +97 -97
  71. data/lib/azure/service_bus/rule_aspect.rb +34 -34
  72. data/lib/azure/service_bus/serialization.rb +161 -161
  73. data/lib/azure/service_bus/service_bus_service.rb +896 -896
  74. data/lib/azure/service_bus/sql_filter.rb +50 -50
  75. data/lib/azure/service_bus/sql_rule_action.rb +50 -50
  76. data/lib/azure/service_bus/subscription.rb +183 -183
  77. data/lib/azure/service_bus/topic.rb +186 -186
  78. data/lib/azure/service_bus/true_filter.rb +38 -38
  79. data/lib/azure/sql_database_management/serialization.rb +111 -111
  80. data/lib/azure/sql_database_management/sql_database.rb +31 -31
  81. data/lib/azure/sql_database_management/sql_database_management_service.rb +200 -200
  82. data/lib/azure/storage_management/serialization.rb +184 -184
  83. data/lib/azure/storage_management/storage_account.rb +40 -40
  84. data/lib/azure/storage_management/storage_management_service.rb +166 -166
  85. data/lib/azure/table/auth/shared_key.rb +92 -92
  86. data/lib/azure/table/auth/shared_key_lite.rb +44 -44
  87. data/lib/azure/table/batch.rb +329 -329
  88. data/lib/azure/table/batch_response.rb +118 -118
  89. data/lib/azure/table/edmtype.rb +126 -126
  90. data/lib/azure/table/entity.rb +30 -30
  91. data/lib/azure/table/guid.rb +23 -23
  92. data/lib/azure/table/query.rb +111 -111
  93. data/lib/azure/table/serialization.rb +107 -107
  94. data/lib/azure/table/table_service.rb +559 -559
  95. data/lib/azure/version.rb +31 -31
  96. data/lib/azure/virtual_machine_image_management/serialization.rb +66 -66
  97. data/lib/azure/virtual_machine_image_management/virtual_machine_disk.rb +25 -25
  98. data/lib/azure/virtual_machine_image_management/virtual_machine_image.rb +25 -25
  99. data/lib/azure/virtual_machine_image_management/virtual_machine_image_management_service.rb +94 -94
  100. data/lib/azure/virtual_machine_management/serialization.rb +462 -462
  101. data/lib/azure/virtual_machine_management/virtual_machine.rb +45 -45
  102. data/lib/azure/virtual_machine_management/virtual_machine_management_service.rb +588 -588
  103. data/lib/azure/virtual_network_management/serialization.rb +190 -190
  104. data/lib/azure/virtual_network_management/virtual_network.rb +37 -37
  105. data/lib/azure/virtual_network_management/virtual_network_management_service.rb +109 -109
  106. data/test/fixtures/affinity_group.xml +33 -33
  107. data/test/fixtures/all_containers.xml +20 -20
  108. data/test/fixtures/all_tables.xml +22 -22
  109. data/test/fixtures/certificate.pem +21 -21
  110. data/test/fixtures/container_acl.xml +11 -11
  111. data/test/fixtures/create_sql_database_server.xml +1 -1
  112. data/test/fixtures/create_storage_desc_error.xml +5 -5
  113. data/test/fixtures/create_storage_extendedprop_error.xml +8 -8
  114. data/test/fixtures/create_storage_extendedpropname_error.xml +6 -6
  115. data/test/fixtures/create_storage_full_error.xml +6 -6
  116. data/test/fixtures/create_storage_label_error.xml +5 -5
  117. data/test/fixtures/create_storage_location_error.xml +5 -5
  118. data/test/fixtures/create_storage_name_error.xml +6 -6
  119. data/test/fixtures/create_table_response_entry.xml +15 -15
  120. data/test/fixtures/delete_storage_container_error.xml +5 -5
  121. data/test/fixtures/delete_storage_error.xml +5 -5
  122. data/test/fixtures/deployment_error.xml +5 -5
  123. data/test/fixtures/get_storage_account_error.xml +5 -5
  124. data/test/fixtures/get_storage_account_properties.xml +31 -31
  125. data/test/fixtures/get_storage_account_properties_new.xml +31 -31
  126. data/test/fixtures/http_error.xml +5 -5
  127. data/test/fixtures/insert_entity_response_entry.xml +25 -25
  128. data/test/fixtures/list_affinity_groups.xml +22 -22
  129. data/test/fixtures/list_blobs.xml +120 -120
  130. data/test/fixtures/list_block_all_with_none_committed.xml +21 -21
  131. data/test/fixtures/list_blocks_all.xml +22 -22
  132. data/test/fixtures/list_blocks_committed.xml +12 -12
  133. data/test/fixtures/list_cloud_services.xml +38 -38
  134. data/test/fixtures/list_containers.xml +37 -37
  135. data/test/fixtures/list_firewall_management_endpoint.xml +27 -27
  136. data/test/fixtures/list_images.xml +110 -110
  137. data/test/fixtures/list_locations.xml +62 -62
  138. data/test/fixtures/list_page_ranges.xml +10 -10
  139. data/test/fixtures/list_sql_database.xml +36 -36
  140. data/test/fixtures/list_sql_server_firewall.xml +23 -23
  141. data/test/fixtures/list_storage_account_single.xml +24 -24
  142. data/test/fixtures/list_storage_accounts.xml +45 -45
  143. data/test/fixtures/list_virtual_networks.xml +92 -92
  144. data/test/fixtures/logging.xml +11 -11
  145. data/test/fixtures/management_certificate.pem +55 -55
  146. data/test/fixtures/messages.xml +12 -12
  147. data/test/fixtures/metrics.xml +10 -10
  148. data/test/fixtures/privatekey.key +28 -28
  149. data/test/fixtures/query_entities_empty_response.xml +7 -7
  150. data/test/fixtures/query_entities_response.xml +45 -45
  151. data/test/fixtures/queue_service_properties.xml +22 -22
  152. data/test/fixtures/queue_service_properties_original.xml +19 -19
  153. data/test/fixtures/queues.xml +16 -16
  154. data/test/fixtures/retention_policy.xml +5 -5
  155. data/test/fixtures/sb_default_create_queue_response.xml +23 -23
  156. data/test/fixtures/sb_default_create_relay_response.xml +15 -15
  157. data/test/fixtures/sb_default_create_topic_response.xml +18 -18
  158. data/test/fixtures/sb_get_access_token_response.txt +1 -1
  159. data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -9
  160. data/test/fixtures/storage_service_properties.xml +54 -54
  161. data/test/fixtures/update_storage_account.xml +16 -16
  162. data/test/fixtures/update_storage_error.xml +4 -4
  163. data/test/fixtures/updated_storage_accounts.xml +52 -52
  164. data/test/fixtures/virtual_machine.xml +113 -113
  165. data/test/fixtures/windows_virtual_machine.xml +106 -106
  166. data/test/integration/affinity_group/Affinity_test.rb +55 -55
  167. data/test/integration/affinity_group/Create_Affinity_test.rb +63 -63
  168. data/test/integration/affinity_group/Delete_Affinity_test.rb +56 -56
  169. data/test/integration/affinity_group/List_Affinity_test.rb +41 -41
  170. data/test/integration/affinity_group/Update_Affinity_test.rb +82 -82
  171. data/test/integration/blob/blob_gb18030_test.rb +199 -199
  172. data/test/integration/blob/blob_metadata_test.rb +75 -75
  173. data/test/integration/blob/blob_pages_test.rb +119 -119
  174. data/test/integration/blob/blob_properties_test.rb +77 -77
  175. data/test/integration/blob/block_blob_test.rb +254 -254
  176. data/test/integration/blob/container/container_acl_test.rb +69 -69
  177. data/test/integration/blob/container/container_metadata_test.rb +50 -50
  178. data/test/integration/blob/container/create_container_test.rb +60 -60
  179. data/test/integration/blob/container/delete_container_test.rb +39 -39
  180. data/test/integration/blob/container/get_container_properties_test.rb +48 -48
  181. data/test/integration/blob/container/list_containers_test.rb +79 -79
  182. data/test/integration/blob/container/root_container_test.rb +53 -53
  183. data/test/integration/blob/copy_blob_test.rb +113 -113
  184. data/test/integration/blob/create_blob_snapshot_test.rb +80 -80
  185. data/test/integration/blob/create_page_blob_test.rb +83 -83
  186. data/test/integration/blob/delete_blob_test.rb +159 -159
  187. data/test/integration/blob/get_blob_test.rb +65 -65
  188. data/test/integration/blob/informative_errors_test.rb +38 -38
  189. data/test/integration/blob/lease/acquire_lease_test.rb +36 -36
  190. data/test/integration/blob/lease/break_lease_test.rb +40 -40
  191. data/test/integration/blob/lease/release_lease_test.rb +40 -40
  192. data/test/integration/blob/lease/renew_lease_test.rb +42 -42
  193. data/test/integration/blob/list_blobs_test.rb +113 -113
  194. data/test/integration/cloud_service/Cloud_Create_test.rb +44 -44
  195. data/test/integration/cloud_service/Cloud_Delete_test.rb +44 -44
  196. data/test/integration/database/create_sql_server_firewall_test.rb +86 -86
  197. data/test/integration/database/create_sql_server_test.rb +53 -53
  198. data/test/integration/database/delete_sql_server_firewall_test.rb +70 -70
  199. data/test/integration/database/delete_sql_server_test.rb +58 -58
  200. data/test/integration/database/list_sql_server_firewall_test.rb +45 -45
  201. data/test/integration/database/list_sql_servers_test.rb +44 -44
  202. data/test/integration/database/reset_password_sql_server_test.rb +55 -55
  203. data/test/integration/location/Location_List_test.rb +39 -39
  204. data/test/integration/queue/clear_messages_test.rb +42 -42
  205. data/test/integration/queue/create_message_test.rb +75 -75
  206. data/test/integration/queue/create_queue_test.rb +50 -50
  207. data/test/integration/queue/delete_message_test.rb +67 -67
  208. data/test/integration/queue/delete_queue_test.rb +45 -45
  209. data/test/integration/queue/informative_errors_test.rb +41 -41
  210. data/test/integration/queue/list_messages_encoded_test.rb +79 -79
  211. data/test/integration/queue/list_messages_test.rb +79 -79
  212. data/test/integration/queue/list_queues_test.rb +44 -44
  213. data/test/integration/queue/peek_messages_test.rb +59 -59
  214. data/test/integration/queue/queue_gb18030_test.rb +131 -131
  215. data/test/integration/queue/queue_metadata_test.rb +40 -40
  216. data/test/integration/queue/update_message_test.rb +74 -74
  217. data/test/integration/service_bus/informative_errors_test.rb +36 -36
  218. data/test/integration/service_bus/queues_scenario_test.rb +200 -200
  219. data/test/integration/service_bus/queues_test.rb +265 -265
  220. data/test/integration/service_bus/relay_test.rb +131 -131
  221. data/test/integration/service_bus/rules_test.rb +144 -144
  222. data/test/integration/service_bus/sb_queue_gb18030_test.rb +182 -182
  223. data/test/integration/service_bus/scenario_test.rb +101 -101
  224. data/test/integration/service_bus/subscriptions_test.rb +211 -211
  225. data/test/integration/service_bus/topics_scenario_test.rb +406 -406
  226. data/test/integration/service_bus/topics_test.rb +129 -129
  227. data/test/integration/storage_management/storage_management_test.rb +160 -160
  228. data/test/integration/table/create_table_test.rb +35 -35
  229. data/test/integration/table/delete_entity_batch_test.rb +106 -106
  230. data/test/integration/table/delete_entity_test.rb +93 -93
  231. data/test/integration/table/delete_table_test.rb +39 -39
  232. data/test/integration/table/get_table_test.rb +36 -36
  233. data/test/integration/table/informative_errors_test.rb +38 -38
  234. data/test/integration/table/insert_entity_batch_test.rb +99 -99
  235. data/test/integration/table/insert_entity_test.rb +87 -87
  236. data/test/integration/table/insert_or_merge_entity_batch_test.rb +158 -158
  237. data/test/integration/table/insert_or_merge_entity_test.rb +142 -142
  238. data/test/integration/table/insert_or_replace_entity_batch_test.rb +151 -151
  239. data/test/integration/table/insert_or_replace_entity_test.rb +136 -136
  240. data/test/integration/table/merge_entity_batch_test.rb +127 -127
  241. data/test/integration/table/merge_entity_test.rb +112 -112
  242. data/test/integration/table/query_entities_test.rb +194 -194
  243. data/test/integration/table/query_tables_test.rb +42 -42
  244. data/test/integration/table/query_test.rb +250 -250
  245. data/test/integration/table/table_acl_test.rb +51 -51
  246. data/test/integration/table/table_gb18030_test.rb +355 -355
  247. data/test/integration/table/update_entity_batch_test.rb +148 -148
  248. data/test/integration/table/update_entity_test.rb +130 -130
  249. data/test/integration/test_helper.rb +42 -42
  250. data/test/integration/vm/VM_Create_test.rb +260 -260
  251. data/test/integration/vm/VM_Delete_test.rb +55 -55
  252. data/test/integration/vm/VM_Operations_test.rb +173 -173
  253. data/test/integration/vm_image/virtual_machine_disk_test.rb +37 -37
  254. data/test/integration/vm_image/virtual_machine_image_test.rb +36 -36
  255. data/test/integration/vnet/Virtual_Network_Create_test.rb +122 -122
  256. data/test/integration/vnet/Virtual_Network_list_test.rb +53 -53
  257. data/test/support/env.rb +19 -19
  258. data/test/support/fixtures.rb +36 -36
  259. data/test/support/name_generator.rb +168 -168
  260. data/test/support/stubs.rb +42 -42
  261. data/test/support/virtual_machine_name_generator.rb +102 -102
  262. data/test/support/virtual_network_helper.rb +73 -73
  263. data/test/test_helper.rb +53 -53
  264. data/test/unit/affinity_group/affinity_group_test.rb +192 -192
  265. data/test/unit/affinity_group/serialization_test.rb +88 -88
  266. data/test/unit/base_management/location_test.rb +57 -57
  267. data/test/unit/blob/blob_service_test.rb +1946 -1946
  268. data/test/unit/cloud_service_management/cloud_service_management_service_test.rb +94 -94
  269. data/test/unit/cloud_service_management/serialization_test.rb +169 -169
  270. data/test/unit/core/auth/shared_key_lite_test.rb +51 -51
  271. data/test/unit/core/auth/shared_key_test.rb +58 -58
  272. data/test/unit/core/auth/signer_test.rb +30 -30
  273. data/test/unit/core/http/http_error_test.rb +57 -57
  274. data/test/unit/core/http/http_request_test.rb +66 -66
  275. data/test/unit/core/http/http_response_test.rb +45 -45
  276. data/test/unit/core/http/retry_policy_test.rb +23 -23
  277. data/test/unit/database/serialization_test.rb +97 -97
  278. data/test/unit/database/sql_database_server_service_test.rb +288 -288
  279. data/test/unit/service/serialization_test.rb +532 -532
  280. data/test/unit/service/storage_service_test.rb +292 -292
  281. data/test/unit/storage_management/serialization_test.rb +232 -232
  282. data/test/unit/storage_management/storage_management_service_test.rb +261 -261
  283. data/test/unit/table/edmtype_test.rb +107 -107
  284. data/test/unit/virtual_machine_image_management/serialization_test.rb +35 -35
  285. data/test/unit/virtual_machine_image_management/virtual_machine_image_management_service_test.rb +65 -65
  286. data/test/unit/virtual_machine_management/serialization_test.rb +258 -258
  287. data/test/unit/virtual_machine_management/virtual_machine_management_service_test.rb +440 -440
  288. data/test/unit/vnet/serialization_test.rb +187 -187
  289. data/test/unit/vnet/virtual_network_management_service_test.rb +131 -131
  290. metadata +34 -27
@@ -1,30 +1,30 @@
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
- module Azure
16
- module Queue
17
- class Message
18
- def initialize
19
- yield self if block_given?
20
- end
21
- attr_accessor :id
22
- attr_accessor :insertion_time
23
- attr_accessor :expiration_time
24
- attr_accessor :dequeue_count
25
- attr_accessor :message_text
26
- attr_accessor :time_next_visible
27
- attr_accessor :pop_receipt
28
- end
29
- 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
+ module Azure
16
+ module Queue
17
+ class Message
18
+ def initialize
19
+ yield self if block_given?
20
+ end
21
+ attr_accessor :id
22
+ attr_accessor :insertion_time
23
+ attr_accessor :expiration_time
24
+ attr_accessor :dequeue_count
25
+ attr_accessor :message_text
26
+ attr_accessor :time_next_visible
27
+ attr_accessor :pop_receipt
28
+ end
29
+ end
30
30
  end
@@ -1,29 +1,29 @@
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
- module Azure
16
- module Queue
17
- class Queue
18
-
19
- def initialize
20
- @metadata = {}
21
- yield self if block_given?
22
- end
23
-
24
- attr_accessor :name
25
- attr_accessor :url
26
- attr_accessor :metadata
27
- end
28
- 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
+ module Azure
16
+ module Queue
17
+ class Queue
18
+
19
+ def initialize
20
+ @metadata = {}
21
+ yield self if block_given?
22
+ end
23
+
24
+ attr_accessor :name
25
+ attr_accessor :url
26
+ attr_accessor :metadata
27
+ end
28
+ end
29
29
  end
@@ -1,568 +1,568 @@
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/service/storage_service'
16
- require 'azure/queue/serialization'
17
-
18
- module Azure
19
- module Queue
20
- class QueueService < Service::StorageService
21
-
22
- def initialize
23
- super()
24
- @host = Azure.config.storage_queue_host
25
- end
26
-
27
- # Public: Get a list of Queues from the server
28
- #
29
- # ==== Attributes
30
- #
31
- # * +options+ - Hash. Optional parameters.
32
- #
33
- # ==== Options
34
- #
35
- # Accepted key/value pairs in options parameter are:
36
- # * +:prefix+ - String. Filters the results to return only containers
37
- # whose name begins with the specified prefix. (optional)
38
- # * +:marker+ - String. An identifier the specifies the portion of the
39
- # list to be returned. This value comes from the property
40
- # Azure::Service::EnumerationResults.continuation_token when there
41
- # are more containers available than were returned. The
42
- # marker value may then be used here to request the next set
43
- # of list items. (optional)
44
- # * +:max_results+ - Integer. Specifies the maximum number of containers to return.
45
- # If max_results is not specified, or is a value greater than
46
- # 5,000, the server will return up to 5,000 items. If it is set
47
- # to a value less than or equal to zero, the server will return
48
- # status code 400 (Bad Request). (optional)
49
- # * +:metadata+ - Boolean. Specifies whether or not to return the container metadata.
50
- # (optional, Default=false)
51
- # * +:timeout+ - Integer. A timeout in seconds.
52
- #
53
- # NOTE: Metadata requested with the :metadata parameter must have been stored in
54
- # accordance with the naming restrictions imposed by the 2009-09-19 version of the queue
55
- # service. Beginning with that version, all metadata names must adhere to the naming
56
- # conventions for C# identifiers.
57
- #
58
- # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179466
59
- #
60
- # Any metadata with invalid names which were previously stored, will be returned with the
61
- # key "x-ms-invalid-name" in the metadata hash. This may contain multiple values and be an
62
- # Array (vs a String if it only contains a single value).
63
- #
64
- # Returns an Azure::Service::EnumerationResults
65
- def list_queues(options={})
66
- query = { }
67
- query["prefix"] = options[:prefix] if options[:prefix]
68
- query["marker"] = options[:marker] if options[:marker]
69
- query["maxresults"] = options[:max_results].to_s if options[:max_results]
70
- query["include"] = "metadata" if options[:metadata] == true
71
- query["timeout"] = options[:timeout].to_s if options[:timeout]
72
-
73
- uri = collection_uri(query)
74
- response = call(:get, uri)
75
-
76
- Serialization.queue_enumeration_results_from_xml(response.body)
77
- end
78
-
79
- # Public: Clears all messages from the queue.
80
- #
81
- # If a queue contains a large number of messages, Clear Messages may time out
82
- # before all messages have been deleted. In this case the Queue service will
83
- # return status code 500 (Internal Server Error), with the additional error
84
- # code OperationTimedOut. If the operation times out, the client should
85
- # continue to retry Clear Messages until it succeeds, to ensure that all
86
- # messages have been deleted.
87
- #
88
- # ==== Attributes
89
- #
90
- # * +queue_name+ - String. The name of the queue.
91
- # * +options+ - Hash. Optional parameters.
92
- #
93
- # ==== Options
94
- #
95
- # Accepted key/value pairs in options parameter are:
96
- # * +:timeout+ - Integer. A timeout in seconds.
97
- #
98
- # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179454
99
- #
100
- # Returns nil on success
101
- def clear_messages(queue_name, options={})
102
- query = { }
103
- query["timeout"] = options[:timeout].to_s if options[:timeout]
104
- uri = messages_uri(queue_name, query)
105
- call(:delete, uri)
106
- nil
107
- end
108
-
109
- # Public: Creates a new queue under the storage account.
110
- #
111
- # ==== Attributes
112
- #
113
- # * +queue_name+ - String. The queue name.
114
- # * +options+ - Hash. Optional parameters.
115
- #
116
- # ==== Options
117
- #
118
- # Accepted key/value pairs in options parameter are:
119
- # * +:metadata+ - Hash. A hash of user defined metadata.
120
- # * +:timeout+ - Integer. A timeout in seconds.
121
- #
122
- # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179342
123
- #
124
- # Returns nil on success
125
- def create_queue(queue_name, options={})
126
- query = { }
127
- query["timeout"] = options[:timeout].to_s if options[:timeout]
128
-
129
- uri = queue_uri(queue_name, query)
130
-
131
- headers = { }
132
- add_metadata_to_headers(options[:metadata] || {}, headers) if options[:metadata]
133
-
134
- call(:put, uri, nil, headers)
135
- nil
136
- end
137
-
138
- # Public: Deletes a queue.
139
- #
140
- # ==== Attributes
141
- #
142
- # * +queue_name+ - String. The queue name.
143
- # * +options+ - Hash. Optional parameters.
144
- #
145
- # ==== Options
146
- #
147
- # Accepted key/value pairs in options parameter are:
148
- # * +:timeout+ - Integer. A timeout in seconds.
149
- #
150
- # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179436
151
- #
152
- # Returns nil on success
153
- def delete_queue(queue_name, options={})
154
- query = { }
155
- query["timeout"] = options[:timeout].to_s if options[:timeout]
156
-
157
- uri = queue_uri(queue_name, query)
158
-
159
- call(:delete, uri)
160
- nil
161
- end
162
-
163
- # Public: Returns queue properties, including user-defined metadata.
164
- #
165
- # ==== Attributes
166
- #
167
- # * +queue_name+ - String. The queue name.
168
- # * +options+ - Hash. Optional parameters.
169
- #
170
- # ==== Options
171
- #
172
- # Accepted key/value pairs in options parameter are:
173
- # * +:timeout+ - Integer. A timeout in seconds.
174
- #
175
- # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179384
176
- #
177
- # Returns a tuple of (approximate_message_count, metadata)
178
- # * approximate_messages_count - Integer. The approximate number of messages in the queue. This number is not
179
- # lower than the actual number of messages in the queue, but could be higher.
180
- # * metadata - Hash. The queue metadata (Default: {})
181
- #
182
- def get_queue_metadata(queue_name, options={})
183
- query = { "comp" => "metadata" }
184
- query["timeout"] = options[:timeout].to_s if options[:timeout]
185
-
186
- uri = queue_uri(queue_name, query)
187
-
188
- response = call(:get, uri)
189
-
190
- approximate_messages_count = response.headers["x-ms-approximate-messages-count"]
191
- metadata = Serialization.metadata_from_headers(response.headers)
192
-
193
- return approximate_messages_count.to_i, metadata
194
- end
195
-
196
- # Public: Sets user-defined metadata on the queue. To delete queue metadata, call
197
- # this API with an empty hash in the metadata parameter.
198
- #
199
- # ==== Attributes
200
- #
201
- # * +queue_name+ - String. The queue name.
202
- # * +metadata+ - Hash. A hash of user defined metadata
203
- # * +options+ - Hash. Optional parameters.
204
- #
205
- # ==== Options
206
- #
207
- # Accepted key/value pairs in options parameter are:
208
- # * +:timeout+ - Integer. A timeout in seconds.
209
- #
210
- # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179348
211
- #
212
- # Returns nil on success
213
- def set_queue_metadata(queue_name, metadata, options={})
214
- query = { "comp" => "metadata" }
215
- query["timeout"] = options[:timeout].to_s if options[:timeout]
216
-
217
- uri = queue_uri(queue_name, query)
218
-
219
- headers ={}
220
- add_metadata_to_headers(metadata || {}, headers)
221
-
222
- call(:put, uri, nil, headers)
223
- nil
224
- end
225
-
226
- # Public: Gets the access control list (ACL) for the queue.
227
- #
228
- # ==== Attributes
229
- #
230
- # * +queue_name+ - String. The queue name.
231
- # * +options+ - Hash. Optional parameters.
232
- #
233
- # ==== Options
234
- #
235
- # Accepted key/value pairs in options parameter are:
236
- # * +:timeout+ - Integer. A timeout in seconds.
237
- #
238
- # See http://msdn.microsoft.com/en-us/library/windowsazure/jj159101
239
- #
240
- # Returns a list of Azure::Entity::SignedIdentifier instances
241
- def get_queue_acl(queue_name, options={})
242
- query = { "comp" => "acl" }
243
- query["timeout"] = options[:timeout].to_s if options[:timeout]
244
-
245
- response = call(:get, queue_uri(queue_name, query))
246
-
247
- signed_identifiers = []
248
- signed_identifiers = Serialization.signed_identifiers_from_xml(response.body) unless response.body == nil or response.body.length < 1
249
- signed_identifiers
250
- end
251
-
252
- # Public: Sets the access control list (ACL) for the queue.
253
- #
254
- # ==== Attributes
255
- #
256
- # * +queue_name+ - String. The queue name.
257
- # * +options+ - Hash. Optional parameters.
258
- #
259
- # ==== Options
260
- #
261
- # Accepted key/value pairs in options parameter are:
262
- # * +:signed_identifiers+ - Array. A list of Azure::Entity::SignedIdentifier instances
263
- # * +:timeout+ - Integer. A timeout in seconds.
264
- #
265
- # See http://msdn.microsoft.com/en-us/library/windowsazure/jj159099
266
- #
267
- # Returns nil on success
268
- def set_queue_acl(queue_name, options={})
269
- query = { "comp" => "acl" }
270
- query["timeout"] = options[:timeout].to_s if options[:timeout]
271
-
272
- uri =queue_uri(queue_name, query)
273
- body = nil
274
- body = Serialization.signed_identifiers_to_xml(options[:signed_identifiers]) if options[:signed_identifiers] && options[:signed_identifiers].length > 0
275
-
276
- call(:put, uri, body, {})
277
- nil
278
- end
279
-
280
- # Public: Adds a message to the queue and optionally sets a visibility timeout for the message.
281
- #
282
- # ==== Attributes
283
- #
284
- # * +queue_name+ - String. The queue name.
285
- # * +message_text+ - String. The message contents. Note that the message content must be in a format that may be encoded with UTF-8.
286
- # * +options+ - Hash. Optional parameters.
287
- #
288
- # ==== Options
289
- #
290
- # Accepted key/value pairs in options parameter are:
291
- # * +:visibility_timeout+ - Integer. Specifies the new visibility timeout value, in seconds, relative to server
292
- # time. The new value must be larger than or equal to 0, and cannot be larger than 7
293
- # days. The visibility timeout of a message cannot be set to a value later than the
294
- # expiry time. :visibility_timeout should be set to a value smaller than the
295
- # time-to-live value. If not specified, the default value is 0.
296
- # * +:message_ttl+ - Integer. Specifies the time-to-live interval for the message, in seconds. The maximum
297
- # time-to-live allowed is 7 days. If not specified, the default time-to-live is 7 days.
298
- # * +:encode+ - Boolean. If set to true, the message will be base64 encoded.
299
- # * +:timeout+ - Integer. A timeout in seconds.
300
- #
301
- # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179346
302
- #
303
- # Returns nil on success
304
- def create_message(queue_name, message_text, options={})
305
- query = { }
306
-
307
- unless options.empty?
308
- query["visibilitytimeout"] = options[:visibility_timeout] if options[:visibility_timeout]
309
- query["messagettl"] = options[:message_ttl] if options[:message_ttl]
310
- query["timeout"] = options[:timeout].to_s if options[:timeout]
311
- end
312
-
313
- uri = messages_uri(queue_name, query)
314
- body = Serialization.message_to_xml(message_text, options[:encode])
315
-
316
- call(:post, uri, body, {})
317
- nil
318
- end
319
-
320
- # Public: Deletes a specified message from the queue.
321
- #
322
- # ==== Attributes
323
- #
324
- # * +queue_name+ - String. The queue name.
325
- # * +message_id+ - String. The id of the message.
326
- # * +pop_receipt+ - String. The valid pop receipt value returned from an earlier call to the Get Messages or
327
- # Update Message operation.
328
- # * +options+ - Hash. Optional parameters.
329
- #
330
- # ==== Options
331
- #
332
- # Accepted key/value pairs in options parameter are:
333
- # * +:timeout+ - Integer. A timeout in seconds.
334
- #
335
- # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179347
336
- #
337
- # Returns nil on success
338
- #
339
- # Remarks:
340
- #
341
- # When a message is successfully deleted, it is immediately marked for deletion and is no longer accessible to
342
- # clients. The message is later removed from the queue during garbage collection.
343
- #
344
- # After a client retrieves a message with the Get Messages operation, the client is expected to process and
345
- # delete the message. To delete the message, you must have two items of data returned in the response body of
346
- # the Get Messages operation:
347
- #
348
- # * The message ID, an opaque GUID value that identifies the message in the queue.
349
- #
350
- # * A valid pop receipt, an opaque value that indicates that the message has been retrieved.
351
- #
352
- # The message ID is returned from the previous Get Messages operation. The pop receipt is returned from the most
353
- # recent Get Messages or Update Message operation. In order for the Delete Message operation to succeed, the pop
354
- # receipt specified on the request must match the pop receipt returned from the Get Messages or Update Message
355
- # operation.
356
- #
357
- # Pop receipts remain valid until one of the following events occurs:
358
- #
359
- # * The message has expired.
360
- #
361
- # * The message has been deleted using the last pop receipt received either from Get Messages or Update Message.
362
- #
363
- # * The invisibility time has elapsed and the message has been dequeued by a Get Messages request. When the
364
- # invisibility time elapses, the message becomes visible again. If it is retrieved by another Get Messages
365
- # request, the returned pop receipt can be used to delete or update the message.
366
- #
367
- # * The message has been updated with a new visibility timeout. When the message is updated, a new pop receipt
368
- # will be returned.
369
- #
370
- # If the message has already been deleted when Delete Message is called, the Queue service returns status code
371
- # 404 (Not Found).
372
- #
373
- # If a message with a matching pop receipt is not found, the service returns status code 400 (Bad Request), with
374
- # additional error information indicating that the cause of the failure was a mismatched pop receipt.
375
- #
376
- def delete_message(queue_name, message_id, pop_receipt, options={})
377
- query = { "popreceipt" => pop_receipt }
378
- query["timeout"] = options[:timeout].to_s if options[:timeout]
379
-
380
- uri = message_uri(queue_name, message_id, query)
381
-
382
- call(:delete, uri)
383
- nil
384
- end
385
-
386
- # Public: Retrieves one or more messages from the front of the queue, without changing the message visibility.
387
- #
388
- # ==== Attributes
389
- #
390
- # * +queue_name+ - String. The queue name.
391
- # * +options+ - Hash. Optional parameters.
392
- #
393
- # ==== Options
394
- #
395
- # Accepted key/value pairs in options parameter are:
396
- # * +:number_of_messages+ - Integer. How many messages to return. (optional, Default: 1)
397
- # * +:decode+ - Boolean. Boolean value indicating if the message should be base64 decoded.
398
- # * +:timeout+ - Integer. A timeout in seconds.
399
- #
400
- # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179472
401
- #
402
- # Returns a list of Azure::Entity::Queue::Message instances
403
- def peek_messages(queue_name, options={})
404
- number_of_messages=1
405
- number_of_messages = options[:number_of_messages] if options[:number_of_messages]
406
-
407
- query = { "peekonly" => "true", "numofmessages"=> number_of_messages.to_s }
408
- query["timeout"] = options[:timeout].to_s if options[:timeout]
409
-
410
- uri = messages_uri(queue_name, query)
411
- response = call(:get, uri)
412
-
413
- messages = Serialization.queue_messages_from_xml(response.body, options[:decode])
414
- messages
415
- end
416
-
417
- # Public: Retrieves one or more messages from the front of the queue.
418
- #
419
- # ==== Attributes
420
- #
421
- # * +queue_name+ - String. The queue name.
422
- # * +visibility_timeout+ - Integer. The new visibility timeout value, in seconds, relative to server time.
423
- # * +options+ - Hash. Optional parameters.
424
- #
425
- # ==== Options
426
- #
427
- # Accepted key/value pairs in options parameter are:
428
- # * +:number_of_messages+ - Integer. How many messages to return. (optional, Default: 1)
429
- # * +:timeout+ - Integer. A timeout in seconds.
430
- # * +:decode+ - Boolean. Boolean value indicating if the message should be base64 decoded.
431
- #
432
- # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179474
433
- #
434
- # Returns a list of Azure::Entity::Queue::Message instances
435
- def list_messages(queue_name, visibility_timeout, options={})
436
- number_of_messages=1
437
- number_of_messages = options[:number_of_messages] if options[:number_of_messages]
438
-
439
- query = { "visibilitytimeout" => visibility_timeout.to_s, "numofmessages"=> number_of_messages.to_s }
440
- query["timeout"] = options[:timeout].to_s if options[:timeout]
441
-
442
- uri = messages_uri(queue_name, query)
443
- response = call(:get, uri)
444
-
445
- messages = Serialization.queue_messages_from_xml(response.body, options[:decode])
446
- messages
447
- end
448
-
449
- # Public: Adds a message to the queue and optionally sets a visibility timeout for the message.
450
- #
451
- # ==== Attributes
452
- #
453
- # * +queue_name+ - String. The queue name.
454
- # * +message_id+ - String. The id of the message.
455
- # * +pop_receipt+ - String. The valid pop receipt value returned from an earlier call to the Get Messages or
456
- # update Message operation.
457
- # * +message_text+ - String. The message contents. Note that the message content must be in a format that may
458
- # be encoded with UTF-8.
459
- # * +visibility_timeout+ - Integer. The new visibility timeout value, in seconds, relative to server time.
460
- # * +options+ - Hash. Optional parameters.
461
- #
462
- # ==== Options
463
- #
464
- # Accepted key/value pairs in options parameter are:
465
- # * +:encode+ - Boolean. If set to true, the message will be base64 encoded.
466
- # * +:timeout+ - Integer. A timeout in seconds.
467
- #
468
- # See http://msdn.microsoft.com/en-us/library/windowsazure/hh452234
469
- #
470
- # Returns a tuple of (pop_receipt, time_next_visible)
471
- # * pop_receipt - String. The pop receipt of the queue message.
472
- # * time_next_visible - String. A UTC date/time value that represents when the message will be visible on the queue.
473
- #
474
- # Remarks:
475
- #
476
- # An Update Message operation will fail if the specified message does not exist in the queue, or if the
477
- # specified pop receipt does not match the message.
478
- #
479
- # A pop receipt is returned by the Get Messages operation or the Update Message operation. Pop receipts
480
- # remain valid until one of the following events occurs:
481
- #
482
- # * The message has expired.
483
- #
484
- # * The message has been deleted using the last pop receipt received either from Get Messages or
485
- # Update Message.
486
- #
487
- # * The invisibility time has elapsed and the message has been dequeued by a Get Messages request. When
488
- # the invisibility time elapses, the message becomes visible again. If it is retrieved by another
489
- # Get Messages request, the returned pop receipt can be used to delete or update the message.
490
- #
491
- # * The message has been updated with a new visibility timeout. When the message is updated, a new pop
492
- # receipt will be returned.
493
- #
494
- # The Update Message operation can be used to continually extend the invisibility of a queue message. This
495
- # functionality can be useful if you want a worker role to "lease" a queue message. For example, if a worker
496
- # role calls Get Messages and recognizes that it needs more time to process a message, it can continually
497
- # extend the message's invisibility until it is processed. If the worker role were to fail during processing,
498
- # eventually the message would become visible again and another worker role could process it.
499
- #
500
- def update_message(queue_name, message_id, pop_receipt, message_text, visibility_timeout, options={})
501
- query = { "visibilitytimeout" => visibility_timeout.to_s, "popreceipt" => pop_receipt }
502
- query["timeout"] = options[:timeout].to_s if options[:timeout]
503
-
504
- uri = message_uri(queue_name, message_id, query)
505
- body = Serialization.message_to_xml(message_text, options[:encode])
506
-
507
- response = call(:put, uri, body, {})
508
- new_pop_receipt = response.headers["x-ms-popreceipt"]
509
- time_next_visible = response.headers["x-ms-time-next-visible"]
510
- return new_pop_receipt, time_next_visible
511
- end
512
-
513
- # Protected: Generate the URI for the collection of queues.
514
- #
515
- # ==== Attributes
516
- #
517
- # * +query+ - A Hash of query parameters (default: {}).
518
- #
519
- # Returns a URI.
520
- protected
521
- def collection_uri(query={})
522
- query.update({:comp => 'list', :include => 'metadata'})
523
- generate_uri("", query)
524
- end
525
-
526
- # Protected: Generate the URI for a given queue.
527
- #
528
- # ==== Attributes
529
- #
530
- # * +queue_name+ - The name of the queue.
531
- # * +query+ - A Hash of query parameters (default: {}).
532
- #
533
- # Returns a URI.
534
- protected
535
- def queue_uri(queue_name, query={})
536
- return queue_name if queue_name.kind_of? ::URI
537
- generate_uri(queue_name, query)
538
- end
539
-
540
- # Protected: Generate the messages URI for the given queue.
541
- #
542
- # ==== Attributes
543
- #
544
- # * +queue_name+ - The name of the queue.
545
- # * +query+ - A Hash of query parameters (default: {}).
546
- #
547
- # Returns a URI.
548
- protected
549
- def messages_uri(queue_name, query={})
550
- generate_uri("#{queue_name}/messages", query)
551
- end
552
-
553
- # Protected: Generate the URI for a given message
554
- #
555
- # ==== Attributes
556
- #
557
- # * +queue_name+ - The name of the queue.
558
- # * +message_id+ - The id of the message.
559
- # * +query+ - A Hash of query parameters (default: {}).
560
- #
561
- # Returns a URI.
562
- protected
563
- def message_uri(queue_name, message_id, query={})
564
- generate_uri("#{queue_name}/messages/#{message_id}", query)
565
- end
566
- end
567
- 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/service/storage_service'
16
+ require 'azure/queue/serialization'
17
+
18
+ module Azure
19
+ module Queue
20
+ class QueueService < Service::StorageService
21
+
22
+ def initialize
23
+ super()
24
+ @host = Azure.config.storage_queue_host
25
+ end
26
+
27
+ # Public: Get a list of Queues from the server
28
+ #
29
+ # ==== Attributes
30
+ #
31
+ # * +options+ - Hash. Optional parameters.
32
+ #
33
+ # ==== Options
34
+ #
35
+ # Accepted key/value pairs in options parameter are:
36
+ # * +:prefix+ - String. Filters the results to return only containers
37
+ # whose name begins with the specified prefix. (optional)
38
+ # * +:marker+ - String. An identifier the specifies the portion of the
39
+ # list to be returned. This value comes from the property
40
+ # Azure::Service::EnumerationResults.continuation_token when there
41
+ # are more containers available than were returned. The
42
+ # marker value may then be used here to request the next set
43
+ # of list items. (optional)
44
+ # * +:max_results+ - Integer. Specifies the maximum number of containers to return.
45
+ # If max_results is not specified, or is a value greater than
46
+ # 5,000, the server will return up to 5,000 items. If it is set
47
+ # to a value less than or equal to zero, the server will return
48
+ # status code 400 (Bad Request). (optional)
49
+ # * +:metadata+ - Boolean. Specifies whether or not to return the container metadata.
50
+ # (optional, Default=false)
51
+ # * +:timeout+ - Integer. A timeout in seconds.
52
+ #
53
+ # NOTE: Metadata requested with the :metadata parameter must have been stored in
54
+ # accordance with the naming restrictions imposed by the 2009-09-19 version of the queue
55
+ # service. Beginning with that version, all metadata names must adhere to the naming
56
+ # conventions for C# identifiers.
57
+ #
58
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179466
59
+ #
60
+ # Any metadata with invalid names which were previously stored, will be returned with the
61
+ # key "x-ms-invalid-name" in the metadata hash. This may contain multiple values and be an
62
+ # Array (vs a String if it only contains a single value).
63
+ #
64
+ # Returns an Azure::Service::EnumerationResults
65
+ def list_queues(options={})
66
+ query = { }
67
+ query["prefix"] = options[:prefix] if options[:prefix]
68
+ query["marker"] = options[:marker] if options[:marker]
69
+ query["maxresults"] = options[:max_results].to_s if options[:max_results]
70
+ query["include"] = "metadata" if options[:metadata] == true
71
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
72
+
73
+ uri = collection_uri(query)
74
+ response = call(:get, uri)
75
+
76
+ Serialization.queue_enumeration_results_from_xml(response.body)
77
+ end
78
+
79
+ # Public: Clears all messages from the queue.
80
+ #
81
+ # If a queue contains a large number of messages, Clear Messages may time out
82
+ # before all messages have been deleted. In this case the Queue service will
83
+ # return status code 500 (Internal Server Error), with the additional error
84
+ # code OperationTimedOut. If the operation times out, the client should
85
+ # continue to retry Clear Messages until it succeeds, to ensure that all
86
+ # messages have been deleted.
87
+ #
88
+ # ==== Attributes
89
+ #
90
+ # * +queue_name+ - String. The name of the queue.
91
+ # * +options+ - Hash. Optional parameters.
92
+ #
93
+ # ==== Options
94
+ #
95
+ # Accepted key/value pairs in options parameter are:
96
+ # * +:timeout+ - Integer. A timeout in seconds.
97
+ #
98
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179454
99
+ #
100
+ # Returns nil on success
101
+ def clear_messages(queue_name, options={})
102
+ query = { }
103
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
104
+ uri = messages_uri(queue_name, query)
105
+ call(:delete, uri)
106
+ nil
107
+ end
108
+
109
+ # Public: Creates a new queue under the storage account.
110
+ #
111
+ # ==== Attributes
112
+ #
113
+ # * +queue_name+ - String. The queue name.
114
+ # * +options+ - Hash. Optional parameters.
115
+ #
116
+ # ==== Options
117
+ #
118
+ # Accepted key/value pairs in options parameter are:
119
+ # * +:metadata+ - Hash. A hash of user defined metadata.
120
+ # * +:timeout+ - Integer. A timeout in seconds.
121
+ #
122
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179342
123
+ #
124
+ # Returns nil on success
125
+ def create_queue(queue_name, options={})
126
+ query = { }
127
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
128
+
129
+ uri = queue_uri(queue_name, query)
130
+
131
+ headers = { }
132
+ add_metadata_to_headers(options[:metadata] || {}, headers) if options[:metadata]
133
+
134
+ call(:put, uri, nil, headers)
135
+ nil
136
+ end
137
+
138
+ # Public: Deletes a queue.
139
+ #
140
+ # ==== Attributes
141
+ #
142
+ # * +queue_name+ - String. The queue name.
143
+ # * +options+ - Hash. Optional parameters.
144
+ #
145
+ # ==== Options
146
+ #
147
+ # Accepted key/value pairs in options parameter are:
148
+ # * +:timeout+ - Integer. A timeout in seconds.
149
+ #
150
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179436
151
+ #
152
+ # Returns nil on success
153
+ def delete_queue(queue_name, options={})
154
+ query = { }
155
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
156
+
157
+ uri = queue_uri(queue_name, query)
158
+
159
+ call(:delete, uri)
160
+ nil
161
+ end
162
+
163
+ # Public: Returns queue properties, including user-defined metadata.
164
+ #
165
+ # ==== Attributes
166
+ #
167
+ # * +queue_name+ - String. The queue name.
168
+ # * +options+ - Hash. Optional parameters.
169
+ #
170
+ # ==== Options
171
+ #
172
+ # Accepted key/value pairs in options parameter are:
173
+ # * +:timeout+ - Integer. A timeout in seconds.
174
+ #
175
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179384
176
+ #
177
+ # Returns a tuple of (approximate_message_count, metadata)
178
+ # * approximate_messages_count - Integer. The approximate number of messages in the queue. This number is not
179
+ # lower than the actual number of messages in the queue, but could be higher.
180
+ # * metadata - Hash. The queue metadata (Default: {})
181
+ #
182
+ def get_queue_metadata(queue_name, options={})
183
+ query = { "comp" => "metadata" }
184
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
185
+
186
+ uri = queue_uri(queue_name, query)
187
+
188
+ response = call(:get, uri)
189
+
190
+ approximate_messages_count = response.headers["x-ms-approximate-messages-count"]
191
+ metadata = Serialization.metadata_from_headers(response.headers)
192
+
193
+ return approximate_messages_count.to_i, metadata
194
+ end
195
+
196
+ # Public: Sets user-defined metadata on the queue. To delete queue metadata, call
197
+ # this API with an empty hash in the metadata parameter.
198
+ #
199
+ # ==== Attributes
200
+ #
201
+ # * +queue_name+ - String. The queue name.
202
+ # * +metadata+ - Hash. A hash of user defined metadata
203
+ # * +options+ - Hash. Optional parameters.
204
+ #
205
+ # ==== Options
206
+ #
207
+ # Accepted key/value pairs in options parameter are:
208
+ # * +:timeout+ - Integer. A timeout in seconds.
209
+ #
210
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179348
211
+ #
212
+ # Returns nil on success
213
+ def set_queue_metadata(queue_name, metadata, options={})
214
+ query = { "comp" => "metadata" }
215
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
216
+
217
+ uri = queue_uri(queue_name, query)
218
+
219
+ headers ={}
220
+ add_metadata_to_headers(metadata || {}, headers)
221
+
222
+ call(:put, uri, nil, headers)
223
+ nil
224
+ end
225
+
226
+ # Public: Gets the access control list (ACL) for the queue.
227
+ #
228
+ # ==== Attributes
229
+ #
230
+ # * +queue_name+ - String. The queue name.
231
+ # * +options+ - Hash. Optional parameters.
232
+ #
233
+ # ==== Options
234
+ #
235
+ # Accepted key/value pairs in options parameter are:
236
+ # * +:timeout+ - Integer. A timeout in seconds.
237
+ #
238
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/jj159101
239
+ #
240
+ # Returns a list of Azure::Entity::SignedIdentifier instances
241
+ def get_queue_acl(queue_name, options={})
242
+ query = { "comp" => "acl" }
243
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
244
+
245
+ response = call(:get, queue_uri(queue_name, query))
246
+
247
+ signed_identifiers = []
248
+ signed_identifiers = Serialization.signed_identifiers_from_xml(response.body) unless response.body == nil or response.body.length < 1
249
+ signed_identifiers
250
+ end
251
+
252
+ # Public: Sets the access control list (ACL) for the queue.
253
+ #
254
+ # ==== Attributes
255
+ #
256
+ # * +queue_name+ - String. The queue name.
257
+ # * +options+ - Hash. Optional parameters.
258
+ #
259
+ # ==== Options
260
+ #
261
+ # Accepted key/value pairs in options parameter are:
262
+ # * +:signed_identifiers+ - Array. A list of Azure::Entity::SignedIdentifier instances
263
+ # * +:timeout+ - Integer. A timeout in seconds.
264
+ #
265
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/jj159099
266
+ #
267
+ # Returns nil on success
268
+ def set_queue_acl(queue_name, options={})
269
+ query = { "comp" => "acl" }
270
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
271
+
272
+ uri =queue_uri(queue_name, query)
273
+ body = nil
274
+ body = Serialization.signed_identifiers_to_xml(options[:signed_identifiers]) if options[:signed_identifiers] && options[:signed_identifiers].length > 0
275
+
276
+ call(:put, uri, body, {})
277
+ nil
278
+ end
279
+
280
+ # Public: Adds a message to the queue and optionally sets a visibility timeout for the message.
281
+ #
282
+ # ==== Attributes
283
+ #
284
+ # * +queue_name+ - String. The queue name.
285
+ # * +message_text+ - String. The message contents. Note that the message content must be in a format that may be encoded with UTF-8.
286
+ # * +options+ - Hash. Optional parameters.
287
+ #
288
+ # ==== Options
289
+ #
290
+ # Accepted key/value pairs in options parameter are:
291
+ # * +:visibility_timeout+ - Integer. Specifies the new visibility timeout value, in seconds, relative to server
292
+ # time. The new value must be larger than or equal to 0, and cannot be larger than 7
293
+ # days. The visibility timeout of a message cannot be set to a value later than the
294
+ # expiry time. :visibility_timeout should be set to a value smaller than the
295
+ # time-to-live value. If not specified, the default value is 0.
296
+ # * +:message_ttl+ - Integer. Specifies the time-to-live interval for the message, in seconds. The maximum
297
+ # time-to-live allowed is 7 days. If not specified, the default time-to-live is 7 days.
298
+ # * +:encode+ - Boolean. If set to true, the message will be base64 encoded.
299
+ # * +:timeout+ - Integer. A timeout in seconds.
300
+ #
301
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179346
302
+ #
303
+ # Returns nil on success
304
+ def create_message(queue_name, message_text, options={})
305
+ query = { }
306
+
307
+ unless options.empty?
308
+ query["visibilitytimeout"] = options[:visibility_timeout] if options[:visibility_timeout]
309
+ query["messagettl"] = options[:message_ttl] if options[:message_ttl]
310
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
311
+ end
312
+
313
+ uri = messages_uri(queue_name, query)
314
+ body = Serialization.message_to_xml(message_text, options[:encode])
315
+
316
+ call(:post, uri, body, {})
317
+ nil
318
+ end
319
+
320
+ # Public: Deletes a specified message from the queue.
321
+ #
322
+ # ==== Attributes
323
+ #
324
+ # * +queue_name+ - String. The queue name.
325
+ # * +message_id+ - String. The id of the message.
326
+ # * +pop_receipt+ - String. The valid pop receipt value returned from an earlier call to the Get Messages or
327
+ # Update Message operation.
328
+ # * +options+ - Hash. Optional parameters.
329
+ #
330
+ # ==== Options
331
+ #
332
+ # Accepted key/value pairs in options parameter are:
333
+ # * +:timeout+ - Integer. A timeout in seconds.
334
+ #
335
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179347
336
+ #
337
+ # Returns nil on success
338
+ #
339
+ # Remarks:
340
+ #
341
+ # When a message is successfully deleted, it is immediately marked for deletion and is no longer accessible to
342
+ # clients. The message is later removed from the queue during garbage collection.
343
+ #
344
+ # After a client retrieves a message with the Get Messages operation, the client is expected to process and
345
+ # delete the message. To delete the message, you must have two items of data returned in the response body of
346
+ # the Get Messages operation:
347
+ #
348
+ # * The message ID, an opaque GUID value that identifies the message in the queue.
349
+ #
350
+ # * A valid pop receipt, an opaque value that indicates that the message has been retrieved.
351
+ #
352
+ # The message ID is returned from the previous Get Messages operation. The pop receipt is returned from the most
353
+ # recent Get Messages or Update Message operation. In order for the Delete Message operation to succeed, the pop
354
+ # receipt specified on the request must match the pop receipt returned from the Get Messages or Update Message
355
+ # operation.
356
+ #
357
+ # Pop receipts remain valid until one of the following events occurs:
358
+ #
359
+ # * The message has expired.
360
+ #
361
+ # * The message has been deleted using the last pop receipt received either from Get Messages or Update Message.
362
+ #
363
+ # * The invisibility time has elapsed and the message has been dequeued by a Get Messages request. When the
364
+ # invisibility time elapses, the message becomes visible again. If it is retrieved by another Get Messages
365
+ # request, the returned pop receipt can be used to delete or update the message.
366
+ #
367
+ # * The message has been updated with a new visibility timeout. When the message is updated, a new pop receipt
368
+ # will be returned.
369
+ #
370
+ # If the message has already been deleted when Delete Message is called, the Queue service returns status code
371
+ # 404 (Not Found).
372
+ #
373
+ # If a message with a matching pop receipt is not found, the service returns status code 400 (Bad Request), with
374
+ # additional error information indicating that the cause of the failure was a mismatched pop receipt.
375
+ #
376
+ def delete_message(queue_name, message_id, pop_receipt, options={})
377
+ query = { "popreceipt" => pop_receipt }
378
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
379
+
380
+ uri = message_uri(queue_name, message_id, query)
381
+
382
+ call(:delete, uri)
383
+ nil
384
+ end
385
+
386
+ # Public: Retrieves one or more messages from the front of the queue, without changing the message visibility.
387
+ #
388
+ # ==== Attributes
389
+ #
390
+ # * +queue_name+ - String. The queue name.
391
+ # * +options+ - Hash. Optional parameters.
392
+ #
393
+ # ==== Options
394
+ #
395
+ # Accepted key/value pairs in options parameter are:
396
+ # * +:number_of_messages+ - Integer. How many messages to return. (optional, Default: 1)
397
+ # * +:decode+ - Boolean. Boolean value indicating if the message should be base64 decoded.
398
+ # * +:timeout+ - Integer. A timeout in seconds.
399
+ #
400
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179472
401
+ #
402
+ # Returns a list of Azure::Entity::Queue::Message instances
403
+ def peek_messages(queue_name, options={})
404
+ number_of_messages=1
405
+ number_of_messages = options[:number_of_messages] if options[:number_of_messages]
406
+
407
+ query = { "peekonly" => "true", "numofmessages"=> number_of_messages.to_s }
408
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
409
+
410
+ uri = messages_uri(queue_name, query)
411
+ response = call(:get, uri)
412
+
413
+ messages = Serialization.queue_messages_from_xml(response.body, options[:decode])
414
+ messages
415
+ end
416
+
417
+ # Public: Retrieves one or more messages from the front of the queue.
418
+ #
419
+ # ==== Attributes
420
+ #
421
+ # * +queue_name+ - String. The queue name.
422
+ # * +visibility_timeout+ - Integer. The new visibility timeout value, in seconds, relative to server time.
423
+ # * +options+ - Hash. Optional parameters.
424
+ #
425
+ # ==== Options
426
+ #
427
+ # Accepted key/value pairs in options parameter are:
428
+ # * +:number_of_messages+ - Integer. How many messages to return. (optional, Default: 1)
429
+ # * +:timeout+ - Integer. A timeout in seconds.
430
+ # * +:decode+ - Boolean. Boolean value indicating if the message should be base64 decoded.
431
+ #
432
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/dd179474
433
+ #
434
+ # Returns a list of Azure::Entity::Queue::Message instances
435
+ def list_messages(queue_name, visibility_timeout, options={})
436
+ number_of_messages=1
437
+ number_of_messages = options[:number_of_messages] if options[:number_of_messages]
438
+
439
+ query = { "visibilitytimeout" => visibility_timeout.to_s, "numofmessages"=> number_of_messages.to_s }
440
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
441
+
442
+ uri = messages_uri(queue_name, query)
443
+ response = call(:get, uri)
444
+
445
+ messages = Serialization.queue_messages_from_xml(response.body, options[:decode])
446
+ messages
447
+ end
448
+
449
+ # Public: Adds a message to the queue and optionally sets a visibility timeout for the message.
450
+ #
451
+ # ==== Attributes
452
+ #
453
+ # * +queue_name+ - String. The queue name.
454
+ # * +message_id+ - String. The id of the message.
455
+ # * +pop_receipt+ - String. The valid pop receipt value returned from an earlier call to the Get Messages or
456
+ # update Message operation.
457
+ # * +message_text+ - String. The message contents. Note that the message content must be in a format that may
458
+ # be encoded with UTF-8.
459
+ # * +visibility_timeout+ - Integer. The new visibility timeout value, in seconds, relative to server time.
460
+ # * +options+ - Hash. Optional parameters.
461
+ #
462
+ # ==== Options
463
+ #
464
+ # Accepted key/value pairs in options parameter are:
465
+ # * +:encode+ - Boolean. If set to true, the message will be base64 encoded.
466
+ # * +:timeout+ - Integer. A timeout in seconds.
467
+ #
468
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/hh452234
469
+ #
470
+ # Returns a tuple of (pop_receipt, time_next_visible)
471
+ # * pop_receipt - String. The pop receipt of the queue message.
472
+ # * time_next_visible - String. A UTC date/time value that represents when the message will be visible on the queue.
473
+ #
474
+ # Remarks:
475
+ #
476
+ # An Update Message operation will fail if the specified message does not exist in the queue, or if the
477
+ # specified pop receipt does not match the message.
478
+ #
479
+ # A pop receipt is returned by the Get Messages operation or the Update Message operation. Pop receipts
480
+ # remain valid until one of the following events occurs:
481
+ #
482
+ # * The message has expired.
483
+ #
484
+ # * The message has been deleted using the last pop receipt received either from Get Messages or
485
+ # Update Message.
486
+ #
487
+ # * The invisibility time has elapsed and the message has been dequeued by a Get Messages request. When
488
+ # the invisibility time elapses, the message becomes visible again. If it is retrieved by another
489
+ # Get Messages request, the returned pop receipt can be used to delete or update the message.
490
+ #
491
+ # * The message has been updated with a new visibility timeout. When the message is updated, a new pop
492
+ # receipt will be returned.
493
+ #
494
+ # The Update Message operation can be used to continually extend the invisibility of a queue message. This
495
+ # functionality can be useful if you want a worker role to "lease" a queue message. For example, if a worker
496
+ # role calls Get Messages and recognizes that it needs more time to process a message, it can continually
497
+ # extend the message's invisibility until it is processed. If the worker role were to fail during processing,
498
+ # eventually the message would become visible again and another worker role could process it.
499
+ #
500
+ def update_message(queue_name, message_id, pop_receipt, message_text, visibility_timeout, options={})
501
+ query = { "visibilitytimeout" => visibility_timeout.to_s, "popreceipt" => pop_receipt }
502
+ query["timeout"] = options[:timeout].to_s if options[:timeout]
503
+
504
+ uri = message_uri(queue_name, message_id, query)
505
+ body = Serialization.message_to_xml(message_text, options[:encode])
506
+
507
+ response = call(:put, uri, body, {})
508
+ new_pop_receipt = response.headers["x-ms-popreceipt"]
509
+ time_next_visible = response.headers["x-ms-time-next-visible"]
510
+ return new_pop_receipt, time_next_visible
511
+ end
512
+
513
+ # Protected: Generate the URI for the collection of queues.
514
+ #
515
+ # ==== Attributes
516
+ #
517
+ # * +query+ - A Hash of query parameters (default: {}).
518
+ #
519
+ # Returns a URI.
520
+ protected
521
+ def collection_uri(query={})
522
+ query.update({:comp => 'list', :include => 'metadata'})
523
+ generate_uri("", query)
524
+ end
525
+
526
+ # Protected: Generate the URI for a given queue.
527
+ #
528
+ # ==== Attributes
529
+ #
530
+ # * +queue_name+ - The name of the queue.
531
+ # * +query+ - A Hash of query parameters (default: {}).
532
+ #
533
+ # Returns a URI.
534
+ protected
535
+ def queue_uri(queue_name, query={})
536
+ return queue_name if queue_name.kind_of? ::URI
537
+ generate_uri(queue_name, query)
538
+ end
539
+
540
+ # Protected: Generate the messages URI for the given queue.
541
+ #
542
+ # ==== Attributes
543
+ #
544
+ # * +queue_name+ - The name of the queue.
545
+ # * +query+ - A Hash of query parameters (default: {}).
546
+ #
547
+ # Returns a URI.
548
+ protected
549
+ def messages_uri(queue_name, query={})
550
+ generate_uri("#{queue_name}/messages", query)
551
+ end
552
+
553
+ # Protected: Generate the URI for a given message
554
+ #
555
+ # ==== Attributes
556
+ #
557
+ # * +queue_name+ - The name of the queue.
558
+ # * +message_id+ - The id of the message.
559
+ # * +query+ - A Hash of query parameters (default: {}).
560
+ #
561
+ # Returns a URI.
562
+ protected
563
+ def message_uri(queue_name, message_id, query={})
564
+ generate_uri("#{queue_name}/messages/#{message_id}", query)
565
+ end
566
+ end
567
+ end
568
568
  end