azure 0.1.1 → 0.5.0

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 (341) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/ChangeLog.txt +5 -0
  4. data/Gemfile +16 -3
  5. data/README.md +344 -2
  6. data/Rakefile +66 -37
  7. data/azure.gemspec +30 -11
  8. data/lib/azure.rb +35 -4
  9. data/lib/azure/blob/blob.rb +32 -0
  10. data/lib/azure/blob/blob_service.rb +1423 -0
  11. data/lib/azure/blob/block.rb +31 -0
  12. data/lib/azure/blob/container.rb +32 -0
  13. data/lib/azure/blob/serialization.rb +285 -0
  14. data/lib/azure/core.rb +32 -0
  15. data/lib/azure/core/auth/authorizer.rb +36 -0
  16. data/lib/azure/core/auth/shared_key.rb +21 -6
  17. data/lib/azure/core/auth/shared_key_lite.rb +17 -3
  18. data/lib/azure/core/auth/signer.rb +48 -0
  19. data/lib/azure/core/configuration.rb +152 -0
  20. data/lib/azure/core/error.rb +22 -0
  21. data/lib/azure/core/filtered_service.rb +44 -0
  22. data/lib/azure/core/http/debug_filter.rb +36 -0
  23. data/lib/azure/core/http/http_error.rb +84 -0
  24. data/lib/azure/core/http/http_filter.rb +53 -0
  25. data/lib/azure/core/http/http_request.rb +157 -0
  26. data/lib/azure/core/http/http_response.rb +133 -0
  27. data/lib/azure/core/http/retry_policy.rb +68 -0
  28. data/lib/azure/core/http/signer_filter.rb +34 -0
  29. data/lib/azure/core/service.rb +38 -32
  30. data/lib/azure/core/signed_service.rb +43 -0
  31. data/lib/azure/queue/message.rb +30 -0
  32. data/lib/azure/queue/queue.rb +29 -0
  33. data/lib/azure/queue/queue_service.rb +568 -0
  34. data/lib/azure/queue/serialization.rb +103 -0
  35. data/lib/azure/service/access_policy.rb +26 -0
  36. data/lib/azure/service/enumeration_results.rb +21 -0
  37. data/lib/azure/service/logging.rb +32 -0
  38. data/lib/azure/service/metrics.rb +31 -0
  39. data/lib/azure/service/retention_policy.rb +25 -0
  40. data/lib/azure/service/serialization.rb +240 -0
  41. data/lib/azure/service/signed_identifier.rb +30 -0
  42. data/lib/azure/service/storage_service.rb +79 -0
  43. data/lib/azure/service/storage_service_properties.rb +32 -0
  44. data/lib/azure/service_bus/action.rb +21 -0
  45. data/lib/azure/service_bus/auth/wrap_service.rb +59 -46
  46. data/lib/azure/service_bus/auth/wrap_signer.rb +69 -0
  47. data/lib/azure/service_bus/brokered_message.rb +36 -51
  48. data/lib/azure/service_bus/brokered_message_serializer.rb +48 -34
  49. data/lib/azure/service_bus/correlation_filter.rb +45 -0
  50. data/lib/azure/service_bus/empty_rule_action.rb +30 -0
  51. data/lib/azure/service_bus/false_filter.rb +38 -0
  52. data/lib/azure/service_bus/filter.rb +21 -0
  53. data/lib/azure/{core/utils → service_bus}/interval.rb +29 -22
  54. data/lib/azure/service_bus/queue.rb +230 -0
  55. data/lib/azure/service_bus/resource.rb +109 -0
  56. data/lib/azure/service_bus/rule.rb +98 -0
  57. data/lib/azure/service_bus/rule_aspect.rb +34 -0
  58. data/lib/azure/service_bus/serialization.rb +160 -0
  59. data/lib/azure/service_bus/service_bus_service.rb +819 -12
  60. data/lib/azure/service_bus/sql_filter.rb +50 -0
  61. data/lib/azure/service_bus/sql_rule_action.rb +50 -0
  62. data/lib/azure/service_bus/subscription.rb +184 -0
  63. data/lib/azure/service_bus/topic.rb +187 -0
  64. data/lib/azure/service_bus/true_filter.rb +38 -0
  65. data/lib/azure/{tables → table}/auth/shared_key.rb +33 -12
  66. data/lib/azure/table/auth/shared_key_lite.rb +44 -0
  67. data/lib/azure/table/batch.rb +330 -0
  68. data/lib/azure/table/batch_response.rb +117 -0
  69. data/lib/azure/table/edmtype.rb +127 -0
  70. data/lib/azure/table/entity.rb +31 -0
  71. data/lib/azure/table/guid.rb +24 -0
  72. data/lib/azure/table/query.rb +112 -0
  73. data/lib/azure/table/serialization.rb +105 -0
  74. data/lib/azure/table/table_service.rb +557 -0
  75. data/lib/azure/version.rb +31 -0
  76. data/test/fixtures/container_acl.xml +11 -0
  77. data/test/fixtures/{error.xml → http_error.xml} +0 -0
  78. data/test/fixtures/list_blobs.xml +121 -0
  79. data/test/fixtures/list_block_all_with_none_committed.xml +22 -0
  80. data/test/fixtures/list_blocks_all.xml +23 -0
  81. data/test/fixtures/list_blocks_committed.xml +13 -0
  82. data/test/fixtures/list_containers.xml +38 -0
  83. data/test/fixtures/list_page_ranges.xml +11 -0
  84. data/test/fixtures/logging.xml +11 -0
  85. data/test/fixtures/metrics.xml +10 -0
  86. data/test/fixtures/queues.xml +1 -1
  87. data/test/fixtures/retention_policy.xml +5 -0
  88. data/test/fixtures/storage_service_properties.xml +23 -0
  89. data/test/integration/blob/blob_metadata_test.rb +75 -0
  90. data/test/integration/blob/blob_pages_test.rb +119 -0
  91. data/test/integration/blob/blob_properties_test.rb +77 -0
  92. data/test/integration/blob/block_blob_test.rb +254 -0
  93. data/test/integration/blob/container/container_acl_test.rb +69 -0
  94. data/test/integration/blob/container/container_metadata_test.rb +50 -0
  95. data/test/integration/blob/container/create_container_test.rb +60 -0
  96. data/test/integration/blob/container/delete_container_test.rb +39 -0
  97. data/test/integration/blob/container/get_container_properties_test.rb +48 -0
  98. data/test/integration/blob/container/list_containers_test.rb +79 -0
  99. data/test/integration/blob/container/root_container_test.rb +50 -0
  100. data/test/integration/blob/copy_blob_test.rb +113 -0
  101. data/test/integration/blob/create_blob_snapshot_test.rb +80 -0
  102. data/test/integration/blob/create_page_blob_test.rb +83 -0
  103. data/test/integration/blob/delete_blob_test.rb +159 -0
  104. data/test/integration/blob/get_blob_test.rb +65 -0
  105. data/test/integration/blob/informative_errors_test.rb +39 -0
  106. data/test/integration/blob/lease/acquire_lease_test.rb +36 -0
  107. data/test/integration/blob/lease/break_lease_test.rb +40 -0
  108. data/test/integration/blob/lease/release_lease_test.rb +40 -0
  109. data/test/integration/blob/lease/renew_lease_test.rb +42 -0
  110. data/test/integration/blob/list_blobs_test.rb +113 -0
  111. data/test/integration/queue/clear_messages_test.rb +42 -0
  112. data/test/integration/queue/create_message_test.rb +75 -0
  113. data/test/integration/queue/create_queue_test.rb +50 -0
  114. data/test/integration/queue/delete_message_test.rb +67 -0
  115. data/test/integration/queue/delete_queue_test.rb +45 -0
  116. data/test/integration/queue/informative_errors_test.rb +42 -0
  117. data/test/integration/queue/list_messages_encoded_test.rb +79 -0
  118. data/test/integration/queue/list_messages_test.rb +79 -0
  119. data/test/integration/queue/list_queues_test.rb +44 -0
  120. data/test/integration/queue/peek_messages_test.rb +59 -0
  121. data/test/integration/queue/queue_metadata_test.rb +40 -0
  122. data/test/integration/queue/update_message_test.rb +74 -0
  123. data/test/integration/service_bus/informative_errors_test.rb +37 -0
  124. data/test/integration/service_bus/queues_scenario_test.rb +200 -0
  125. data/test/integration/service_bus/queues_test.rb +266 -0
  126. data/test/integration/service_bus/rules_test.rb +145 -0
  127. data/test/integration/service_bus/scenario_test.rb +102 -0
  128. data/test/integration/service_bus/subscriptions_test.rb +211 -0
  129. data/test/integration/service_bus/topics_scenario_test.rb +406 -0
  130. data/test/integration/service_bus/topics_test.rb +129 -0
  131. data/test/integration/table/create_table_test.rb +36 -0
  132. data/test/integration/table/delete_entity_batch_test.rb +107 -0
  133. data/test/integration/table/delete_entity_test.rb +94 -0
  134. data/test/integration/table/delete_table_test.rb +40 -0
  135. data/test/integration/table/get_table_test.rb +37 -0
  136. data/test/integration/table/informative_errors_test.rb +39 -0
  137. data/test/integration/table/insert_entity_batch_test.rb +100 -0
  138. data/test/integration/table/insert_entity_test.rb +88 -0
  139. data/test/integration/table/insert_or_merge_entity_batch_test.rb +159 -0
  140. data/test/integration/table/insert_or_merge_entity_test.rb +143 -0
  141. data/test/integration/table/insert_or_replace_entity_batch_test.rb +152 -0
  142. data/test/integration/table/insert_or_replace_entity_test.rb +137 -0
  143. data/test/integration/table/merge_entity_batch_test.rb +128 -0
  144. data/test/integration/table/merge_entity_test.rb +113 -0
  145. data/test/integration/table/query_entities_test.rb +195 -0
  146. data/test/integration/table/query_tables_test.rb +43 -0
  147. data/test/integration/table/query_test.rb +251 -0
  148. data/test/integration/table/table_acl_test.rb +52 -0
  149. data/test/integration/table/update_entity_batch_test.rb +149 -0
  150. data/test/integration/table/update_entity_test.rb +131 -0
  151. data/test/integration/test_helper.rb +23 -9
  152. data/test/support/env.rb +15 -1
  153. data/test/support/fixtures.rb +14 -0
  154. data/test/support/name_generator.rb +74 -0
  155. data/test/support/stubs.rb +14 -0
  156. data/test/test_helper.rb +43 -3
  157. data/test/unit/blob/blob_service_test.rb +1947 -0
  158. data/test/unit/core/auth/shared_key_lite_test.rb +51 -0
  159. data/test/unit/core/auth/shared_key_test.rb +58 -0
  160. data/test/unit/core/auth/signer_test.rb +30 -0
  161. data/test/unit/core/http/http_error_test.rb +57 -0
  162. data/test/unit/core/http/http_request_test.rb +66 -0
  163. data/test/unit/core/http/http_response_test.rb +45 -0
  164. data/test/unit/service/serialization_test.rb +502 -0
  165. data/test/unit/service/storage_service_test.rb +291 -0
  166. data/test/unit/table/edmtype_test.rb +108 -0
  167. metadata +231 -230
  168. data/Gemfile.lock +0 -36
  169. data/lib/azure/atom.rb +0 -170
  170. data/lib/azure/auth.rb +0 -29
  171. data/lib/azure/blobs.rb +0 -620
  172. data/lib/azure/blobs/blob.rb +0 -360
  173. data/lib/azure/blobs/container.rb +0 -209
  174. data/lib/azure/blobs/service.rb +0 -396
  175. data/lib/azure/blobs/shared_access_signature.rb +0 -84
  176. data/lib/azure/blobs/uri.rb +0 -60
  177. data/lib/azure/configuration.rb +0 -121
  178. data/lib/azure/core/collection.rb +0 -118
  179. data/lib/azure/core/signer.rb +0 -32
  180. data/lib/azure/core/utils/queryable.rb +0 -74
  181. data/lib/azure/core/utils/storage_service_properties.rb +0 -83
  182. data/lib/azure/core/utils/string.rb +0 -59
  183. data/lib/azure/error.rb +0 -72
  184. data/lib/azure/queues.rb +0 -272
  185. data/lib/azure/queues/message.rb +0 -174
  186. data/lib/azure/queues/queue.rb +0 -187
  187. data/lib/azure/queues/service.rb +0 -263
  188. data/lib/azure/queues/service_properties.rb +0 -152
  189. data/lib/azure/queues/uri.rb +0 -78
  190. data/lib/azure/request.rb +0 -102
  191. data/lib/azure/response.rb +0 -93
  192. data/lib/azure/service_bus.rb +0 -4
  193. data/lib/azure/service_bus/auth/authorizer.rb +0 -22
  194. data/lib/azure/service_bus/auth/uri.rb +0 -52
  195. data/lib/azure/service_bus/auth/wrap.rb +0 -37
  196. data/lib/azure/service_bus/auth/wrap_token.rb +0 -45
  197. data/lib/azure/service_bus/auth/wrap_token_manager.rb +0 -46
  198. data/lib/azure/service_bus/queues.rb +0 -194
  199. data/lib/azure/service_bus/queues/queue.rb +0 -100
  200. data/lib/azure/service_bus/queues/queue_serializer.rb +0 -51
  201. data/lib/azure/service_bus/queues/service.rb +0 -154
  202. data/lib/azure/service_bus/queues/uri.rb +0 -80
  203. data/lib/azure/service_bus/rules.rb +0 -110
  204. data/lib/azure/service_bus/rules/rule.rb +0 -97
  205. data/lib/azure/service_bus/rules/service.rb +0 -122
  206. data/lib/azure/service_bus/rules/uri.rb +0 -39
  207. data/lib/azure/service_bus/subscriptions.rb +0 -170
  208. data/lib/azure/service_bus/subscriptions/service.rb +0 -133
  209. data/lib/azure/service_bus/subscriptions/subscription.rb +0 -164
  210. data/lib/azure/service_bus/subscriptions/subscription_serializer.rb +0 -74
  211. data/lib/azure/service_bus/subscriptions/uri.rb +0 -71
  212. data/lib/azure/service_bus/topics.rb +0 -120
  213. data/lib/azure/service_bus/topics/service.rb +0 -98
  214. data/lib/azure/service_bus/topics/topic.rb +0 -122
  215. data/lib/azure/service_bus/topics/topic_serializer.rb +0 -44
  216. data/lib/azure/service_bus/topics/uri.rb +0 -58
  217. data/lib/azure/service_runtime/client/goal_state_pipe_monitor.rb +0 -21
  218. data/lib/azure/service_runtime/client/goal_state_protocol.rb +0 -18
  219. data/lib/azure/service_runtime/client/runtime_client.rb +0 -135
  220. data/lib/azure/service_runtime/deployment.rb +0 -24
  221. data/lib/azure/service_runtime/local_resource.rb +0 -15
  222. data/lib/azure/service_runtime/role.rb +0 -17
  223. data/lib/azure/service_runtime/role_environment.rb +0 -206
  224. data/lib/azure/service_runtime/role_environment_change.rb +0 -32
  225. data/lib/azure/service_runtime/role_instance.rb +0 -35
  226. data/lib/azure/service_runtime/role_instance_endpoint.rb +0 -14
  227. data/lib/azure/tables.rb +0 -215
  228. data/lib/azure/tables/auth/shared_key_lite.rb +0 -30
  229. data/lib/azure/tables/entities_collection.rb +0 -66
  230. data/lib/azure/tables/entity.rb +0 -127
  231. data/lib/azure/tables/service.rb +0 -211
  232. data/lib/azure/tables/table.rb +0 -129
  233. data/lib/azure/tables/tables_collection.rb +0 -62
  234. data/lib/azure/tables/types.rb +0 -65
  235. data/lib/azure/tables/uri.rb +0 -62
  236. data/test/integration/blobs/auth_test.rb +0 -19
  237. data/test/integration/blobs/blob_test.rb +0 -61
  238. data/test/integration/blobs/clear_page_range_test.rb +0 -19
  239. data/test/integration/blobs/copy_test.rb +0 -33
  240. data/test/integration/blobs/create_blobs_test.rb +0 -51
  241. data/test/integration/blobs/create_container_test.rb +0 -13
  242. data/test/integration/blobs/create_snapshot_test.rb +0 -17
  243. data/test/integration/blobs/delete_blob_snapshots_test.rb +0 -19
  244. data/test/integration/blobs/delete_blobs_test.rb +0 -25
  245. data/test/integration/blobs/delete_container_test.rb +0 -24
  246. data/test/integration/blobs/delete_snapshot_test.rb +0 -17
  247. data/test/integration/blobs/get_blob_snapshot_test.rb +0 -18
  248. data/test/integration/blobs/get_blobs_test.rb +0 -31
  249. data/test/integration/blobs/get_page_range_test.rb +0 -19
  250. data/test/integration/blobs/list_blobs_test.rb +0 -39
  251. data/test/integration/blobs/list_containers_test.rb +0 -28
  252. data/test/integration/blobs/manage_blob_leases_test.rb +0 -45
  253. data/test/integration/blobs/manage_blob_metadata_test.rb +0 -51
  254. data/test/integration/blobs/manage_blob_properties_test.rb +0 -25
  255. data/test/integration/blobs/manage_blob_service_properties_test.rb +0 -38
  256. data/test/integration/blobs/manage_container_metadata_test.rb +0 -46
  257. data/test/integration/blobs/manage_container_permissions_test.rb +0 -17
  258. data/test/integration/blobs/update_page_range_test.rb +0 -20
  259. data/test/integration/queues/clear_messages_test.rb +0 -22
  260. data/test/integration/queues/create_queue_test.rb +0 -13
  261. data/test/integration/queues/delete_message_test.rb +0 -42
  262. data/test/integration/queues/delete_queue_test.rb +0 -24
  263. data/test/integration/queues/get_messages_test.rb +0 -39
  264. data/test/integration/queues/list_queues_test.rb +0 -43
  265. data/test/integration/queues/manage_queue_metadata_test.rb +0 -45
  266. data/test/integration/queues/manage_queue_service_properties_test.rb +0 -27
  267. data/test/integration/queues/peek_messages_test.rb +0 -55
  268. data/test/integration/queues/put_message_test.rb +0 -31
  269. data/test/integration/queues/update_message_test.rb +0 -46
  270. data/test/integration/service_bus/auth_test.rb +0 -18
  271. data/test/integration/service_bus/queues/create_queue_test.rb +0 -25
  272. data/test/integration/service_bus/queues/delete_message_from_queue_test.rb +0 -29
  273. data/test/integration/service_bus/queues/delete_queue_test.rb +0 -25
  274. data/test/integration/service_bus/queues/get_queue_test.rb +0 -23
  275. data/test/integration/service_bus/queues/list_queues_test.rb +0 -39
  276. data/test/integration/service_bus/queues/peek_message_from_queue_test.rb +0 -34
  277. data/test/integration/service_bus/queues/read_and_delete_message_from_queue_test.rb +0 -31
  278. data/test/integration/service_bus/queues/send_message_to_queue_test.rb +0 -22
  279. data/test/integration/service_bus/queues/unlock_message_from_queue_test.rb +0 -36
  280. data/test/integration/service_bus/rules/create_rule_test.rb +0 -19
  281. data/test/integration/service_bus/rules/delete_rule_test.rb +0 -17
  282. data/test/integration/service_bus/rules/get_rule_test.rb +0 -21
  283. data/test/integration/service_bus/rules/list_rules_test.rb +0 -24
  284. data/test/integration/service_bus/rules/rule_test.rb +0 -16
  285. data/test/integration/service_bus/subscriptions/create_subscription_test.rb +0 -25
  286. data/test/integration/service_bus/subscriptions/delete_message_from_subscription_test.rb +0 -31
  287. data/test/integration/service_bus/subscriptions/delete_subscription_test.rb +0 -30
  288. data/test/integration/service_bus/subscriptions/fetch_subscription_test.rb +0 -28
  289. data/test/integration/service_bus/subscriptions/list_subscriptions_test.rb +0 -23
  290. data/test/integration/service_bus/subscriptions/peek_lock_message_from_subscription_test.rb +0 -42
  291. data/test/integration/service_bus/subscriptions/read_delete_message_from_subscription_test.rb +0 -36
  292. data/test/integration/service_bus/subscriptions/subscription_test.rb +0 -31
  293. data/test/integration/service_bus/subscriptions/unlock_message_from_subscription_test.rb +0 -43
  294. data/test/integration/service_bus/topics/create_topic_test.rb +0 -25
  295. data/test/integration/service_bus/topics/delete_topic_test.rb +0 -25
  296. data/test/integration/service_bus/topics/get_topic_test.rb +0 -23
  297. data/test/integration/service_bus/topics/list_topics_test.rb +0 -39
  298. data/test/integration/service_bus/topics/send_message_to_topic_test.rb +0 -23
  299. data/test/integration/tables/auth_test.rb +0 -29
  300. data/test/integration/tables/creating_tables_test.rb +0 -16
  301. data/test/integration/tables/delete_entity_test.rb +0 -39
  302. data/test/integration/tables/deleting_table_test.rb +0 -22
  303. data/test/integration/tables/insert_entity_test.rb +0 -23
  304. data/test/integration/tables/merge_entity_test.rb +0 -28
  305. data/test/integration/tables/query_entities_test.rb +0 -131
  306. data/test/integration/tables/query_tables_test.rb +0 -63
  307. data/test/integration/tables/update_entity_test.rb +0 -54
  308. data/test/support/blobs.rb +0 -12
  309. data/test/support/table_names.rb +0 -44
  310. data/test/unit/atom_test.rb +0 -58
  311. data/test/unit/auth_test.rb +0 -24
  312. data/test/unit/blobs/blob_test.rb +0 -5
  313. data/test/unit/blobs/container_test.rb +0 -67
  314. data/test/unit/blobs/service_test.rb +0 -17
  315. data/test/unit/blobs/shared_access_signature_test.rb +0 -66
  316. data/test/unit/blobs_test.rb +0 -156
  317. data/test/unit/core/service_test.rb +0 -57
  318. data/test/unit/core/utils/interval_test.rb +0 -70
  319. data/test/unit/core/utils/queryable_test.rb +0 -69
  320. data/test/unit/core/utils/storage_service_properties_test.rb +0 -66
  321. data/test/unit/error_test.rb +0 -39
  322. data/test/unit/queues/message_test.rb +0 -40
  323. data/test/unit/queues/queue_test.rb +0 -64
  324. data/test/unit/queues/service_properties.rb +0 -35
  325. data/test/unit/request_test.rb +0 -38
  326. data/test/unit/response_test.rb +0 -43
  327. data/test/unit/service_bus/auth/authorizer_test.rb +0 -27
  328. data/test/unit/service_bus/auth/wrap_token_test.rb +0 -28
  329. data/test/unit/service_bus/queues/queue_test.rb +0 -38
  330. data/test/unit/service_bus/topics/topic_test.rb +0 -33
  331. data/test/unit/service_runtime/data/goalstate.xml +0 -9
  332. data/test/unit/service_runtime/data/roleenvironmentdata.xml +0 -29
  333. data/test/unit/service_runtime/data/runtime.xml +0 -6
  334. data/test/unit/service_runtime/role_environment_test.rb +0 -144
  335. data/test/unit/tables/auth/shared_key_lite_test.rb +0 -39
  336. data/test/unit/tables/auth/shared_key_test.rb +0 -45
  337. data/test/unit/tables/entities_collection_test.rb +0 -39
  338. data/test/unit/tables/entity_test.rb +0 -72
  339. data/test/unit/tables/table_test.rb +0 -57
  340. data/test/unit/tables_test.rb +0 -302
  341. data/test/unit/types_test.rb +0 -67
@@ -1,60 +0,0 @@
1
- require "azure/configuration"
2
- require "uri"
3
-
4
- module Azure
5
- module Blobs
6
- module URI
7
- # Public: Generate the URI for the collection of containers.
8
- #
9
- # query - A Hash of key => value query parameters.
10
- # host - The host of the API.
11
- #
12
- # Returns a URI.
13
- def self.containers(query={}, host=Azure.config.blob_host)
14
- query = { "comp" => "list" }.merge(query)
15
- uri = join(host, "/")
16
- uri.query = ::URI.encode_www_form(query)
17
- uri
18
- end
19
-
20
- # Public: Generate the URI for a specific container.
21
- #
22
- # name - The container name. If this is a URI, we just return this.
23
- # query - A Hash of key => value query parameters.
24
- # host - The host of the API.
25
- #
26
- # Returns a URI.
27
- def self.container(name, query={}, host=Azure.config.blob_host)
28
- return name if name.kind_of? ::URI
29
- query = { "restype" => "container" }.merge(query)
30
- uri = join(host, name)
31
- uri.query = ::URI.encode_www_form(query)
32
- uri
33
- end
34
-
35
- # Public: Generate the URI for a specific Blob.
36
- #
37
- # container_name - String representing the name of the container.
38
- # blob_name - String representing the name of the blob.
39
- # query - A Hash of key => value query parameters.
40
- # host - The host of the API.
41
- #
42
- # Returns a URI.
43
- def self.blob(container_name, blob_name, query={}, host=Azure.config.blob_host)
44
- uri = join(host, File.join(container_name, blob_name))
45
- uri.query = ::URI.encode_www_form(query)
46
- uri
47
- end
48
-
49
- # Utility method to generate the URI.
50
- #
51
- # host - A String with the URI's host.
52
- # path - A String with the URI's path.
53
- #
54
- # Returns a URI.
55
- def self.join(host, path)
56
- ::URI.parse(File.join(host, path))
57
- end
58
- end
59
- end
60
- end
@@ -1,121 +0,0 @@
1
- require "singleton"
2
-
3
- module Azure
4
- # Public: Sugar to configure the services in a neatly wrapped DSL.
5
- #
6
- # Yields the Azure::Configuration instance.
7
- #
8
- # Example:
9
- #
10
- # Azure.configure do |config|
11
- # config.account_name = ENV["AZURE_ACCOUNT_NAME"]
12
- # end
13
- #
14
- # Returns nothing.
15
- def self.configure
16
- yield config
17
- end
18
-
19
- # Public: Access the service configuration.
20
- #
21
- # Returns the Azure::Configuration instance.
22
- def self.config
23
- Configuration.instance
24
- end
25
-
26
- # Singleton that keeps the configuration of the system.
27
- class Configuration
28
- include Singleton
29
-
30
- # Public: Get/Set the Access Key for this service.
31
- attr_accessor :access_key
32
-
33
- # Public: Get/Set the Account Name for this service.
34
- attr_accessor :account_name
35
-
36
- # # Public: Get/Set the Access Control Namespace for this service.
37
- # attr_accessor :acs_namespace
38
-
39
- # Public: Get/Set the Service Bus Access Key (Issuer Secret) for this service.
40
- attr_accessor :sb_access_key
41
-
42
- # Public: Get/Set the Service Bus Issuer for this service.
43
- attr_accessor :sb_issuer
44
-
45
- # Public: Get/Set the ACS namespace for this service.
46
- attr_accessor :acs_namespace
47
-
48
- # Public: Set the host for the Table service. Only set this if you want
49
- # something custom (like, for example, to point this to a LocalStorage
50
- # emulator). This should be the complete host, including http:// at the
51
- # start. When using the emulator, make sure to include your account name at
52
- # the end.
53
- #
54
- # Example:
55
- #
56
- # config.table_host = "http://127.0.0.1:10002/devstoreaccount1"
57
- attr_writer :table_host
58
-
59
- # Public: Get the host for this service. If you set something using #host=,
60
- # then we use that. Else we default to Windows Azure's default hosts, based
61
- # on your account name.
62
- def table_host
63
- @table_host || default_host(:table)
64
- end
65
-
66
- # Public: Set the host for the Blob service. Only set this if you want
67
- # something custom (like, for example, to point this to a LocalStorage
68
- # emulator). This should be the complete host, including http:// at the
69
- # start. When using the emulator, make sure to include your account name at
70
- # the end.
71
- #
72
- # Example:
73
- #
74
- # config.blob_host = "http://127.0.0.1:10000/devstoreaccount1"
75
- attr_writer :blob_host
76
-
77
- # Public: Get the host for this service. If you set something using #host=,
78
- # then we use that. Else we default to Windows Azure's default hosts, based
79
- # on your account name.
80
- def blob_host
81
- @blob_host || default_host(:blob)
82
- end
83
-
84
- # Public: Set the host for the Queue service. Only set this if you want
85
- # something custom (like, for example, to point this to a LocalStorage
86
- # emulator). This should be the complete host, including http:// at the
87
- # start. When using the emulator, make sure to include your account name at
88
- # the end.
89
- #
90
- # Example:
91
- #
92
- # config.queue_host = "http://127.0.0.1:10001/devstoreaccount1"
93
- attr_writer :queue_host
94
-
95
- # Public: Get the host for this service. If you set something using #host=,
96
- # then we use that. Else we default to Windows Azure's default hosts, based
97
- # on your account name.
98
- def queue_host
99
- @queue_host || default_host(:queue)
100
- end
101
-
102
- # Public: Get the host for the ACS service.
103
- def acs_host
104
- "https://#{acs_namespace}-sb.accesscontrol.windows.net"
105
- end
106
-
107
- # Public: Get the host for the Service Bus service.
108
- def service_bus_host
109
- "https://#{acs_namespace}.servicebus.windows.net"
110
- end
111
-
112
- # Calculate the default host for a given service in the cloud.
113
- #
114
- # service - One of :table, :blob, :queue, etc.
115
- #
116
- # Returns a String with the hostname, including your account name.
117
- def default_host(service)
118
- "http://#{account_name}.#{service}.core.windows.net"
119
- end
120
- end
121
- end
@@ -1,118 +0,0 @@
1
- require "delegate"
2
-
3
- module Azure
4
- module Core
5
- # A collection serves two functions: it is an array of models, and at the
6
- # same time serves as a proxy to certain services for the models in the
7
- # array.
8
- #
9
- # A Collection belongs to a "parent" object; for example, a collection
10
- # of mesages belongs to a queue.
11
- #
12
- # Examples
13
- #
14
- # # Get the collection
15
- # queue.messages
16
- #
17
- # # Create a new message
18
- # queue.messages.create("message text")
19
- #
20
- # # Fetch a single message
21
- # message = queue.messages["some-message-id"]
22
- #
23
- # # Work with the messages
24
- # queue.messages.each { |msg| ... }
25
- class Collection < DelegateClass(Array)
26
- include Azure::ErrorHandler
27
-
28
- # Public: Initialize the collection.
29
- #
30
- # parent - The object that owns this collection.
31
- # as - The name of the relationship between the collection's
32
- # items and the parent.
33
- # model_class - The class of the model this collection represents.
34
- # service - The service that implements remote calls.
35
- def initialize(parent, as, model_class, service)
36
- @parent = parent
37
- @as = as
38
- @model_class = model_class
39
- @service = service
40
- end
41
-
42
- # Public: Load the underlying collection from the server.
43
- #
44
- # Returns self.
45
- def load!
46
- collection = @service.all(@parent)
47
- collection.each { |el| set_parent(el) }
48
- __setobj__(collection)
49
- self
50
- end
51
-
52
- # Public: Create a new model in this collection.
53
- #
54
- # *args - Any arguments that the model's constructor takes.
55
- #
56
- # Yields the model before being created for modification.
57
- #
58
- # Returns an instance of the model.
59
- def create(*args, &block)
60
- model = @model_class.new(*args, &block)
61
- set_parent(model)
62
- @service.create(model)
63
- end
64
-
65
- # Public: Fetch a model by its identifier(s).
66
- #
67
- # *ids - The identifier(s) of the model.
68
- #
69
- # Returns an instance of the model when it's a valid identifier.
70
- # Returns nil when no model matches the identifier.
71
- def [](*ids)
72
- fetch(*ids) { nil }
73
- end
74
-
75
- # Public: Find a model by its identifier(s). If no model matches the
76
- # provided identifier(s), execute the given block, or raise ArgumentError.
77
- #
78
- # *ids - The identifier(s) of the model.
79
- #
80
- # Yields the error returned by the server in case the model wasn't found.
81
- #
82
- # Returns an instance of the model.
83
- # Raises ArgumentError if the model isn't found and no block is given.
84
- def fetch(*ids, &block)
85
- block ||= -> { raise ArgumentError, "can't find #{@model_class} identified by #{id.inspect}" }
86
- model = @service.fetch(@parent, *ids)
87
- model.valid? ? model : block.call(model.error)
88
- end
89
-
90
- # Internal: Get the underlying collection to which we delegate. If the
91
- # collection wasn't already loaded, it loads it from the server.
92
- #
93
- # Returns an Array.
94
- def __getobj__
95
- load! unless defined?(@__delegated_list)
96
- @__delegated_list
97
- end
98
-
99
- # Internal: Change the underlying collection to which we delegate.
100
- #
101
- # collection - An Array.
102
- #
103
- # Returns the collection.
104
- def __setobj__(collection)
105
- @__delegated_list = collection
106
- end
107
-
108
- # Internal: Change the parent object of the given model.
109
- #
110
- # object - A model in this collection.
111
- #
112
- # Returns the parent.
113
- def set_parent(object)
114
- object.send("#{@as}=", @parent)
115
- end
116
- end
117
- end
118
- end
@@ -1,32 +0,0 @@
1
- require "openssl"
2
- require "base64"
3
- require "azure/configuration"
4
-
5
- module Azure
6
- module Core
7
- # Public: Utility class to sign strings with HMAC-256 and then encode the
8
- # signed string using Base64.
9
- class Signer
10
- # The Azure account's access key.
11
- attr :access_key
12
-
13
- # Public: Initialize the Signer.
14
- #
15
- # access_key - The Azure access_key encoded in Base64. Defaults to the one
16
- # in the global configuration.
17
- def initialize(access_key=Azure.config.access_key)
18
- @access_key = Base64.strict_decode64(access_key)
19
- end
20
-
21
- # Public: Generate an HMAC signature.
22
- #
23
- # body - The string to sign.
24
- #
25
- # Returns a Base64 String signed with HMAC.
26
- def sign(body)
27
- signed = OpenSSL::HMAC.digest("sha256", access_key, body)
28
- Base64.strict_encode64(signed)
29
- end
30
- end
31
- end
32
- end
@@ -1,74 +0,0 @@
1
- require "uri"
2
-
3
- module Azure
4
- module Core
5
- module Utils
6
- # Convenience module to build query strings.
7
- module Queryable
8
- # Public: Build a query from a options hash.
9
- #
10
- # options - A hash of options.
11
- # :partition_key - Only get entities with this PartitionKey
12
- # (optional, but :row_key must also be
13
- # included).
14
- # :row_key - Only get entities with this RowKey
15
- # (optional, but :partition_key must also
16
- # be included).
17
- # :select - An array with property names. Only these
18
- # properties are provided from the
19
- # returned returned set of entities.
20
- # :filter - A string to filter results.
21
- # :top - Returns only the top n results from the set.
22
- # :skip - Skips the first n results from the set.
23
- #
24
- # Returns a query string
25
- def build_query(options)
26
- select = options.fetch(:select, nil)
27
- select = "$select=#{select.join(",")}" if select
28
-
29
- filter = options.fetch(:filter, nil)
30
- filter = "$filter=#{filter}" if filter
31
-
32
- top = options.fetch(:top, nil)
33
- top = "$top=#{top}" if top
34
-
35
- skip = options.fetch(:skip, nil)
36
- skip = "$skip=#{skip}" if skip
37
-
38
- next_partition_key = options.fetch("NextPartitionKey", nil)
39
- next_partition_key = "NextPartitionKey=#{next_partition_key}" if next_partition_key
40
-
41
- next_row_key = options.fetch("NextRowKey", nil)
42
- next_row_key = "NextRowKey=#{next_row_key}" if next_row_key
43
-
44
- next_table_name = options.fetch("NextTableName", nil)
45
- next_table_name = "NextTableName=#{next_table_name}" if next_table_name
46
-
47
- query = [next_table_name, next_partition_key, next_row_key,
48
- select, filter, top, skip].compact.join("&")
49
-
50
- query != "" ? ::URI.encode(query) : nil
51
- end
52
-
53
- # Public: Build a Hash with translated keys from a options hash.
54
- #
55
- # options - A hash of options.
56
- # :top - Returns only the top n results from the set.
57
- # :skip - Skips the first n results from the set.
58
- #
59
- # Returns a query string
60
- def translate_options_hash(options)
61
- hash = {}
62
-
63
- skip = options.fetch(:skip, nil)
64
- hash["$skip"] = skip if skip
65
-
66
- top = options.fetch(:top, nil)
67
- hash["$top"] = top if top
68
-
69
- hash
70
- end
71
- end
72
- end
73
- end
74
- end
@@ -1,83 +0,0 @@
1
- require 'nokogiri'
2
-
3
- module Azure
4
- module Core
5
- module Utils
6
- class StorageServiceProperties
7
-
8
- REQUIRED_ELEMENTS = {
9
- "Version" => true,
10
- "Delete" => true,
11
- "Read" => true,
12
- "Write" => true,
13
- "Enabled" => true,
14
- "RetentionPolicy / Enabled" => true,
15
- "RetentionPolicy / Days" => true,
16
- "IncludeAPIs" => "Metrics"
17
- }
18
-
19
- def self.hash_to_xml(hash)
20
- doc = Nokogiri::XML::Document.new
21
- doc.encoding = "utf-8"
22
- root = Nokogiri::XML::Node.new("StorageServiceProperties", doc)
23
- iterate_hash(hash, root, doc)
24
- doc << root
25
- validate(doc)
26
- doc
27
- end
28
-
29
- def self.hash_to_xml_string(hash)
30
- hash_to_xml(hash).to_xml
31
- end
32
-
33
- def self.xml_string_to_hash(xml)
34
- doc = Nokogiri::XML.parse(xml)
35
- iterate_node(doc)["StorageServiceProperties"]
36
- end
37
-
38
- private
39
-
40
- def self.iterate_node(node)
41
- node.children.each_with_object({}) do |node, hash|
42
-
43
- next if !node.element?
44
-
45
- if node.children.size == 1
46
- hash[node.name] = node.text
47
- else
48
- hash[node.name] = iterate_node(node)
49
- end
50
- end
51
- end
52
-
53
- def self.iterate_hash(hash, root, doc)
54
- hash.each do |key, value|
55
- if value.is_a?(Hash)
56
- node = Nokogiri::XML::Node.new(key, doc)
57
- iterate_hash(value, node, doc)
58
- root << node
59
- else
60
- node = Nokogiri::XML::Node.new(key, doc)
61
- node.content = value
62
- root << node
63
- end
64
- end
65
- end
66
-
67
- def self.validate(doc)
68
- missing_keys = []
69
-
70
- REQUIRED_ELEMENTS.each do |key,value|
71
- if value == true
72
- missing_keys << key if (doc / key).empty?
73
- elsif (doc / value).empty? || (doc / key).empty?
74
- missing_keys << key
75
- end
76
- end
77
-
78
- raise StandardError, "StorageServicePropertiesMissing", missing_keys if !missing_keys.empty?
79
- end
80
- end
81
- end
82
- end
83
- end