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