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,194 @@
1
+ require "nokogiri"
2
+ require "azure/service_bus/queues/queue"
3
+ require "azure/service_bus/queues/queue_serializer"
4
+ require "azure/service_bus/brokered_message"
5
+ require "azure/service_bus/brokered_message_serializer"
6
+ require "azure/service_bus/queues/service"
7
+
8
+ module Azure
9
+ module ServiceBus
10
+ module Queues
11
+ # Public: Try to create a new queue. If the operation is unsuccessful,
12
+ # the resulting Queue object will have the error accessible through the
13
+ # #error method.
14
+ #
15
+ # name - The name of the queue.
16
+ # properties - Properties hash describing this queue (optional, default: {}).
17
+ # service - The backend service to implement this (optional).
18
+ #
19
+ # Returns a Queue.
20
+ def self.create(name, props={}, service=Services::Create.new)
21
+ serializer = QueueSerializer.new(props)
22
+ xml = serializer.to_xml
23
+ response = service.call(name, xml)
24
+
25
+ if response.success?
26
+ node = Nokogiri::XML(response.body)
27
+ Queue.from_node(node)
28
+ else
29
+ Queue.from_error(response.error)
30
+ end
31
+ end
32
+
33
+ # Public: Delete a Queue from the server. If the delete operation fails,
34
+ # the queue is invalidated. Otherwise it's frozen.
35
+ #
36
+ # queue - An Azure::ServiceBus::Queue.
37
+ # service - The backend service to implement this (optional).
38
+ #
39
+ # Returns true|false to indicate success.
40
+ def self.delete(queue, service=Services::Delete.new)
41
+ response = service.call(queue.name)
42
+
43
+ if response.success?
44
+ queue.freeze
45
+ else
46
+ queue.error = response.error
47
+ end
48
+
49
+ response.success?
50
+ end
51
+
52
+ # Public: Get a queue by name. If the operation fails,
53
+ # the resulting Queue object will have the error accessible through the
54
+ # #error method.
55
+ #
56
+ # service - The backend service to implement this (optional).
57
+ #
58
+ # Returns a Queue
59
+ def self.get(queue_name, service=Services::Get.new)
60
+ response = service.call(queue_name)
61
+
62
+ if response.success?
63
+ node = Nokogiri::XML(response.body).remove_namespaces!
64
+ if (node % 'entry')
65
+ Queue.from_node(node)
66
+ else
67
+ #FIXME: If the queue is not found, Azure returns an atom feed containing links to immediate child nodes
68
+ # What to do with this?
69
+ end
70
+ else
71
+ Queue.from_error(response.error)
72
+ end
73
+ end
74
+
75
+ # Public: This operation enumerates the queues in the service namespace.
76
+ #
77
+ # options - Options for this query (default: {}):
78
+ # :skip - Integer: number of entries to skip
79
+ # :top - Integer: number of entries to retrieve
80
+ # service - The backend service to implement this (optional).
81
+ #
82
+ # Returns an Array of Query elements.
83
+ def self.list(options={}, service=Services::List.new)
84
+ response = service.call(options)
85
+
86
+ if response.success?
87
+ result = Nokogiri::XML(response.body).remove_namespaces!
88
+ (result / 'entry').map {|node| Queue.from_node(node) }
89
+ else
90
+ []
91
+ end
92
+ end
93
+
94
+ # Public: This operation sends a message into the specified queue.
95
+ #
96
+ # queue - The Queue
97
+ # message - The Message
98
+ # service - The backend service to implement this (optional).
99
+ #
100
+ # Returns true|false to indicate success.
101
+ def self.send_message_to_queue(queue, message, service=Services::SendMessageToQueue.new)
102
+ serializer = BrokeredMessageSerializer.new(message)
103
+ broker_properties = serializer.to_json
104
+ message_properties = serializer.get_property_headers
105
+
106
+ content_type = message.content_type || 'text/plain'
107
+ response = service.call(queue.name, message.body, content_type, broker_properties, message_properties)
108
+
109
+ response.success?
110
+ end
111
+
112
+ # Public: Atomically retrieves and locks a message from a queue for processing.
113
+ # The message is guaranteed not to be delivered to other receivers during the lock duration
114
+ # period specified in the queue description.
115
+ #
116
+ # See: http://msdn.microsoft.com/en-us/library/windowsazure/hh780735
117
+ #
118
+ # queue - The message queue
119
+ # options - A Hash of options for this operation (optional):
120
+ # :timeout - An integer representing the request's timeout in seconds
121
+ # service - The backend service to implement this (optional).
122
+ #
123
+ # Returns a BrokeredMeassege.
124
+ def self.peek_lock_message_from_queue(queue, options={}, service=Azure::ServiceBus::Queues::Services::PeekLockMessageFromQueue.new)
125
+ response = service.call(queue.name, options)
126
+
127
+ if response.code == 201
128
+ BrokeredMessageSerializer.get_from_http_response(response)
129
+ elsif response.code == 204
130
+ msg = "No messages available within the specified timeout period."
131
+ BrokeredMessage.from_error(Azure::Error.new(msg))
132
+ else
133
+ BrokeredMessage.from_error(response.error)
134
+ end
135
+ end
136
+
137
+ # Public: Unlocks a message for processing by other receivers on a given subscription.
138
+ # This operation deletes the lock object, causing the message to be unlocked.
139
+ # A message must have first been locked by a receiver before this operation is called.
140
+ #
141
+ # See: http://msdn.microsoft.com/en-us/library/windowsazure/hh780723
142
+ #
143
+ # queue - The message queue
144
+ # message - The message to be unlocked
145
+ # service - The backend service to implement this (optional).
146
+ #
147
+ # Returns true|false to indicate success.
148
+ def self.unlock_message_from_queue(queue, message, service=Azure::ServiceBus::Queues::Services::UnlockMessageFromQueue.new)
149
+ response = service.call(queue.name, message.sequence_number, message.lock_token)
150
+
151
+ response.success?
152
+ end
153
+
154
+ # Public: Reads and deletes a message from a queue as an atomic operation.
155
+ #
156
+ # See: http://msdn.microsoft.com/en-us/library/windowsazure/hh780756
157
+ #
158
+ # queue - The message queue
159
+ # options - A Hash of options for this operation (optional):
160
+ # :timeout - An integer representing the request's timeout in seconds
161
+ # service - The backend service to implement this (optional).
162
+ #
163
+ # Returns a BrokeredMeassege.
164
+ def self.read_delete_message_from_queue(queue, options={}, service=Azure::ServiceBus::Queues::Services::ReadDeleteMessageFromQueue.new)
165
+ response = service.call(queue.name, options)
166
+
167
+ # Azure documentation says this should be 201
168
+ if response.code == 200
169
+ BrokeredMessageSerializer.get_from_http_response(response)
170
+ elsif response.code == 204
171
+ msg = "No messages available within the specified timeout period."
172
+ BrokeredMessage.from_error(Azure::Error.new(msg))
173
+ else
174
+ BrokeredMessage.from_error(response.error)
175
+ end
176
+ end
177
+
178
+ # Public: Deletes a message from a queue.
179
+ #
180
+ # See: http://msdn.microsoft.com/en-us/library/windowsazure/hh780767
181
+ #
182
+ # queue - The message queue
183
+ # message - The message to be deleted
184
+ # service - The backend service to implement this (optional).
185
+ #
186
+ # Returns true|false to indicate success.
187
+ def self.delete_message_from_queue(queue, message, service=Azure::ServiceBus::Queues::Services::DeleteMessageFromQueue.new)
188
+ response = service.call(queue.name, message.sequence_number, message.lock_token)
189
+
190
+ response.success?
191
+ end
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,100 @@
1
+ require "azure/error"
2
+
3
+ module Azure
4
+ module ServiceBus
5
+ module Queues
6
+ class Queue
7
+ include Azure::ErrorHandler
8
+ # Get the Queue's ID.
9
+ #
10
+ # Returns a URI.
11
+ attr_accessor :id
12
+ alias_method :url, :id
13
+
14
+ # Get the Queue's name.
15
+ #
16
+ # Returns a String.
17
+ attr_accessor :name
18
+ alias_method :title, :name
19
+
20
+ # Public: Get the published time
21
+ #
22
+ # Returns a Time
23
+ attr_accessor :published
24
+
25
+ # Public: Get the updated time
26
+ #
27
+ # Returns a Time
28
+ attr_accessor :updated
29
+
30
+ # Public: Get the author name
31
+ #
32
+ # Returns a String
33
+ attr_accessor :author_name
34
+
35
+ # Public: Queue description
36
+ #
37
+ # Returns a Hash
38
+ attr_accessor :description
39
+
40
+ # Public: Instantiate a queue from an XML entry.
41
+ #
42
+ # entry - An XML::Node element.
43
+ #
44
+ # Returns a Queue.
45
+ def self.from_node(node)
46
+ name = (node % "title").text
47
+
48
+ new(name) do |q|
49
+ q.id = URI((node % "id").text)
50
+ # q.title = (node % "title").text
51
+ q.published = Time.parse((node % "published").text)
52
+ q.updated = Time.parse((node % "updated").text)
53
+ q.author_name = (node % "author/name").text
54
+ # q.description = Description.from_node(node % 'content/QueueDescription')
55
+
56
+ q.description = (node / "content/QueueDescription *").each_with_object({}) do |el, desc|
57
+ desc[el.name] = el.text
58
+ end
59
+ end
60
+ end
61
+
62
+ # Public: Instantiate a queue from an error object.
63
+ #
64
+ # error - An Azure::Error.
65
+ #
66
+ # Returns a Queue.
67
+ def self.from_error(error)
68
+ queue = new(nil)
69
+ queue.error = error
70
+ queue
71
+ end
72
+
73
+ # Public: Initialize the queue.
74
+ #
75
+ # name - A String with the name of the queue.
76
+ # description - The queue description Hash
77
+ # service - The Queue service to perform external calls.
78
+ def initialize(name, description = {}, service=Azure::ServiceBus::Queues)
79
+ @name = name
80
+ @description = description
81
+ @service = service
82
+ yield self if block_given?
83
+ end
84
+
85
+ def delete
86
+ @service.delete(self)
87
+ end
88
+
89
+ # Public: Compare two queues to see if they are the same.
90
+ #
91
+ # other - A queue.
92
+ #
93
+ # Returns true|false.
94
+ def ==(other)
95
+ id == other.id
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,51 @@
1
+ require "nokogiri"
2
+
3
+ module Azure
4
+ module ServiceBus
5
+ module Queues
6
+ class QueueSerializer
7
+ attr_accessor :properties
8
+
9
+ # Please note that order IS important
10
+ PROPERTIES = [
11
+ 'DefaultMessageTimeToLive',
12
+ 'DuplicateDetectionHistoryTimeWindow',
13
+ 'EnableBatchedOperations',
14
+ 'EnableDeadLetteringOnMessageExpiration',
15
+ 'ExtensionData',
16
+ 'IsReadOnly',
17
+ 'LockDuration',
18
+ 'MaxDeliveryCount',
19
+ 'MaxSizeInMegabytes',
20
+ 'MessageCount',
21
+ 'Path',
22
+ 'RequiresDuplicateDetection',
23
+ 'RequiresSession',
24
+ 'SizeInBytes'
25
+ ].freeze
26
+
27
+ def initialize(properties={})
28
+ @properties = properties
29
+ yield self if block_given?
30
+ end
31
+
32
+ def to_xml
33
+ doc = Nokogiri::XML::Builder.new do |xml|
34
+ xml.entry(:xmlns => 'http://www.w3.org/2005/Atom') {
35
+ xml.content(:type => 'application/xml') {
36
+ xml.QueueDescription('xmlns' => 'http://schemas.microsoft.com/netservices/2010/10/servicebus/connect', 'xmlns:i' => 'http://www.w3.org/2001/XMLSchema-instance') {
37
+ PROPERTIES.each do |p|
38
+ unless @properties[p].nil?
39
+ xml.send(p, @properties[p].to_s)
40
+ end
41
+ end
42
+ }
43
+ }
44
+ }
45
+ end
46
+ doc.to_xml
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,154 @@
1
+ require "azure/core/service"
2
+ require "azure/core/utils/queryable"
3
+ require "azure/service_bus/service_bus_service"
4
+ require "azure/service_bus/auth/wrap"
5
+ require "azure/service_bus/auth/authorizer"
6
+ require "azure/service_bus/queues/uri"
7
+
8
+ module Azure
9
+ module ServiceBus
10
+ module Queues
11
+ class Service < Core::Service
12
+ def initialize(signer=Azure::ServiceBus::Auth::Wrap.new)
13
+ super(signer, Azure::ServiceBus::Auth::Authorizer.new)
14
+ end
15
+ end
16
+
17
+ module Services
18
+ # Public: Create a queue.
19
+ class Create < Service
20
+ # Public: Invoke the service.
21
+ #
22
+ # name - A String with the queue name.
23
+ # xml - An xml String according to the Azure docs
24
+ #
25
+ # Returns a Response.
26
+ def call(name, xml)
27
+ super(:put, URI.queue(name), xml)
28
+ end
29
+ end
30
+
31
+ # Public: Delete a queue.
32
+ class Delete < Service
33
+ # Public: Invoke the service.
34
+ #
35
+ # name - A String with the queue name.
36
+ #
37
+ # Returns a Response.
38
+ def call(name)
39
+ super(:delete, URI.queue(name))
40
+ end
41
+ end
42
+
43
+ # Public: Get a queue.
44
+ class Get < Service
45
+ # Public: Invoke the service.
46
+ #
47
+ # name - A String with the queue name.
48
+ #
49
+ # Returns a Response.
50
+ def call(name)
51
+ super(:get, URI.queue(name))
52
+ end
53
+ end
54
+
55
+ # Public: List queues
56
+ class List < Service
57
+ include Core::Utils::Queryable
58
+
59
+ # Public: Invoke the service.
60
+ #
61
+ # options - Options for this query (default: {}):
62
+ # :skip - Integer: number of entries to skip
63
+ # :top - Integer: number of entries to retrieve
64
+ #
65
+ # Returns a Response.
66
+ def call(options={})
67
+ options = translate_options_hash(options)
68
+ super(:get, URI.collection(options))
69
+ end
70
+ end
71
+
72
+ ## Messages
73
+
74
+ # Public: Sends a message to a queue
75
+ class SendMessageToQueue < ServiceBusService
76
+ # Public: Invoke the service.
77
+ #
78
+ # queue_name - A String with the queue name
79
+ # body - A String with the message's body
80
+ # broker_properties_json - A JSON encoded String with the message's properties.
81
+ # content_type - A String with the desired Content-Type for the message body
82
+ # message_properties - A Hash with the user-defined message's properties.
83
+ #
84
+ # Returns a Response.
85
+ def call(queue_name, body, content_type, broker_properties_json, message_properties)
86
+ super(:post, URI.messages(queue_name), body) do |request|
87
+ request.headers['BrokerProperties'] = broker_properties_json
88
+ message_properties.each do |k,v|
89
+ request.headers[k.to_s] = v
90
+ end
91
+ request.headers["Content-Type"] = content_type
92
+ end
93
+ end
94
+ end
95
+
96
+ # Public: Peek-lock message from a Queue
97
+ class PeekLockMessageFromQueue < ServiceBusService
98
+ # Public: Invoke the service.
99
+ #
100
+ # queue_name - A String with the queue name
101
+ # options - Options for this query (default: {}):
102
+ # :timeout - Integer: request's timeout in seconds
103
+ #
104
+ # Returns a Response.
105
+ def call(queue_name, options={})
106
+ super(:post, URI.messages_head(queue_name, options))
107
+ end
108
+ end
109
+
110
+ # Public: Unlocks a message from a Queue
111
+ class UnlockMessageFromQueue < ServiceBusService
112
+ # Public: Invoke the service.
113
+ #
114
+ # queue_name - A String with the queue name
115
+ # seq_number - A String with the message's sequence_number
116
+ # lock_token - A String with the message's lock_token
117
+ #
118
+ # Returns a Response.
119
+ def call(queue_name, seq_number, lock_token)
120
+ super(:put, URI.message(queue_name, seq_number, lock_token))
121
+ end
122
+ end
123
+
124
+ # Public: Reads and Deletes a message from a Queue
125
+ class ReadDeleteMessageFromQueue < ServiceBusService
126
+ # Public: Invoke the service.
127
+ #
128
+ # queue_name - A String with the queue name
129
+ # options - Options for this query (default: {}):
130
+ # :timeout - Integer: request's timeout in seconds
131
+ #
132
+ # Returns a Response.
133
+ def call(queue_name, options={})
134
+ super(:delete, URI.messages_head(queue_name, options))
135
+ end
136
+ end
137
+
138
+ # Public: Deletes a message from a Queue
139
+ class DeleteMessageFromQueue < ServiceBusService
140
+ # Public: Invoke the service.
141
+ #
142
+ # queue_name - A String with the queue name
143
+ # seq_number - A String with the message's sequence_number
144
+ # lock_token - A String with the message's lock_token
145
+ #
146
+ # Returns a Response.
147
+ def call(queue_name, seq_number, lock_token)
148
+ super(:delete, URI.message(queue_name, seq_number, lock_token))
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end
154
+ end