azure 0.0.0 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,80 @@
|
|
1
|
+
require "azure/configuration"
|
2
|
+
require "uri"
|
3
|
+
|
4
|
+
module Azure
|
5
|
+
module ServiceBus
|
6
|
+
module Queues
|
7
|
+
module URI
|
8
|
+
# Public: Generate the URI for a given queue.
|
9
|
+
#
|
10
|
+
# queue_name - The name of the queue.
|
11
|
+
# host - The host of the API.
|
12
|
+
#
|
13
|
+
# Returns a URI.
|
14
|
+
def self.queue(name, host=Azure.config.service_bus_host)
|
15
|
+
generate(host, name)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Public: generate the URI for the queues collection.
|
19
|
+
#
|
20
|
+
# options - Options for this query (default: {}):
|
21
|
+
# :skip - Integer: number of entries to skip
|
22
|
+
# :top - Integer: number of entries to retrieve
|
23
|
+
# host - The host of the API.
|
24
|
+
#
|
25
|
+
# Returns a URI.
|
26
|
+
def self.collection(options={}, host=Azure.config.service_bus_host)
|
27
|
+
generate(host, "$Resources/Queues", options)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Public: generate the URI for the given queues's messages
|
31
|
+
#
|
32
|
+
# queue_name - The queue name
|
33
|
+
# host - The host of the API.
|
34
|
+
#
|
35
|
+
# Returns a URI.
|
36
|
+
def self.messages(queue_name, host=Azure.config.service_bus_host)
|
37
|
+
generate(host, "#{queue_name}/messages")
|
38
|
+
end
|
39
|
+
|
40
|
+
# Public: generate the URI for the given queues's head
|
41
|
+
#
|
42
|
+
# queue_name - The queue name
|
43
|
+
# options - Options for this query (optional, default: {})
|
44
|
+
# host - The host of the API.
|
45
|
+
#
|
46
|
+
# Returns a URI.
|
47
|
+
def self.messages_head(queue_name, options={}, host=Azure.config.service_bus_host)
|
48
|
+
generate(host, "#{queue_name}/messages/head", options)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Public: generate the URI to operate on the given message in the given queue
|
52
|
+
#
|
53
|
+
# queue_name - The queue name
|
54
|
+
# seq_number - The message's sequence_number
|
55
|
+
# lock_token - The message's lock_token
|
56
|
+
# host - The host of the API (optional).
|
57
|
+
#
|
58
|
+
# Returns a URI.
|
59
|
+
def self.message(queue_name, seq_number, lock_token, host=Azure.config.service_bus_host)
|
60
|
+
generate(host, "#{queue_name}/messages/#{seq_number}/#{lock_token}")
|
61
|
+
end
|
62
|
+
|
63
|
+
#TODO: we need to move this method to other module to be mixedin here
|
64
|
+
#
|
65
|
+
# Utility method to generate the URI.
|
66
|
+
#
|
67
|
+
# host - A String with the URI's host.
|
68
|
+
# path - A String with the URI's path.
|
69
|
+
# query - A simple Hash with query parameters (default: {}).
|
70
|
+
#
|
71
|
+
# Returns a URI.
|
72
|
+
def self.generate(host, path, query={})
|
73
|
+
uri = ::URI.parse(File.join(host, path))
|
74
|
+
uri.query = ::URI.encode_www_form(query) unless query.empty?
|
75
|
+
uri
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'azure/service_bus/rules/rule'
|
2
|
+
require 'azure/service_bus/rules/service'
|
3
|
+
require 'nokogiri'
|
4
|
+
|
5
|
+
module Azure
|
6
|
+
module ServiceBus
|
7
|
+
module Rules
|
8
|
+
|
9
|
+
# Public: Create a New Rule. Invalidates the Rule if the operation fails.
|
10
|
+
#
|
11
|
+
# subscription - An instance of Azure::ServiceBus::Subscriptions::Subscription.
|
12
|
+
# name - String representing the name of the new rule.
|
13
|
+
# filter - A Hash representing `filter` option.
|
14
|
+
#
|
15
|
+
# Example:
|
16
|
+
#
|
17
|
+
# {"SqlFilterExpression" => {
|
18
|
+
# "SqlExpression" => "MyProperty='XYZ'"
|
19
|
+
# }}
|
20
|
+
#
|
21
|
+
# Becomes:
|
22
|
+
#
|
23
|
+
# <Filter i:type="SqlFilterExpression">
|
24
|
+
# <SqlExpression>MyProperty='XYZ'</SqlExpression>
|
25
|
+
# </Filter>
|
26
|
+
#
|
27
|
+
# action - A Hash representing `action` option.
|
28
|
+
#
|
29
|
+
# Example:
|
30
|
+
#
|
31
|
+
# {"SqlFilterAction" => {
|
32
|
+
# "SqlExpression" => "set MyProperty2 = 'ABC'"
|
33
|
+
# }}
|
34
|
+
#
|
35
|
+
# Becomes:
|
36
|
+
#
|
37
|
+
# <Action i:type="SqlFilterAction">
|
38
|
+
# <SqlExpression>set MyProperty2 = 'ABC'</SqlExpression>
|
39
|
+
# </Action>
|
40
|
+
#
|
41
|
+
# Returns An instance of Azure::ServiceBus::Rules::Rule.
|
42
|
+
def self.create(subscription, name, filter=nil, action=nil, service=Services::Create.new)
|
43
|
+
response = service.call(subscription.topic.name, subscription.name, name, filter, action)
|
44
|
+
|
45
|
+
if response.success?
|
46
|
+
document = Nokogiri::XML(response.body).remove_namespaces!
|
47
|
+
Rule.from_document(document, subscription)
|
48
|
+
else
|
49
|
+
rule = Rule.new(name)
|
50
|
+
rule.error = response.error
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Public: Delete Rule.
|
55
|
+
#
|
56
|
+
# rule - An instance of Azure::ServiceBus::Rules::Rule.
|
57
|
+
#
|
58
|
+
# Returns boolean indicating success. Invalidate rule if operation fails.
|
59
|
+
def self.delete(rule, service=Services::Delete.new)
|
60
|
+
response = service.call(rule.subscription.topic.name, rule.subscription.name, rule.name)
|
61
|
+
|
62
|
+
if response.success?
|
63
|
+
rule.freeze
|
64
|
+
else
|
65
|
+
rule.error = response.error
|
66
|
+
end
|
67
|
+
|
68
|
+
response.success?
|
69
|
+
end
|
70
|
+
|
71
|
+
# Public: Get Rule.
|
72
|
+
#
|
73
|
+
# subscription - An instance of Subscription.
|
74
|
+
# name - String representing the name of the Rule.
|
75
|
+
#
|
76
|
+
# Returns an instance of Rule. Invalidated if operation fails.
|
77
|
+
def self.get(subscription, name, service=Services::GetRule.new)
|
78
|
+
response = service.call(subscription.topic.name, subscription.name, name)
|
79
|
+
|
80
|
+
if response.success?
|
81
|
+
document = Nokogiri::XML(response.body).remove_namespaces!
|
82
|
+
Rule.from_document(document, subscription)
|
83
|
+
else
|
84
|
+
rule = Rule.new(name)
|
85
|
+
rule.error = response.error
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# Public: List Rules in a given subscription.
|
90
|
+
#
|
91
|
+
# subscription - An instance of Subscription.
|
92
|
+
#
|
93
|
+
# Returns an Array of Rules.
|
94
|
+
def self.all(subscription, service=Services::ListRules.new)
|
95
|
+
response = service.call(subscription.topic.name, subscription.name)
|
96
|
+
|
97
|
+
rules = []
|
98
|
+
|
99
|
+
if response.success?
|
100
|
+
document = Nokogiri::XML(response.body).remove_namespaces!
|
101
|
+
(document / "entry").each do |node|
|
102
|
+
rules << Rule.from_document(node, subscription)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
rules
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require "azure/error"
|
2
|
+
require "nokogiri"
|
3
|
+
|
4
|
+
module Azure
|
5
|
+
module ServiceBus
|
6
|
+
module Rules
|
7
|
+
class Rule
|
8
|
+
include Azure::ErrorHandler
|
9
|
+
|
10
|
+
# Get the Rule's name.
|
11
|
+
attr :name
|
12
|
+
|
13
|
+
# Get Rule Subscription.
|
14
|
+
attr :subscription
|
15
|
+
|
16
|
+
# Get/Set filter hash.
|
17
|
+
attr_accessor :filter
|
18
|
+
|
19
|
+
# Get/Set action hash.
|
20
|
+
attr_accessor :action
|
21
|
+
|
22
|
+
# Public: Initialize Rule from a XML document.
|
23
|
+
#
|
24
|
+
# doc - An instance of Nokogiri::XML::Document.
|
25
|
+
#
|
26
|
+
# Returns an instance of Rule.
|
27
|
+
def self.from_document(doc, subscription)
|
28
|
+
|
29
|
+
name = (doc % "title").text
|
30
|
+
|
31
|
+
elements = ["Filter", "Action"]
|
32
|
+
|
33
|
+
elements.map! do |element_name|
|
34
|
+
node = (doc % element_name)
|
35
|
+
hash = {}
|
36
|
+
key = node["type"]
|
37
|
+
hash[key] = {}
|
38
|
+
node.children.each do |child|
|
39
|
+
hash[key][child.name] = child.content
|
40
|
+
end
|
41
|
+
hash
|
42
|
+
end
|
43
|
+
|
44
|
+
filter = elements.first
|
45
|
+
action = elements.last
|
46
|
+
|
47
|
+
new(name, subscription, filter, action)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Public: Initialize Rule object.
|
51
|
+
#
|
52
|
+
# name - String representing the name of the Rule.
|
53
|
+
# filter - A Hash representing `filter` option.
|
54
|
+
#
|
55
|
+
# Example:
|
56
|
+
#
|
57
|
+
# {"SqlFilterExpression" => {
|
58
|
+
# "SqlExpression" => "MyProperty='XYZ'"
|
59
|
+
# }}
|
60
|
+
#
|
61
|
+
# Becomes:
|
62
|
+
#
|
63
|
+
# <Filter i:type="SqlFilterExpression">
|
64
|
+
# <SqlExpression>MyProperty='XYZ'</SqlExpression>
|
65
|
+
# </Filter>
|
66
|
+
#
|
67
|
+
# action - A Hash representing `action` option.
|
68
|
+
#
|
69
|
+
# Example:
|
70
|
+
#
|
71
|
+
# {"SqlFilterAction" => {
|
72
|
+
# "SqlExpression" => "set MyProperty2 = 'ABC'"
|
73
|
+
# }}
|
74
|
+
#
|
75
|
+
# Becomes:
|
76
|
+
#
|
77
|
+
# <Action i:type="SqlFilterAction">
|
78
|
+
# <SqlExpression>set MyProperty2 = 'ABC'</SqlExpression>
|
79
|
+
# </Action>
|
80
|
+
def initialize(name, subscription=nil, filter={}, action={})
|
81
|
+
@name = name
|
82
|
+
@subscription = subscription
|
83
|
+
@filter = filter
|
84
|
+
@action = action
|
85
|
+
yield self if block_given?
|
86
|
+
end
|
87
|
+
|
88
|
+
# Public: Deletes the Rule.
|
89
|
+
#
|
90
|
+
# Returns Boolean indicating success.
|
91
|
+
def delete(service=Azure::ServiceBus::Rules)
|
92
|
+
service.delete(self)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
require "azure/service_bus/rules/uri"
|
2
|
+
require "nokogiri"
|
3
|
+
|
4
|
+
module Azure
|
5
|
+
module ServiceBus
|
6
|
+
module Rules
|
7
|
+
class Service < Core::Service
|
8
|
+
def initialize(signer=Azure::ServiceBus::Auth::Wrap.new)
|
9
|
+
super(signer, Azure::ServiceBus::Auth::Authorizer.new)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module Services
|
14
|
+
# Public: Create Rule.
|
15
|
+
#
|
16
|
+
# topic_name - String representing the name of the Topic.
|
17
|
+
# subscription_name - String representing the name of the Subscription.
|
18
|
+
# rule_name - String representing the name of the Rule.
|
19
|
+
# filter - A Hash representing `filter` option. (optional)
|
20
|
+
#
|
21
|
+
# Example:
|
22
|
+
#
|
23
|
+
# {"SqlFilterExpression" => {
|
24
|
+
# "SqlExpression" => "MyProperty='XYZ'"
|
25
|
+
# }}
|
26
|
+
#
|
27
|
+
# Becomes:
|
28
|
+
#
|
29
|
+
# <Filter i:type="SqlFilterExpression">
|
30
|
+
# <SqlExpression>MyProperty='XYZ'</SqlExpression>
|
31
|
+
# </Filter>
|
32
|
+
#
|
33
|
+
# action - A Hash representing `action` option. (optional)
|
34
|
+
#
|
35
|
+
# Example:
|
36
|
+
#
|
37
|
+
# {"SqlFilterAction" => {
|
38
|
+
# "SqlExpression" => "set MyProperty2 = 'ABC'"
|
39
|
+
# }}
|
40
|
+
#
|
41
|
+
# Becomes:
|
42
|
+
#
|
43
|
+
# <Action i:type="SqlFilterAction">
|
44
|
+
# <SqlExpression>set MyProperty2 = 'ABC'</SqlExpression>
|
45
|
+
# </Action> - String representing the name of the new Rule.
|
46
|
+
class Create < Service
|
47
|
+
def call(topic_name, subscription_name, rule_name, filter=nil, action=nil)
|
48
|
+
uri = URI.rule(topic_name, subscription_name, rule_name)
|
49
|
+
|
50
|
+
doc = Nokogiri::XML::Builder.new do |xml|
|
51
|
+
xml.entry(:xmlns => 'http://www.w3.org/2005/Atom') {
|
52
|
+
xml.content(:type => 'application/xml') {
|
53
|
+
xml.RuleDescription('xmlns' => 'http://schemas.microsoft.com/netservices/2010/10/servicebus/connect',
|
54
|
+
'xmlns:i' => 'http://www.w3.org/2001/XMLSchema-instance') do |rule|
|
55
|
+
|
56
|
+
# FIXME: Abstract this two.
|
57
|
+
unless filter.nil?
|
58
|
+
rule.Filter("i:type" => filter.keys.first) do |filter_node|
|
59
|
+
filter[filter.keys.first].each do |k,v|
|
60
|
+
filter_node.send(k, v)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
unless action.nil?
|
66
|
+
rule.Action("i:type" => action.keys.first) do |action_node|
|
67
|
+
action[action.keys.first].each do |k,v|
|
68
|
+
action_node.send(k, v)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
}
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
super(:put, uri, doc.to_xml) do |request|
|
78
|
+
request.headers["Content-Type"] = "application/atom+xml;type=entry;charset=utf-8"
|
79
|
+
request.headers.delete("Content-MD5")
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Delete a Rule.
|
85
|
+
#
|
86
|
+
# topic_name - String representing the name of the Topic.
|
87
|
+
# subscription_name - String representing the name of the Subscription.
|
88
|
+
# rule_name - String representing the name of the Rule.
|
89
|
+
class Delete < Service
|
90
|
+
def call(topic_name, subscription_name, rule_name)
|
91
|
+
uri = URI.rule(topic_name, subscription_name, rule_name)
|
92
|
+
super(:delete, uri)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
# Get a Rule.
|
97
|
+
#
|
98
|
+
# topic_name - String representing the name of the Topic.
|
99
|
+
# subscription_name - String representing the name of the Subscription.
|
100
|
+
# rule_name - String representing the name of the Rule.
|
101
|
+
class GetRule < Service
|
102
|
+
def call(topic_name, subscription_name, rule_name)
|
103
|
+
uri = URI.rule(topic_name, subscription_name, rule_name)
|
104
|
+
super(:get, uri)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# List Rules.
|
109
|
+
#
|
110
|
+
# topic_name - String representing the name of the Topic.
|
111
|
+
# subscription_name - String representing the name of the Subscription.
|
112
|
+
class ListRules < Service
|
113
|
+
def call(topic_name, subscription_name)
|
114
|
+
uri = URI.collection(topic_name, subscription_name)
|
115
|
+
super(:get, uri)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "azure/configuration"
|
2
|
+
require "uri"
|
3
|
+
|
4
|
+
module Azure
|
5
|
+
module ServiceBus
|
6
|
+
module Rules
|
7
|
+
module URI
|
8
|
+
# Public: Generate the URI for a given rule.
|
9
|
+
#
|
10
|
+
# topic_name - String representing the name of the Topic.
|
11
|
+
# subscription_name - String representing the name of the Subscription.
|
12
|
+
# rule_name - String representing the name of the new Rule.
|
13
|
+
#
|
14
|
+
# Returns a URI.
|
15
|
+
def self.rule(topic_name, subscription_name, rule_name, host=Azure.config.service_bus_host)
|
16
|
+
path = "#{topic_name}/subscriptions/#{subscription_name}/rules/#{rule_name}"
|
17
|
+
generate(host, path)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Public: Generate the URI for a collection of rules.
|
21
|
+
#
|
22
|
+
# topic_name - String representing the name of the Topic.
|
23
|
+
# subscription_name - String representing the name of the Subscription.
|
24
|
+
#
|
25
|
+
# Returns a URI.
|
26
|
+
def self.collection(topic_name, subscription_name, host=Azure.config.service_bus_host)
|
27
|
+
path = "#{topic_name}/subscriptions/#{subscription_name}/rules"
|
28
|
+
generate(host, path)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.generate(host, path, query={})
|
32
|
+
uri = ::URI.parse(File.join(host, path))
|
33
|
+
uri.query = ::URI.encode_www_form(query) unless query.empty?
|
34
|
+
uri
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|