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.
- data/Gemfile +3 -0
- data/Gemfile.lock +36 -0
- data/README.md +3 -0
- data/Rakefile +81 -0
- data/azure.gemspec +20 -9
- data/lib/azure.rb +4 -0
- data/lib/azure/atom.rb +170 -0
- data/lib/azure/auth.rb +29 -0
- data/lib/azure/blobs.rb +620 -0
- data/lib/azure/blobs/blob.rb +360 -0
- data/lib/azure/blobs/container.rb +209 -0
- data/lib/azure/blobs/service.rb +396 -0
- data/lib/azure/blobs/shared_access_signature.rb +84 -0
- data/lib/azure/blobs/uri.rb +60 -0
- data/lib/azure/configuration.rb +121 -0
- data/lib/azure/core/auth/shared_key.rb +95 -0
- data/lib/azure/core/auth/shared_key_lite.rb +34 -0
- data/lib/azure/core/collection.rb +118 -0
- data/lib/azure/core/service.rb +43 -0
- data/lib/azure/core/signer.rb +32 -0
- data/lib/azure/core/utils/interval.rb +97 -0
- data/lib/azure/core/utils/queryable.rb +74 -0
- data/lib/azure/core/utils/storage_service_properties.rb +83 -0
- data/lib/azure/core/utils/string.rb +59 -0
- data/lib/azure/error.rb +72 -0
- data/lib/azure/queues.rb +272 -0
- data/lib/azure/queues/message.rb +174 -0
- data/lib/azure/queues/queue.rb +187 -0
- data/lib/azure/queues/service.rb +263 -0
- data/lib/azure/queues/service_properties.rb +152 -0
- data/lib/azure/queues/uri.rb +78 -0
- data/lib/azure/request.rb +102 -0
- data/lib/azure/response.rb +93 -0
- data/lib/azure/service_bus.rb +4 -0
- data/lib/azure/service_bus/auth/authorizer.rb +22 -0
- data/lib/azure/service_bus/auth/uri.rb +52 -0
- data/lib/azure/service_bus/auth/wrap.rb +37 -0
- data/lib/azure/service_bus/auth/wrap_service.rb +76 -0
- data/lib/azure/service_bus/auth/wrap_token.rb +45 -0
- data/lib/azure/service_bus/auth/wrap_token_manager.rb +46 -0
- data/lib/azure/service_bus/brokered_message.rb +139 -0
- data/lib/azure/service_bus/brokered_message_serializer.rb +113 -0
- data/lib/azure/service_bus/queues.rb +194 -0
- data/lib/azure/service_bus/queues/queue.rb +100 -0
- data/lib/azure/service_bus/queues/queue_serializer.rb +51 -0
- data/lib/azure/service_bus/queues/service.rb +154 -0
- data/lib/azure/service_bus/queues/uri.rb +80 -0
- data/lib/azure/service_bus/rules.rb +110 -0
- data/lib/azure/service_bus/rules/rule.rb +97 -0
- data/lib/azure/service_bus/rules/service.rb +122 -0
- data/lib/azure/service_bus/rules/uri.rb +39 -0
- data/lib/azure/service_bus/service_bus_service.rb +22 -0
- data/lib/azure/service_bus/subscriptions.rb +170 -0
- data/lib/azure/service_bus/subscriptions/service.rb +133 -0
- data/lib/azure/service_bus/subscriptions/subscription.rb +164 -0
- data/lib/azure/service_bus/subscriptions/subscription_serializer.rb +74 -0
- data/lib/azure/service_bus/subscriptions/uri.rb +71 -0
- data/lib/azure/service_bus/topics.rb +120 -0
- data/lib/azure/service_bus/topics/service.rb +98 -0
- data/lib/azure/service_bus/topics/topic.rb +122 -0
- data/lib/azure/service_bus/topics/topic_serializer.rb +44 -0
- data/lib/azure/service_bus/topics/uri.rb +58 -0
- data/lib/azure/service_runtime/client/goal_state_pipe_monitor.rb +21 -0
- data/lib/azure/service_runtime/client/goal_state_protocol.rb +18 -0
- data/lib/azure/service_runtime/client/runtime_client.rb +135 -0
- data/lib/azure/service_runtime/deployment.rb +24 -0
- data/lib/azure/service_runtime/local_resource.rb +15 -0
- data/lib/azure/service_runtime/role.rb +17 -0
- data/lib/azure/service_runtime/role_environment.rb +206 -0
- data/lib/azure/service_runtime/role_environment_change.rb +32 -0
- data/lib/azure/service_runtime/role_instance.rb +35 -0
- data/lib/azure/service_runtime/role_instance_endpoint.rb +14 -0
- data/lib/azure/tables.rb +215 -0
- data/lib/azure/tables/auth/shared_key.rb +71 -0
- data/lib/azure/tables/auth/shared_key_lite.rb +30 -0
- data/lib/azure/tables/entities_collection.rb +66 -0
- data/lib/azure/tables/entity.rb +127 -0
- data/lib/azure/tables/service.rb +211 -0
- data/lib/azure/tables/table.rb +129 -0
- data/lib/azure/tables/tables_collection.rb +62 -0
- data/lib/azure/tables/types.rb +65 -0
- data/lib/azure/tables/uri.rb +62 -0
- data/test/fixtures/32px-fulls-black.jpg +0 -0
- data/test/fixtures/all_containers.xml +20 -0
- data/test/fixtures/all_tables.xml +22 -0
- data/test/fixtures/create_table_response_entry.xml +15 -0
- data/test/fixtures/error.xml +5 -0
- data/test/fixtures/insert_entity_response_entry.xml +25 -0
- data/test/fixtures/messages.xml +12 -0
- data/test/fixtures/query_entities_empty_response.xml +7 -0
- data/test/fixtures/query_entities_response.xml +45 -0
- data/test/fixtures/queue_service_properties.xml +22 -0
- data/test/fixtures/queue_service_properties_original.xml +19 -0
- data/test/fixtures/queues.xml +16 -0
- data/test/fixtures/sb_default_create_queue_response.xml +23 -0
- data/test/fixtures/sb_default_create_topic_response.xml +18 -0
- data/test/fixtures/sb_get_access_token_response.txt +1 -0
- data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -0
- data/test/integration/blobs/auth_test.rb +19 -0
- data/test/integration/blobs/blob_test.rb +61 -0
- data/test/integration/blobs/clear_page_range_test.rb +19 -0
- data/test/integration/blobs/copy_test.rb +33 -0
- data/test/integration/blobs/create_blobs_test.rb +51 -0
- data/test/integration/blobs/create_container_test.rb +13 -0
- data/test/integration/blobs/create_snapshot_test.rb +17 -0
- data/test/integration/blobs/delete_blob_snapshots_test.rb +19 -0
- data/test/integration/blobs/delete_blobs_test.rb +25 -0
- data/test/integration/blobs/delete_container_test.rb +24 -0
- data/test/integration/blobs/delete_snapshot_test.rb +17 -0
- data/test/integration/blobs/get_blob_snapshot_test.rb +18 -0
- data/test/integration/blobs/get_blobs_test.rb +31 -0
- data/test/integration/blobs/get_page_range_test.rb +19 -0
- data/test/integration/blobs/list_blobs_test.rb +39 -0
- data/test/integration/blobs/list_containers_test.rb +28 -0
- data/test/integration/blobs/manage_blob_leases_test.rb +45 -0
- data/test/integration/blobs/manage_blob_metadata_test.rb +51 -0
- data/test/integration/blobs/manage_blob_properties_test.rb +25 -0
- data/test/integration/blobs/manage_blob_service_properties_test.rb +38 -0
- data/test/integration/blobs/manage_container_metadata_test.rb +46 -0
- data/test/integration/blobs/manage_container_permissions_test.rb +17 -0
- data/test/integration/blobs/update_page_range_test.rb +20 -0
- data/test/integration/queues/clear_messages_test.rb +22 -0
- data/test/integration/queues/create_queue_test.rb +13 -0
- data/test/integration/queues/delete_message_test.rb +42 -0
- data/test/integration/queues/delete_queue_test.rb +24 -0
- data/test/integration/queues/get_messages_test.rb +39 -0
- data/test/integration/queues/list_queues_test.rb +43 -0
- data/test/integration/queues/manage_queue_metadata_test.rb +45 -0
- data/test/integration/queues/manage_queue_service_properties_test.rb +27 -0
- data/test/integration/queues/peek_messages_test.rb +55 -0
- data/test/integration/queues/put_message_test.rb +31 -0
- data/test/integration/queues/update_message_test.rb +46 -0
- data/test/integration/service_bus/auth_test.rb +18 -0
- data/test/integration/service_bus/queues/create_queue_test.rb +25 -0
- data/test/integration/service_bus/queues/delete_message_from_queue_test.rb +29 -0
- data/test/integration/service_bus/queues/delete_queue_test.rb +25 -0
- data/test/integration/service_bus/queues/get_queue_test.rb +23 -0
- data/test/integration/service_bus/queues/list_queues_test.rb +39 -0
- data/test/integration/service_bus/queues/peek_message_from_queue_test.rb +34 -0
- data/test/integration/service_bus/queues/read_and_delete_message_from_queue_test.rb +31 -0
- data/test/integration/service_bus/queues/send_message_to_queue_test.rb +22 -0
- data/test/integration/service_bus/queues/unlock_message_from_queue_test.rb +36 -0
- data/test/integration/service_bus/rules/create_rule_test.rb +19 -0
- data/test/integration/service_bus/rules/delete_rule_test.rb +17 -0
- data/test/integration/service_bus/rules/get_rule_test.rb +21 -0
- data/test/integration/service_bus/rules/list_rules_test.rb +24 -0
- data/test/integration/service_bus/rules/rule_test.rb +16 -0
- data/test/integration/service_bus/subscriptions/create_subscription_test.rb +25 -0
- data/test/integration/service_bus/subscriptions/delete_message_from_subscription_test.rb +31 -0
- data/test/integration/service_bus/subscriptions/delete_subscription_test.rb +30 -0
- data/test/integration/service_bus/subscriptions/fetch_subscription_test.rb +28 -0
- data/test/integration/service_bus/subscriptions/list_subscriptions_test.rb +23 -0
- data/test/integration/service_bus/subscriptions/peek_lock_message_from_subscription_test.rb +42 -0
- data/test/integration/service_bus/subscriptions/read_delete_message_from_subscription_test.rb +36 -0
- data/test/integration/service_bus/subscriptions/subscription_test.rb +31 -0
- data/test/integration/service_bus/subscriptions/unlock_message_from_subscription_test.rb +43 -0
- data/test/integration/service_bus/topics/create_topic_test.rb +25 -0
- data/test/integration/service_bus/topics/delete_topic_test.rb +25 -0
- data/test/integration/service_bus/topics/get_topic_test.rb +23 -0
- data/test/integration/service_bus/topics/list_topics_test.rb +39 -0
- data/test/integration/service_bus/topics/send_message_to_topic_test.rb +23 -0
- data/test/integration/tables/auth_test.rb +29 -0
- data/test/integration/tables/creating_tables_test.rb +16 -0
- data/test/integration/tables/delete_entity_test.rb +39 -0
- data/test/integration/tables/deleting_table_test.rb +22 -0
- data/test/integration/tables/insert_entity_test.rb +23 -0
- data/test/integration/tables/merge_entity_test.rb +28 -0
- data/test/integration/tables/query_entities_test.rb +131 -0
- data/test/integration/tables/query_tables_test.rb +63 -0
- data/test/integration/tables/update_entity_test.rb +54 -0
- data/test/integration/test_helper.rb +14 -0
- data/test/support/blobs.rb +12 -0
- data/test/support/env.rb +5 -0
- data/test/support/fixtures.rb +22 -0
- data/test/support/stubs.rb +28 -0
- data/test/support/table_names.rb +44 -0
- data/test/test_helper.rb +10 -0
- data/test/unit/atom_test.rb +58 -0
- data/test/unit/auth_test.rb +24 -0
- data/test/unit/blobs/blob_test.rb +5 -0
- data/test/unit/blobs/container_test.rb +67 -0
- data/test/unit/blobs/service_test.rb +17 -0
- data/test/unit/blobs/shared_access_signature_test.rb +66 -0
- data/test/unit/blobs_test.rb +156 -0
- data/test/unit/core/service_test.rb +57 -0
- data/test/unit/core/utils/interval_test.rb +70 -0
- data/test/unit/core/utils/queryable_test.rb +69 -0
- data/test/unit/core/utils/storage_service_properties_test.rb +66 -0
- data/test/unit/error_test.rb +39 -0
- data/test/unit/queues/message_test.rb +40 -0
- data/test/unit/queues/queue_test.rb +64 -0
- data/test/unit/queues/service_properties.rb +35 -0
- data/test/unit/request_test.rb +38 -0
- data/test/unit/response_test.rb +43 -0
- data/test/unit/service_bus/auth/authorizer_test.rb +27 -0
- data/test/unit/service_bus/auth/wrap_token_test.rb +28 -0
- data/test/unit/service_bus/queues/queue_test.rb +38 -0
- data/test/unit/service_bus/topics/topic_test.rb +33 -0
- data/test/unit/service_runtime/data/goalstate.xml +9 -0
- data/test/unit/service_runtime/data/roleenvironmentdata.xml +29 -0
- data/test/unit/service_runtime/data/runtime.xml +6 -0
- data/test/unit/service_runtime/role_environment_test.rb +144 -0
- data/test/unit/tables/auth/shared_key_lite_test.rb +39 -0
- data/test/unit/tables/auth/shared_key_test.rb +45 -0
- data/test/unit/tables/entities_collection_test.rb +39 -0
- data/test/unit/tables/entity_test.rb +72 -0
- data/test/unit/tables/table_test.rb +57 -0
- data/test/unit/tables_test.rb +302 -0
- data/test/unit/types_test.rb +67 -0
- metadata +310 -47
- data/LICENSE +0 -0
- 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
|