azure 0.0.0 → 0.1.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 (212) hide show
  1. data/Gemfile +3 -0
  2. data/Gemfile.lock +36 -0
  3. data/README.md +3 -0
  4. data/Rakefile +81 -0
  5. data/azure.gemspec +20 -9
  6. data/lib/azure.rb +4 -0
  7. data/lib/azure/atom.rb +170 -0
  8. data/lib/azure/auth.rb +29 -0
  9. data/lib/azure/blobs.rb +620 -0
  10. data/lib/azure/blobs/blob.rb +360 -0
  11. data/lib/azure/blobs/container.rb +209 -0
  12. data/lib/azure/blobs/service.rb +396 -0
  13. data/lib/azure/blobs/shared_access_signature.rb +84 -0
  14. data/lib/azure/blobs/uri.rb +60 -0
  15. data/lib/azure/configuration.rb +121 -0
  16. data/lib/azure/core/auth/shared_key.rb +95 -0
  17. data/lib/azure/core/auth/shared_key_lite.rb +34 -0
  18. data/lib/azure/core/collection.rb +118 -0
  19. data/lib/azure/core/service.rb +43 -0
  20. data/lib/azure/core/signer.rb +32 -0
  21. data/lib/azure/core/utils/interval.rb +97 -0
  22. data/lib/azure/core/utils/queryable.rb +74 -0
  23. data/lib/azure/core/utils/storage_service_properties.rb +83 -0
  24. data/lib/azure/core/utils/string.rb +59 -0
  25. data/lib/azure/error.rb +72 -0
  26. data/lib/azure/queues.rb +272 -0
  27. data/lib/azure/queues/message.rb +174 -0
  28. data/lib/azure/queues/queue.rb +187 -0
  29. data/lib/azure/queues/service.rb +263 -0
  30. data/lib/azure/queues/service_properties.rb +152 -0
  31. data/lib/azure/queues/uri.rb +78 -0
  32. data/lib/azure/request.rb +102 -0
  33. data/lib/azure/response.rb +93 -0
  34. data/lib/azure/service_bus.rb +4 -0
  35. data/lib/azure/service_bus/auth/authorizer.rb +22 -0
  36. data/lib/azure/service_bus/auth/uri.rb +52 -0
  37. data/lib/azure/service_bus/auth/wrap.rb +37 -0
  38. data/lib/azure/service_bus/auth/wrap_service.rb +76 -0
  39. data/lib/azure/service_bus/auth/wrap_token.rb +45 -0
  40. data/lib/azure/service_bus/auth/wrap_token_manager.rb +46 -0
  41. data/lib/azure/service_bus/brokered_message.rb +139 -0
  42. data/lib/azure/service_bus/brokered_message_serializer.rb +113 -0
  43. data/lib/azure/service_bus/queues.rb +194 -0
  44. data/lib/azure/service_bus/queues/queue.rb +100 -0
  45. data/lib/azure/service_bus/queues/queue_serializer.rb +51 -0
  46. data/lib/azure/service_bus/queues/service.rb +154 -0
  47. data/lib/azure/service_bus/queues/uri.rb +80 -0
  48. data/lib/azure/service_bus/rules.rb +110 -0
  49. data/lib/azure/service_bus/rules/rule.rb +97 -0
  50. data/lib/azure/service_bus/rules/service.rb +122 -0
  51. data/lib/azure/service_bus/rules/uri.rb +39 -0
  52. data/lib/azure/service_bus/service_bus_service.rb +22 -0
  53. data/lib/azure/service_bus/subscriptions.rb +170 -0
  54. data/lib/azure/service_bus/subscriptions/service.rb +133 -0
  55. data/lib/azure/service_bus/subscriptions/subscription.rb +164 -0
  56. data/lib/azure/service_bus/subscriptions/subscription_serializer.rb +74 -0
  57. data/lib/azure/service_bus/subscriptions/uri.rb +71 -0
  58. data/lib/azure/service_bus/topics.rb +120 -0
  59. data/lib/azure/service_bus/topics/service.rb +98 -0
  60. data/lib/azure/service_bus/topics/topic.rb +122 -0
  61. data/lib/azure/service_bus/topics/topic_serializer.rb +44 -0
  62. data/lib/azure/service_bus/topics/uri.rb +58 -0
  63. data/lib/azure/service_runtime/client/goal_state_pipe_monitor.rb +21 -0
  64. data/lib/azure/service_runtime/client/goal_state_protocol.rb +18 -0
  65. data/lib/azure/service_runtime/client/runtime_client.rb +135 -0
  66. data/lib/azure/service_runtime/deployment.rb +24 -0
  67. data/lib/azure/service_runtime/local_resource.rb +15 -0
  68. data/lib/azure/service_runtime/role.rb +17 -0
  69. data/lib/azure/service_runtime/role_environment.rb +206 -0
  70. data/lib/azure/service_runtime/role_environment_change.rb +32 -0
  71. data/lib/azure/service_runtime/role_instance.rb +35 -0
  72. data/lib/azure/service_runtime/role_instance_endpoint.rb +14 -0
  73. data/lib/azure/tables.rb +215 -0
  74. data/lib/azure/tables/auth/shared_key.rb +71 -0
  75. data/lib/azure/tables/auth/shared_key_lite.rb +30 -0
  76. data/lib/azure/tables/entities_collection.rb +66 -0
  77. data/lib/azure/tables/entity.rb +127 -0
  78. data/lib/azure/tables/service.rb +211 -0
  79. data/lib/azure/tables/table.rb +129 -0
  80. data/lib/azure/tables/tables_collection.rb +62 -0
  81. data/lib/azure/tables/types.rb +65 -0
  82. data/lib/azure/tables/uri.rb +62 -0
  83. data/test/fixtures/32px-fulls-black.jpg +0 -0
  84. data/test/fixtures/all_containers.xml +20 -0
  85. data/test/fixtures/all_tables.xml +22 -0
  86. data/test/fixtures/create_table_response_entry.xml +15 -0
  87. data/test/fixtures/error.xml +5 -0
  88. data/test/fixtures/insert_entity_response_entry.xml +25 -0
  89. data/test/fixtures/messages.xml +12 -0
  90. data/test/fixtures/query_entities_empty_response.xml +7 -0
  91. data/test/fixtures/query_entities_response.xml +45 -0
  92. data/test/fixtures/queue_service_properties.xml +22 -0
  93. data/test/fixtures/queue_service_properties_original.xml +19 -0
  94. data/test/fixtures/queues.xml +16 -0
  95. data/test/fixtures/sb_default_create_queue_response.xml +23 -0
  96. data/test/fixtures/sb_default_create_topic_response.xml +18 -0
  97. data/test/fixtures/sb_get_access_token_response.txt +1 -0
  98. data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -0
  99. data/test/integration/blobs/auth_test.rb +19 -0
  100. data/test/integration/blobs/blob_test.rb +61 -0
  101. data/test/integration/blobs/clear_page_range_test.rb +19 -0
  102. data/test/integration/blobs/copy_test.rb +33 -0
  103. data/test/integration/blobs/create_blobs_test.rb +51 -0
  104. data/test/integration/blobs/create_container_test.rb +13 -0
  105. data/test/integration/blobs/create_snapshot_test.rb +17 -0
  106. data/test/integration/blobs/delete_blob_snapshots_test.rb +19 -0
  107. data/test/integration/blobs/delete_blobs_test.rb +25 -0
  108. data/test/integration/blobs/delete_container_test.rb +24 -0
  109. data/test/integration/blobs/delete_snapshot_test.rb +17 -0
  110. data/test/integration/blobs/get_blob_snapshot_test.rb +18 -0
  111. data/test/integration/blobs/get_blobs_test.rb +31 -0
  112. data/test/integration/blobs/get_page_range_test.rb +19 -0
  113. data/test/integration/blobs/list_blobs_test.rb +39 -0
  114. data/test/integration/blobs/list_containers_test.rb +28 -0
  115. data/test/integration/blobs/manage_blob_leases_test.rb +45 -0
  116. data/test/integration/blobs/manage_blob_metadata_test.rb +51 -0
  117. data/test/integration/blobs/manage_blob_properties_test.rb +25 -0
  118. data/test/integration/blobs/manage_blob_service_properties_test.rb +38 -0
  119. data/test/integration/blobs/manage_container_metadata_test.rb +46 -0
  120. data/test/integration/blobs/manage_container_permissions_test.rb +17 -0
  121. data/test/integration/blobs/update_page_range_test.rb +20 -0
  122. data/test/integration/queues/clear_messages_test.rb +22 -0
  123. data/test/integration/queues/create_queue_test.rb +13 -0
  124. data/test/integration/queues/delete_message_test.rb +42 -0
  125. data/test/integration/queues/delete_queue_test.rb +24 -0
  126. data/test/integration/queues/get_messages_test.rb +39 -0
  127. data/test/integration/queues/list_queues_test.rb +43 -0
  128. data/test/integration/queues/manage_queue_metadata_test.rb +45 -0
  129. data/test/integration/queues/manage_queue_service_properties_test.rb +27 -0
  130. data/test/integration/queues/peek_messages_test.rb +55 -0
  131. data/test/integration/queues/put_message_test.rb +31 -0
  132. data/test/integration/queues/update_message_test.rb +46 -0
  133. data/test/integration/service_bus/auth_test.rb +18 -0
  134. data/test/integration/service_bus/queues/create_queue_test.rb +25 -0
  135. data/test/integration/service_bus/queues/delete_message_from_queue_test.rb +29 -0
  136. data/test/integration/service_bus/queues/delete_queue_test.rb +25 -0
  137. data/test/integration/service_bus/queues/get_queue_test.rb +23 -0
  138. data/test/integration/service_bus/queues/list_queues_test.rb +39 -0
  139. data/test/integration/service_bus/queues/peek_message_from_queue_test.rb +34 -0
  140. data/test/integration/service_bus/queues/read_and_delete_message_from_queue_test.rb +31 -0
  141. data/test/integration/service_bus/queues/send_message_to_queue_test.rb +22 -0
  142. data/test/integration/service_bus/queues/unlock_message_from_queue_test.rb +36 -0
  143. data/test/integration/service_bus/rules/create_rule_test.rb +19 -0
  144. data/test/integration/service_bus/rules/delete_rule_test.rb +17 -0
  145. data/test/integration/service_bus/rules/get_rule_test.rb +21 -0
  146. data/test/integration/service_bus/rules/list_rules_test.rb +24 -0
  147. data/test/integration/service_bus/rules/rule_test.rb +16 -0
  148. data/test/integration/service_bus/subscriptions/create_subscription_test.rb +25 -0
  149. data/test/integration/service_bus/subscriptions/delete_message_from_subscription_test.rb +31 -0
  150. data/test/integration/service_bus/subscriptions/delete_subscription_test.rb +30 -0
  151. data/test/integration/service_bus/subscriptions/fetch_subscription_test.rb +28 -0
  152. data/test/integration/service_bus/subscriptions/list_subscriptions_test.rb +23 -0
  153. data/test/integration/service_bus/subscriptions/peek_lock_message_from_subscription_test.rb +42 -0
  154. data/test/integration/service_bus/subscriptions/read_delete_message_from_subscription_test.rb +36 -0
  155. data/test/integration/service_bus/subscriptions/subscription_test.rb +31 -0
  156. data/test/integration/service_bus/subscriptions/unlock_message_from_subscription_test.rb +43 -0
  157. data/test/integration/service_bus/topics/create_topic_test.rb +25 -0
  158. data/test/integration/service_bus/topics/delete_topic_test.rb +25 -0
  159. data/test/integration/service_bus/topics/get_topic_test.rb +23 -0
  160. data/test/integration/service_bus/topics/list_topics_test.rb +39 -0
  161. data/test/integration/service_bus/topics/send_message_to_topic_test.rb +23 -0
  162. data/test/integration/tables/auth_test.rb +29 -0
  163. data/test/integration/tables/creating_tables_test.rb +16 -0
  164. data/test/integration/tables/delete_entity_test.rb +39 -0
  165. data/test/integration/tables/deleting_table_test.rb +22 -0
  166. data/test/integration/tables/insert_entity_test.rb +23 -0
  167. data/test/integration/tables/merge_entity_test.rb +28 -0
  168. data/test/integration/tables/query_entities_test.rb +131 -0
  169. data/test/integration/tables/query_tables_test.rb +63 -0
  170. data/test/integration/tables/update_entity_test.rb +54 -0
  171. data/test/integration/test_helper.rb +14 -0
  172. data/test/support/blobs.rb +12 -0
  173. data/test/support/env.rb +5 -0
  174. data/test/support/fixtures.rb +22 -0
  175. data/test/support/stubs.rb +28 -0
  176. data/test/support/table_names.rb +44 -0
  177. data/test/test_helper.rb +10 -0
  178. data/test/unit/atom_test.rb +58 -0
  179. data/test/unit/auth_test.rb +24 -0
  180. data/test/unit/blobs/blob_test.rb +5 -0
  181. data/test/unit/blobs/container_test.rb +67 -0
  182. data/test/unit/blobs/service_test.rb +17 -0
  183. data/test/unit/blobs/shared_access_signature_test.rb +66 -0
  184. data/test/unit/blobs_test.rb +156 -0
  185. data/test/unit/core/service_test.rb +57 -0
  186. data/test/unit/core/utils/interval_test.rb +70 -0
  187. data/test/unit/core/utils/queryable_test.rb +69 -0
  188. data/test/unit/core/utils/storage_service_properties_test.rb +66 -0
  189. data/test/unit/error_test.rb +39 -0
  190. data/test/unit/queues/message_test.rb +40 -0
  191. data/test/unit/queues/queue_test.rb +64 -0
  192. data/test/unit/queues/service_properties.rb +35 -0
  193. data/test/unit/request_test.rb +38 -0
  194. data/test/unit/response_test.rb +43 -0
  195. data/test/unit/service_bus/auth/authorizer_test.rb +27 -0
  196. data/test/unit/service_bus/auth/wrap_token_test.rb +28 -0
  197. data/test/unit/service_bus/queues/queue_test.rb +38 -0
  198. data/test/unit/service_bus/topics/topic_test.rb +33 -0
  199. data/test/unit/service_runtime/data/goalstate.xml +9 -0
  200. data/test/unit/service_runtime/data/roleenvironmentdata.xml +29 -0
  201. data/test/unit/service_runtime/data/runtime.xml +6 -0
  202. data/test/unit/service_runtime/role_environment_test.rb +144 -0
  203. data/test/unit/tables/auth/shared_key_lite_test.rb +39 -0
  204. data/test/unit/tables/auth/shared_key_test.rb +45 -0
  205. data/test/unit/tables/entities_collection_test.rb +39 -0
  206. data/test/unit/tables/entity_test.rb +72 -0
  207. data/test/unit/tables/table_test.rb +57 -0
  208. data/test/unit/tables_test.rb +302 -0
  209. data/test/unit/types_test.rb +67 -0
  210. metadata +310 -47
  211. data/LICENSE +0 -0
  212. data/README +0 -0
@@ -0,0 +1,22 @@
1
+ require "azure/core/service"
2
+
3
+ module Azure
4
+ module ServiceBus
5
+ class ServiceBusService < Core::Service
6
+ def initialize(signer=Azure::ServiceBus::Auth::Wrap.new)
7
+ super(signer, Azure::ServiceBus::Auth::Authorizer.new)
8
+ end
9
+
10
+ def call(method, uri, body=nil)
11
+ super(method, uri, body) do |request|
12
+ request.headers.delete("x-ms-date")
13
+ request.headers.delete("x-ms-version")
14
+ request.headers.delete("DataServiceVersion")
15
+ request.headers.delete("MaxDataServiceVersion")
16
+
17
+ yield request if block_given?
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,170 @@
1
+ require "nokogiri"
2
+ require "azure/service_bus/subscriptions/service"
3
+ require "azure/service_bus/subscriptions/subscription"
4
+ require "azure/service_bus/subscriptions/subscription_serializer"
5
+
6
+ module Azure
7
+ module ServiceBus
8
+ module Subscriptions
9
+ # Public: Try to create a new subscription. If the operation is
10
+ # unsuccessful the resulting Subscription object will be invalidated and
11
+ # the error will be accessible through the #error method.
12
+ #
13
+ # subscription - A Subscription.
14
+ # service - The backend service to implement this (optional).
15
+ #
16
+ # Returns a Subscription.
17
+ def self.create(subscription, service=Services::Create.new)
18
+ response = service.call(
19
+ subscription.topic.name,
20
+ subscription.name,
21
+ SubscriptionSerializer.new(subscription).to_xml
22
+ )
23
+
24
+ if response.success?
25
+ SubscriptionSerializer.parse(response.body) do |sub|
26
+ sub.topic = subscription.topic
27
+ end
28
+ else
29
+ subscription.error = response.error
30
+ end
31
+ end
32
+
33
+ # Public: Get a list of subscriptions from the server.
34
+ #
35
+ # topic - A Topic.
36
+ # service - The backend service to implement this (optional).
37
+ #
38
+ # Returns an Array of Subscriptions.
39
+ def self.all(topic, service=Services::List.new)
40
+ response = service.call(topic.name)
41
+
42
+ # FIXME: handle errors!
43
+ feed = Nokogiri::XML(response.body)
44
+ (feed / "entry").map do |entry|
45
+ SubscriptionSerializer.parse(entry.to_xml)
46
+ end
47
+ end
48
+
49
+ # Public: Find a new subscription by name. The resulting subscription will
50
+ # be invalid if no subscription could be found.
51
+ #
52
+ # topic - A Topic.
53
+ # name - The name of the subscription.
54
+ # service - The backend service to implement this (optional).
55
+ #
56
+ # Returns a Subscription.
57
+ def self.fetch(topic, name, service=Services::Fetch.new)
58
+ response = service.call(topic.name, name)
59
+
60
+ if response.success?
61
+ SubscriptionSerializer.parse(response.body)
62
+ else
63
+ Subscription.from_error(response.error)
64
+ end
65
+ end
66
+
67
+ # Public: Delete the subscription from the remote service. If the
68
+ # operation is successful, this subscription is frozen. If not, it's
69
+ # invalidated.
70
+ #
71
+ # subscription - A Subscription.
72
+ # service - The backend service to implement this (optional).
73
+ #
74
+ # Returns true|false to indicate success.
75
+ def self.delete(subscription, service=Services::Delete.new)
76
+ response = service.call(subscription.topic.name, subscription.name)
77
+
78
+ if response.success?
79
+ subscription.freeze
80
+ else
81
+ subscription.error = response.error
82
+ end
83
+
84
+ response.success?
85
+ end
86
+
87
+ ## Messages
88
+
89
+ # Public: Atomically retrieves and locks a message from a subscription for processing.
90
+ #
91
+ # See: http://msdn.microsoft.com/en-us/library/windowsazure/hh780722
92
+ #
93
+ # subscription - The subscription
94
+ # options - A Hash of options for this operation (optional):
95
+ # :timeout - An integer representing the request's timeout in seconds
96
+ # service - The backend service to implement this (optional).
97
+ #
98
+ # Returns a BrokeredMeassege.
99
+ def self.peek_lock_message_from_subscription(subscription,
100
+ options={},
101
+ service=Azure::ServiceBus::Subscriptions::Services::PeekLockMessageFromSubscription.new)
102
+ response = service.call(subscription.topic.name, subscription.name, options)
103
+
104
+ if response.code == 201
105
+ BrokeredMessageSerializer.get_from_http_response(response)
106
+ elsif response.code == 204
107
+ msg = "No messages available within the specified timeout period."
108
+ BrokeredMessage.from_error(Azure::Error.new(msg))
109
+ else
110
+ BrokeredMessage.from_error(response.error)
111
+ end
112
+ end
113
+
114
+ # Public: This operation is used to unlock a message for processing by other receivers on a given subscription.
115
+ # This operation deletes the lock object, causing the message to be unlocked.
116
+ # A message must have first been locked by a receiver before this operation is called.
117
+ #
118
+ # See: http://msdn.microsoft.com/en-us/library/windowsazure/hh780737
119
+ #
120
+ # subscription - The subscription
121
+ # message - The message to be unlocked
122
+ # service - The backend service to implement this (optional).
123
+ #
124
+ # Returns true|false to indicate success.
125
+ def self.unlock_message_from_subscription(subscription, message, service=Azure::ServiceBus::Subscriptions::Services::UnlockMessageFromSubscription.new)
126
+ response = service.call(subscription.topic.name, subscription.name, message.sequence_number, message.lock_token)
127
+
128
+ response.success?
129
+ end
130
+
131
+ # Public: Reads and deletes a message from a subscription as an atomic operation.
132
+ #
133
+ # See: http://msdn.microsoft.com/en-us/library/windowsazure/hh780770
134
+ #
135
+ # subscription - The subscription
136
+ # options - A Hash of options for this operation (optional):
137
+ # :timeout - An integer representing the request's timeout in seconds
138
+ # service - The backend service to implement this (optional).
139
+ #
140
+ # Returns a BrokeredMeassege.
141
+ def self.read_delete_message_from_subscription(subscription, options={}, service=Azure::ServiceBus::Subscriptions::Services::ReadDeleteMessageFromSubscription.new)
142
+ response = service.call(subscription.topic.name, subscription.name, options)
143
+
144
+ if response.code == 200
145
+ BrokeredMessageSerializer.get_from_http_response(response)
146
+ elsif response.code == 204
147
+ msg = "No messages available within the specified timeout period."
148
+ BrokeredMessage.from_error(Azure::Error.new(msg))
149
+ else
150
+ BrokeredMessage.from_error(response.error)
151
+ end
152
+ end
153
+
154
+ # Public: Deletes a message from a subscription.
155
+ #
156
+ # See: http://msdn.microsoft.com/en-us/library/windowsazure/hh780768
157
+ #
158
+ # subscription - The message subscription
159
+ # message - The message to be deleted
160
+ # service - The backend service to implement this (optional).
161
+ #
162
+ # Returns true|false to indicate success.
163
+ def self.delete_message_from_subscription(subscription, message, service=Azure::ServiceBus::Subscriptions::Services::DeleteMessageFromSubscription.new)
164
+ response = service.call(subscription.topic.name, subscription.name, message.sequence_number, message.lock_token)
165
+
166
+ response.success?
167
+ end
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,133 @@
1
+ require "azure/core/service"
2
+ require "azure/service_bus/auth/wrap"
3
+ require "azure/service_bus/auth/authorizer"
4
+ require "azure/service_bus/subscriptions/uri"
5
+ require "azure/service_bus/service_bus_service"
6
+
7
+ module Azure
8
+ module ServiceBus
9
+ module Subscriptions
10
+ class Service < Core::Service
11
+ def initialize(signer=Azure::ServiceBus::Auth::Wrap.new)
12
+ super(signer, Azure::ServiceBus::Auth::Authorizer.new)
13
+ end
14
+ end
15
+
16
+ module Services
17
+ class Create < Service
18
+ # Public: Invoke the service.
19
+ #
20
+ # topic_name - The name of the subscription's topic.
21
+ # name - The name of the subscription name.
22
+ # body - The SubscriptionDescription XML serialization.
23
+ #
24
+ # Returns a Response.
25
+ def call(topic_name, name, body)
26
+ uri = Subscriptions::URI.subscription(topic_name, name)
27
+ super(:put, uri, body)
28
+ end
29
+ end
30
+
31
+ class List < Service
32
+ # Public: Invoke the service.
33
+ #
34
+ # topic_name - The name of the subscriptions' topic.
35
+ #
36
+ # Returns a Response.
37
+ def call(topic_name)
38
+ uri = Subscriptions::URI.collection(topic_name)
39
+ super(:get, uri)
40
+ end
41
+ end
42
+
43
+ class Fetch < Service
44
+ # Public: Invoke the service.
45
+ #
46
+ # topic_name - The name of the subscription's topic.
47
+ # name - The name of the subscription name.
48
+ #
49
+ # Returns a Response.
50
+ def call(topic_name, name)
51
+ uri = Subscriptions::URI.subscription(topic_name, name)
52
+ super(:get, uri)
53
+ end
54
+ end
55
+
56
+ class Delete < Service
57
+ # Public: Invoke the service.
58
+ #
59
+ # topic_name - The name of the subscription's topic.
60
+ # name - The name of the subscription name.
61
+ #
62
+ # Returns a Response.
63
+ def call(topic_name, name)
64
+ uri = Subscriptions::URI.subscription(topic_name, name)
65
+ super(:delete, uri)
66
+ end
67
+ end
68
+
69
+ ## Messages
70
+
71
+ # Public: Peek-lock message from a Subscription
72
+ class PeekLockMessageFromSubscription < ServiceBusService
73
+ # Public: Invoke the service.
74
+ #
75
+ # topic_name - A String with the topic name
76
+ # subscription_name - A String with the subscription name
77
+ # options - Options for this query (default: {}):
78
+ # :timeout - Integer: request's timeout in seconds
79
+ #
80
+ # Returns a Response.
81
+ def call(topic_name, subscription_name, options={})
82
+ super(:post, URI.messages_head(topic_name, subscription_name, options))
83
+ end
84
+ end
85
+
86
+ # Public: Unlocks a message from a Subscription
87
+ class UnlockMessageFromSubscription < Service
88
+ # Public: Invoke the service.
89
+ #
90
+ # topic_name - A String with the topic name
91
+ # subscription_name - A String with the subscription name
92
+ # seq_number - A String with the message's sequence_number
93
+ # lock_token - A String with the message's lock_token
94
+ #
95
+ # Returns a Response.
96
+ def call(topic_name, subscription_name, seq_number, lock_token)
97
+ super(:put, URI.message(topic_name, subscription_name, seq_number, lock_token))
98
+ end
99
+ end
100
+
101
+ # Public: Reads and Deletes a message from a Subscription
102
+ class ReadDeleteMessageFromSubscription < Service
103
+ # Public: Invoke the service.
104
+ #
105
+ # topic_name - A String with the topic name
106
+ # subscription_name - A String with the subscription name
107
+ # options - Options for this query (default: {}):
108
+ # :timeout - Integer: request's timeout in seconds
109
+ #
110
+ # Returns a Response.
111
+ def call(topic_name, subscription_name, options={})
112
+ super(:delete, URI.messages_head(topic_name, subscription_name, options))
113
+ end
114
+ end
115
+
116
+ # Public: Deletes a message from a Subscription
117
+ class DeleteMessageFromSubscription < Service
118
+ # Public: Invoke the service.
119
+ #
120
+ # topic_name - A String with the topic name
121
+ # subscription_name - A String with the subscription name
122
+ # seq_number - A String with the message's sequence_number
123
+ # lock_token - A String with the message's lock_token
124
+ #
125
+ # Returns a Response.
126
+ def call(topic_name, subscription_name, seq_number, lock_token)
127
+ super(:delete, URI.message(topic_name, subscription_name, seq_number, lock_token))
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,164 @@
1
+ require "azure/error"
2
+ require "azure/service_bus/subscriptions"
3
+ require "azure/service_bus/rules"
4
+ require "azure/core/utils/interval"
5
+
6
+ module Azure
7
+ module ServiceBus
8
+ module Subscriptions
9
+ # Public: A Subscription to a Topic.
10
+ #
11
+ # See http://msdn.microsoft.com/en-us/library/windowsazure/hh780763
12
+ class Subscription
13
+ include Azure::ErrorHandler
14
+
15
+ # Public: Get the String name of this subscription.
16
+ attr :name
17
+
18
+ # Public: Get/Set the Topic of this subscription.
19
+ attr_accessor :topic
20
+
21
+ # Public: Whether the subscription requires a session. This is always
22
+ # false since session-aware subscriptions are not allowed through the
23
+ # REST API.
24
+ attr_reader :requires_session
25
+
26
+ # Public: Whether to put messages in the dead-letter queue after its
27
+ # TTL expires. Can be true|false.
28
+ attr_accessor :keep_expired
29
+
30
+ # Public: Whether to put messages in the dead-letter queue when the
31
+ # message causes an exception during a subscription's filter
32
+ # evaluation. Can be true|false.
33
+ attr_accessor :keep_on_errors
34
+
35
+ # Public: Initialize a Subscription from an Error.
36
+ #
37
+ # error - An Azure::Error.
38
+ #
39
+ # Returns an invalid Subscription.
40
+ def self.from_error(error)
41
+ new(nil) { |sub| sub.error = error }
42
+ end
43
+
44
+ # Public: Initialize the Subscription.
45
+ #
46
+ # name - A String with the subscription's name.
47
+ # service - Backend service to delegate remote calls (optional).
48
+ def initialize(name, service=Azure::ServiceBus::Subscriptions)
49
+ @name = name
50
+ @requires_session = false
51
+ @default_ttl = nil
52
+ @lock_duration = nil
53
+ @service = service
54
+ yield self if block_given?
55
+ end
56
+
57
+ # Public: Set the time to live of a message in the subscription.
58
+ #
59
+ # interval - An Interval, or anything that can be converted into one.
60
+ #
61
+ # Returns an Interval or nil.
62
+ def default_ttl=(interval)
63
+ @default_ttl = Core::Utils::Interval.try_convert(interval)
64
+ end
65
+
66
+ # Public: Get the time to live of a message in the subscription in
67
+ # seconds.
68
+ #
69
+ # Returns an Interval or nil.
70
+ def default_ttl
71
+ Core::Utils::Interval.try_convert(@default_ttl)
72
+ end
73
+
74
+ # Public: Duration of the lock in seconds.
75
+ #
76
+ # Returns an Interval or nil.
77
+ def lock_duration
78
+ Core::Utils::Interval.try_convert(@lock_duration)
79
+ end
80
+
81
+ # Public: Set the duration of the lock in seconds. Can go from 0
82
+ # (unlocked) to 5 minutes.
83
+ #
84
+ # interval - An Interval, or anything that can be converted into one.
85
+ #
86
+ # Returns an Interval or nil.
87
+ def lock_duration=(interval)
88
+ @lock_duration = Core::Utils::Interval.try_convert(interval)
89
+ end
90
+
91
+ # Public: Two subscriptions are the same if they belong to the same
92
+ # topic and have the same name.
93
+ #
94
+ # other - A Subscription.
95
+ #
96
+ # Returns true|false.
97
+ def ==(other)
98
+ !topic.nil? && topic == other.topic && name == other.name
99
+ end
100
+
101
+ # Public: Delete the subscription from the remote service. If the
102
+ # operation is successful, this subscription is frozen. If not, it's
103
+ # invalidated.
104
+ #
105
+ # Returns true|false to indicate success.
106
+ def delete
107
+ @service.delete(self)
108
+ end
109
+
110
+ # Public: Creates a new Rule for this Subscription.
111
+ #
112
+ # name - String representing the name of the new rule.
113
+ # filter - A Hash representing `filter` option.
114
+ #
115
+ # Example:
116
+ #
117
+ # {"SqlFilterExpression" => {
118
+ # "SqlExpression" => "MyProperty='XYZ'"
119
+ # }}
120
+ #
121
+ # Becomes:
122
+ #
123
+ # <Filter i:type="SqlFilterExpression">
124
+ # <SqlExpression>MyProperty='XYZ'</SqlExpression>
125
+ # </Filter>
126
+ #
127
+ # action - A Hash representing `action` option.
128
+ #
129
+ # Example:
130
+ #
131
+ # {"SqlFilterAction" => {
132
+ # "SqlExpression" => "set MyProperty2 = 'ABC'"
133
+ # }}
134
+ #
135
+ # Becomes:
136
+ #
137
+ # <Action i:type="SqlFilterAction">
138
+ # <SqlExpression>set MyProperty2 = 'ABC'</SqlExpression>
139
+ # </Action>
140
+ #
141
+ # Returns an instance of ServiceBus::Rules::Rule.
142
+ def create_rule(name, filter=nil, action=nil, service=Azure::ServiceBus::Rules)
143
+ service.create(self, name, filter, action)
144
+ end
145
+
146
+ # Public: Get a list of Rules for this Subscription.
147
+ #
148
+ # Returns an Array of Rules.
149
+ def get_rules(service=Azure::ServiceBus::Rules)
150
+ service.all(self)
151
+ end
152
+
153
+ # Public: Get a Rule by name.
154
+ #
155
+ # name - String representing the name of the Rule.
156
+ #
157
+ # Returns an instance of Rules::Rule.
158
+ def get_rule(name, service=Azure::ServiceBus::Rules)
159
+ service.get(self, name)
160
+ end
161
+ end
162
+ end
163
+ end
164
+ end