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,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
|