azure 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. data/Gemfile +3 -0
  2. data/Gemfile.lock +36 -0
  3. data/README.md +3 -0
  4. data/Rakefile +81 -0
  5. data/azure.gemspec +20 -9
  6. data/lib/azure.rb +4 -0
  7. data/lib/azure/atom.rb +170 -0
  8. data/lib/azure/auth.rb +29 -0
  9. data/lib/azure/blobs.rb +620 -0
  10. data/lib/azure/blobs/blob.rb +360 -0
  11. data/lib/azure/blobs/container.rb +209 -0
  12. data/lib/azure/blobs/service.rb +396 -0
  13. data/lib/azure/blobs/shared_access_signature.rb +84 -0
  14. data/lib/azure/blobs/uri.rb +60 -0
  15. data/lib/azure/configuration.rb +121 -0
  16. data/lib/azure/core/auth/shared_key.rb +95 -0
  17. data/lib/azure/core/auth/shared_key_lite.rb +34 -0
  18. data/lib/azure/core/collection.rb +118 -0
  19. data/lib/azure/core/service.rb +43 -0
  20. data/lib/azure/core/signer.rb +32 -0
  21. data/lib/azure/core/utils/interval.rb +97 -0
  22. data/lib/azure/core/utils/queryable.rb +74 -0
  23. data/lib/azure/core/utils/storage_service_properties.rb +83 -0
  24. data/lib/azure/core/utils/string.rb +59 -0
  25. data/lib/azure/error.rb +72 -0
  26. data/lib/azure/queues.rb +272 -0
  27. data/lib/azure/queues/message.rb +174 -0
  28. data/lib/azure/queues/queue.rb +187 -0
  29. data/lib/azure/queues/service.rb +263 -0
  30. data/lib/azure/queues/service_properties.rb +152 -0
  31. data/lib/azure/queues/uri.rb +78 -0
  32. data/lib/azure/request.rb +102 -0
  33. data/lib/azure/response.rb +93 -0
  34. data/lib/azure/service_bus.rb +4 -0
  35. data/lib/azure/service_bus/auth/authorizer.rb +22 -0
  36. data/lib/azure/service_bus/auth/uri.rb +52 -0
  37. data/lib/azure/service_bus/auth/wrap.rb +37 -0
  38. data/lib/azure/service_bus/auth/wrap_service.rb +76 -0
  39. data/lib/azure/service_bus/auth/wrap_token.rb +45 -0
  40. data/lib/azure/service_bus/auth/wrap_token_manager.rb +46 -0
  41. data/lib/azure/service_bus/brokered_message.rb +139 -0
  42. data/lib/azure/service_bus/brokered_message_serializer.rb +113 -0
  43. data/lib/azure/service_bus/queues.rb +194 -0
  44. data/lib/azure/service_bus/queues/queue.rb +100 -0
  45. data/lib/azure/service_bus/queues/queue_serializer.rb +51 -0
  46. data/lib/azure/service_bus/queues/service.rb +154 -0
  47. data/lib/azure/service_bus/queues/uri.rb +80 -0
  48. data/lib/azure/service_bus/rules.rb +110 -0
  49. data/lib/azure/service_bus/rules/rule.rb +97 -0
  50. data/lib/azure/service_bus/rules/service.rb +122 -0
  51. data/lib/azure/service_bus/rules/uri.rb +39 -0
  52. data/lib/azure/service_bus/service_bus_service.rb +22 -0
  53. data/lib/azure/service_bus/subscriptions.rb +170 -0
  54. data/lib/azure/service_bus/subscriptions/service.rb +133 -0
  55. data/lib/azure/service_bus/subscriptions/subscription.rb +164 -0
  56. data/lib/azure/service_bus/subscriptions/subscription_serializer.rb +74 -0
  57. data/lib/azure/service_bus/subscriptions/uri.rb +71 -0
  58. data/lib/azure/service_bus/topics.rb +120 -0
  59. data/lib/azure/service_bus/topics/service.rb +98 -0
  60. data/lib/azure/service_bus/topics/topic.rb +122 -0
  61. data/lib/azure/service_bus/topics/topic_serializer.rb +44 -0
  62. data/lib/azure/service_bus/topics/uri.rb +58 -0
  63. data/lib/azure/service_runtime/client/goal_state_pipe_monitor.rb +21 -0
  64. data/lib/azure/service_runtime/client/goal_state_protocol.rb +18 -0
  65. data/lib/azure/service_runtime/client/runtime_client.rb +135 -0
  66. data/lib/azure/service_runtime/deployment.rb +24 -0
  67. data/lib/azure/service_runtime/local_resource.rb +15 -0
  68. data/lib/azure/service_runtime/role.rb +17 -0
  69. data/lib/azure/service_runtime/role_environment.rb +206 -0
  70. data/lib/azure/service_runtime/role_environment_change.rb +32 -0
  71. data/lib/azure/service_runtime/role_instance.rb +35 -0
  72. data/lib/azure/service_runtime/role_instance_endpoint.rb +14 -0
  73. data/lib/azure/tables.rb +215 -0
  74. data/lib/azure/tables/auth/shared_key.rb +71 -0
  75. data/lib/azure/tables/auth/shared_key_lite.rb +30 -0
  76. data/lib/azure/tables/entities_collection.rb +66 -0
  77. data/lib/azure/tables/entity.rb +127 -0
  78. data/lib/azure/tables/service.rb +211 -0
  79. data/lib/azure/tables/table.rb +129 -0
  80. data/lib/azure/tables/tables_collection.rb +62 -0
  81. data/lib/azure/tables/types.rb +65 -0
  82. data/lib/azure/tables/uri.rb +62 -0
  83. data/test/fixtures/32px-fulls-black.jpg +0 -0
  84. data/test/fixtures/all_containers.xml +20 -0
  85. data/test/fixtures/all_tables.xml +22 -0
  86. data/test/fixtures/create_table_response_entry.xml +15 -0
  87. data/test/fixtures/error.xml +5 -0
  88. data/test/fixtures/insert_entity_response_entry.xml +25 -0
  89. data/test/fixtures/messages.xml +12 -0
  90. data/test/fixtures/query_entities_empty_response.xml +7 -0
  91. data/test/fixtures/query_entities_response.xml +45 -0
  92. data/test/fixtures/queue_service_properties.xml +22 -0
  93. data/test/fixtures/queue_service_properties_original.xml +19 -0
  94. data/test/fixtures/queues.xml +16 -0
  95. data/test/fixtures/sb_default_create_queue_response.xml +23 -0
  96. data/test/fixtures/sb_default_create_topic_response.xml +18 -0
  97. data/test/fixtures/sb_get_access_token_response.txt +1 -0
  98. data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -0
  99. data/test/integration/blobs/auth_test.rb +19 -0
  100. data/test/integration/blobs/blob_test.rb +61 -0
  101. data/test/integration/blobs/clear_page_range_test.rb +19 -0
  102. data/test/integration/blobs/copy_test.rb +33 -0
  103. data/test/integration/blobs/create_blobs_test.rb +51 -0
  104. data/test/integration/blobs/create_container_test.rb +13 -0
  105. data/test/integration/blobs/create_snapshot_test.rb +17 -0
  106. data/test/integration/blobs/delete_blob_snapshots_test.rb +19 -0
  107. data/test/integration/blobs/delete_blobs_test.rb +25 -0
  108. data/test/integration/blobs/delete_container_test.rb +24 -0
  109. data/test/integration/blobs/delete_snapshot_test.rb +17 -0
  110. data/test/integration/blobs/get_blob_snapshot_test.rb +18 -0
  111. data/test/integration/blobs/get_blobs_test.rb +31 -0
  112. data/test/integration/blobs/get_page_range_test.rb +19 -0
  113. data/test/integration/blobs/list_blobs_test.rb +39 -0
  114. data/test/integration/blobs/list_containers_test.rb +28 -0
  115. data/test/integration/blobs/manage_blob_leases_test.rb +45 -0
  116. data/test/integration/blobs/manage_blob_metadata_test.rb +51 -0
  117. data/test/integration/blobs/manage_blob_properties_test.rb +25 -0
  118. data/test/integration/blobs/manage_blob_service_properties_test.rb +38 -0
  119. data/test/integration/blobs/manage_container_metadata_test.rb +46 -0
  120. data/test/integration/blobs/manage_container_permissions_test.rb +17 -0
  121. data/test/integration/blobs/update_page_range_test.rb +20 -0
  122. data/test/integration/queues/clear_messages_test.rb +22 -0
  123. data/test/integration/queues/create_queue_test.rb +13 -0
  124. data/test/integration/queues/delete_message_test.rb +42 -0
  125. data/test/integration/queues/delete_queue_test.rb +24 -0
  126. data/test/integration/queues/get_messages_test.rb +39 -0
  127. data/test/integration/queues/list_queues_test.rb +43 -0
  128. data/test/integration/queues/manage_queue_metadata_test.rb +45 -0
  129. data/test/integration/queues/manage_queue_service_properties_test.rb +27 -0
  130. data/test/integration/queues/peek_messages_test.rb +55 -0
  131. data/test/integration/queues/put_message_test.rb +31 -0
  132. data/test/integration/queues/update_message_test.rb +46 -0
  133. data/test/integration/service_bus/auth_test.rb +18 -0
  134. data/test/integration/service_bus/queues/create_queue_test.rb +25 -0
  135. data/test/integration/service_bus/queues/delete_message_from_queue_test.rb +29 -0
  136. data/test/integration/service_bus/queues/delete_queue_test.rb +25 -0
  137. data/test/integration/service_bus/queues/get_queue_test.rb +23 -0
  138. data/test/integration/service_bus/queues/list_queues_test.rb +39 -0
  139. data/test/integration/service_bus/queues/peek_message_from_queue_test.rb +34 -0
  140. data/test/integration/service_bus/queues/read_and_delete_message_from_queue_test.rb +31 -0
  141. data/test/integration/service_bus/queues/send_message_to_queue_test.rb +22 -0
  142. data/test/integration/service_bus/queues/unlock_message_from_queue_test.rb +36 -0
  143. data/test/integration/service_bus/rules/create_rule_test.rb +19 -0
  144. data/test/integration/service_bus/rules/delete_rule_test.rb +17 -0
  145. data/test/integration/service_bus/rules/get_rule_test.rb +21 -0
  146. data/test/integration/service_bus/rules/list_rules_test.rb +24 -0
  147. data/test/integration/service_bus/rules/rule_test.rb +16 -0
  148. data/test/integration/service_bus/subscriptions/create_subscription_test.rb +25 -0
  149. data/test/integration/service_bus/subscriptions/delete_message_from_subscription_test.rb +31 -0
  150. data/test/integration/service_bus/subscriptions/delete_subscription_test.rb +30 -0
  151. data/test/integration/service_bus/subscriptions/fetch_subscription_test.rb +28 -0
  152. data/test/integration/service_bus/subscriptions/list_subscriptions_test.rb +23 -0
  153. data/test/integration/service_bus/subscriptions/peek_lock_message_from_subscription_test.rb +42 -0
  154. data/test/integration/service_bus/subscriptions/read_delete_message_from_subscription_test.rb +36 -0
  155. data/test/integration/service_bus/subscriptions/subscription_test.rb +31 -0
  156. data/test/integration/service_bus/subscriptions/unlock_message_from_subscription_test.rb +43 -0
  157. data/test/integration/service_bus/topics/create_topic_test.rb +25 -0
  158. data/test/integration/service_bus/topics/delete_topic_test.rb +25 -0
  159. data/test/integration/service_bus/topics/get_topic_test.rb +23 -0
  160. data/test/integration/service_bus/topics/list_topics_test.rb +39 -0
  161. data/test/integration/service_bus/topics/send_message_to_topic_test.rb +23 -0
  162. data/test/integration/tables/auth_test.rb +29 -0
  163. data/test/integration/tables/creating_tables_test.rb +16 -0
  164. data/test/integration/tables/delete_entity_test.rb +39 -0
  165. data/test/integration/tables/deleting_table_test.rb +22 -0
  166. data/test/integration/tables/insert_entity_test.rb +23 -0
  167. data/test/integration/tables/merge_entity_test.rb +28 -0
  168. data/test/integration/tables/query_entities_test.rb +131 -0
  169. data/test/integration/tables/query_tables_test.rb +63 -0
  170. data/test/integration/tables/update_entity_test.rb +54 -0
  171. data/test/integration/test_helper.rb +14 -0
  172. data/test/support/blobs.rb +12 -0
  173. data/test/support/env.rb +5 -0
  174. data/test/support/fixtures.rb +22 -0
  175. data/test/support/stubs.rb +28 -0
  176. data/test/support/table_names.rb +44 -0
  177. data/test/test_helper.rb +10 -0
  178. data/test/unit/atom_test.rb +58 -0
  179. data/test/unit/auth_test.rb +24 -0
  180. data/test/unit/blobs/blob_test.rb +5 -0
  181. data/test/unit/blobs/container_test.rb +67 -0
  182. data/test/unit/blobs/service_test.rb +17 -0
  183. data/test/unit/blobs/shared_access_signature_test.rb +66 -0
  184. data/test/unit/blobs_test.rb +156 -0
  185. data/test/unit/core/service_test.rb +57 -0
  186. data/test/unit/core/utils/interval_test.rb +70 -0
  187. data/test/unit/core/utils/queryable_test.rb +69 -0
  188. data/test/unit/core/utils/storage_service_properties_test.rb +66 -0
  189. data/test/unit/error_test.rb +39 -0
  190. data/test/unit/queues/message_test.rb +40 -0
  191. data/test/unit/queues/queue_test.rb +64 -0
  192. data/test/unit/queues/service_properties.rb +35 -0
  193. data/test/unit/request_test.rb +38 -0
  194. data/test/unit/response_test.rb +43 -0
  195. data/test/unit/service_bus/auth/authorizer_test.rb +27 -0
  196. data/test/unit/service_bus/auth/wrap_token_test.rb +28 -0
  197. data/test/unit/service_bus/queues/queue_test.rb +38 -0
  198. data/test/unit/service_bus/topics/topic_test.rb +33 -0
  199. data/test/unit/service_runtime/data/goalstate.xml +9 -0
  200. data/test/unit/service_runtime/data/roleenvironmentdata.xml +29 -0
  201. data/test/unit/service_runtime/data/runtime.xml +6 -0
  202. data/test/unit/service_runtime/role_environment_test.rb +144 -0
  203. data/test/unit/tables/auth/shared_key_lite_test.rb +39 -0
  204. data/test/unit/tables/auth/shared_key_test.rb +45 -0
  205. data/test/unit/tables/entities_collection_test.rb +39 -0
  206. data/test/unit/tables/entity_test.rb +72 -0
  207. data/test/unit/tables/table_test.rb +57 -0
  208. data/test/unit/tables_test.rb +302 -0
  209. data/test/unit/types_test.rb +67 -0
  210. metadata +310 -47
  211. data/LICENSE +0 -0
  212. data/README +0 -0
@@ -0,0 +1,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