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,174 @@
1
+ require "azure/queues"
2
+ require "azure/queues/uri"
3
+ require "azure/error"
4
+ require "uri"
5
+ require "time"
6
+
7
+ module Azure
8
+ module Queues
9
+ # Public: Representation of a Message in a message queue.
10
+ class Message
11
+ include Azure::ErrorHandler
12
+
13
+ # The message queue for this message
14
+ #
15
+ # Returns a Azure::Queues::Queue object
16
+ attr_accessor :queue
17
+
18
+ # MessageId
19
+ # GUID value that identifies the message in the queue
20
+ #
21
+ # returns a String
22
+ attr_accessor :id
23
+
24
+ # InsertionTime
25
+ # UTC value formatted as described in RFC 1123
26
+ #
27
+ # Returns a String
28
+ attr_accessor :insertion_time
29
+
30
+ # ExpirationTime
31
+ # UTC value formatted as described in RFC 1123
32
+ #
33
+ # Returns a String
34
+ attr_accessor :expiration_time
35
+
36
+ # TimeNextVisible
37
+ # UTC value formatted as described in RFC 1123
38
+ #
39
+ # Returns a String
40
+ attr_accessor :time_next_visible
41
+
42
+ # PopReceipt
43
+ #
44
+ # Returns a String
45
+ attr_accessor :pop_receipt
46
+
47
+ # DequeueCount
48
+ # Has a value of 1 the first time the message is dequeued. This value is incremented each time the message is subsequently dequeued.
49
+ #
50
+ # Returns an Integer
51
+ attr_accessor :dequeue_count
52
+
53
+ # MessageText
54
+ #
55
+ # Returns a String
56
+ attr_accessor :text
57
+
58
+ # Amount of time in seconds the message remains invisible for GET
59
+ # operations.
60
+ #
61
+ # Returns an Integer.
62
+ attr_accessor :visibility_timeout
63
+
64
+ # Amount of seconds until this message expires.
65
+ #
66
+ # Returns an Integer.
67
+ attr_accessor :ttl
68
+
69
+ # Public: Instantiate a message from an XML entry.
70
+ #
71
+ # entry - An XML::Node element.
72
+ #
73
+ # Returns a Message.
74
+ def self.from_node(node)
75
+ pop_receipt = (node % "PopReceipt")
76
+ time_next_visible = (node % "TimeNextVisible")
77
+ text = (node % "MessageText").text
78
+
79
+ new(text) do |m|
80
+ m.id = (node % "MessageId").text
81
+ m.insertion_time = Time.parse((node % "InsertionTime").text)
82
+ m.expiration_time = Time.parse((node % "ExpirationTime").text)
83
+ m.dequeue_count = (node % "DequeueCount").text.to_i
84
+ m.pop_receipt = pop_receipt && pop_receipt.text
85
+ m.time_next_visible = time_next_visible && Time.parse(time_next_visible.text)
86
+ yield m if block_given?
87
+ end
88
+ end
89
+
90
+ # Public: Instantiate a message from an error object.
91
+ #
92
+ # error - An Azure::Error.
93
+ #
94
+ # Returns a Message.
95
+ def self.from_error(error)
96
+ message = new(nil)
97
+ message.error = error
98
+ message
99
+ end
100
+
101
+ # Public: Attempt to convert an object into a Message. If the object can't
102
+ # be converted, we return nil.
103
+ #
104
+ # object - An object that might be converted into a Message.
105
+ #
106
+ # Returns a Message or nil.
107
+ def self.try_convert(object)
108
+ if object.respond_to?(:to_message)
109
+ object.to_message
110
+ elsif object.respond_to?(:to_str)
111
+ new(object.to_str)
112
+ end
113
+ end
114
+
115
+ # Public: Initialize the message.
116
+ #
117
+ # text - The message text
118
+ # service - The Queue service to perform external calls.
119
+ def initialize(text, service=Azure::Queues)
120
+ @text = text
121
+ @visibility_timeout = 0
122
+ @ttl = 7 * 24 * 3600 # one week
123
+ @service = service
124
+ yield self if block_given?
125
+ end
126
+
127
+ # Public: Compare two messages to see if they are the same.
128
+ #
129
+ # other - A Message.
130
+ #
131
+ # Returns true|false.
132
+ def ==(other)
133
+ id == other.id
134
+ end
135
+
136
+ # Public: Deletes this message from the message queue.
137
+ #
138
+ # Returns true|false to indicate success.
139
+ def delete
140
+ @service.delete_message(self)
141
+ end
142
+
143
+ # Public: Updates this message with a new visibility timeout and new text
144
+ # if modified.
145
+ #
146
+ # Returns true|false to indicate success.
147
+ def update!
148
+ @service.update_message(self)
149
+ end
150
+
151
+ # Public: Turn this object into an Azure::Queues::Message. This is here
152
+ # just so we can use Message.try_convert and Message().
153
+ #
154
+ # Returns self.
155
+ def to_message
156
+ self
157
+ end
158
+ end
159
+
160
+ module ::Kernel
161
+ # Attempt to convert an object into a Message, or fail if the conversion
162
+ # can't be done.
163
+ #
164
+ # object - An object that might be converted into a message.
165
+ #
166
+ # Returns a Message.
167
+ # Raises ArgumentError if the object can't be converted into a Message.
168
+ def Message(object)
169
+ Message.try_convert(object) ||
170
+ raise(ArgumentError, "invalid value for Message(): #{object.inspect}")
171
+ end
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,187 @@
1
+ require "azure/queues"
2
+ require "azure/queues/uri"
3
+ require "azure/error"
4
+ require "uri"
5
+
6
+ module Azure
7
+ module Queues
8
+ # Public: Representation of a Queue in the storage system.
9
+ class Queue
10
+ include Azure::ErrorHandler
11
+
12
+ # Get the Queue's URI.
13
+ #
14
+ # Returns a URI.
15
+ attr :url
16
+
17
+ # Get the Queue's name.
18
+ #
19
+ # Returns a String.
20
+ attr :name
21
+
22
+ # Get the Queue's metadata.
23
+ #
24
+ # Returns a Hash.
25
+ attr_accessor :metadata
26
+
27
+ # Public: Instantiate a queue from an XML entry.
28
+ #
29
+ # entry - An XML::Node element.
30
+ #
31
+ # Returns a Queue.
32
+ def self.from_node(node)
33
+ name = (node % "Name").text
34
+ url = URI((node % "Url").text)
35
+
36
+ metadata = (node / "Metadata *").each_with_object({}) do |n, metadata|
37
+ metadata[n.name] = n.text
38
+ end
39
+
40
+ new(name, url, metadata)
41
+ end
42
+
43
+ # Public: Instantiate a queue from an error object.
44
+ #
45
+ # error - An Azure::Error.
46
+ #
47
+ # Returns a Queue.
48
+ def self.from_error(error)
49
+ queue = new(nil)
50
+ queue.error = error
51
+ queue
52
+ end
53
+
54
+ # Public: Initialize the queue.
55
+ #
56
+ # name - A String with the name of the queue.
57
+ # url - The URI of the queue in the service.
58
+ # metadata - A Hash with metadata key-value pairs.
59
+ # service - The Queue service to perform external calls.
60
+ def initialize(name, url=Azure::Queues::URI.queue(name), metadata = {}, service=Azure::Queues)
61
+ @name = name
62
+ @url = url
63
+ @metadata = metadata
64
+ @service = service
65
+ end
66
+
67
+ # Public: Add a message into the queue.
68
+ #
69
+ # message - An Azure::Queues::Message.
70
+ #
71
+ # Returns self.
72
+ def push(message)
73
+ message = Message(message)
74
+
75
+ @service.put_message(self, message, {
76
+ visibilitytimeout: message.visibility_timeout,
77
+ messagettl: message.ttl
78
+ })
79
+
80
+ self
81
+ end
82
+ alias_method :<<, :push
83
+ alias_method :enq, :push
84
+
85
+ # Public: Get the latest message from the queue.
86
+ #
87
+ # options - A Hash of options (optional):
88
+ # :visibilitytimeout - Update the message returned to be
89
+ # invisible for this many seconds
90
+ # (default: 0).
91
+ #
92
+ # Returns the message, or nil if the queue is empty.
93
+ def pop(options={})
94
+ get(1, options).first
95
+ end
96
+ alias_method :deq, :pop
97
+ alias_method :shift, :pop
98
+
99
+ # Public: Get a list of messages from the queue.
100
+ #
101
+ # num - The amount of messages to peek (must be 1 <= num <= 32).
102
+ # options - A Hash of options (optional):
103
+ # :visibilitytimeout - Update the messages returned to be
104
+ # invisible for this many seconds (must be
105
+ # 1 second <= timeout <= 7 days).
106
+ # (default: 1 second).
107
+ #
108
+ # Returns an Array of Messages.
109
+ def get(num, options={})
110
+ options[:numofmessages] = num
111
+ @service.get_messages(self, options)
112
+ end
113
+
114
+ # Public: Peek the latest message from the queue (without changing its
115
+ # visibility).
116
+ #
117
+ # Returns the message, or nil if the queue is empty.
118
+ def peek
119
+ look_at(1).first
120
+ end
121
+
122
+ # Public: Peek a list of messages from the queue (without changing their
123
+ # visibility).
124
+ #
125
+ # num - The amount of messages to peek (must be 1 <= num <= 32).
126
+ #
127
+ # Returns an Array of Messages.
128
+ def look_at(num)
129
+ @service.peek_messages(self, numofmessages: num)
130
+ end
131
+
132
+ # Public: Remove all messages from the queue.
133
+ #
134
+ # Returns true|false to indicate success.
135
+ def clear
136
+ @service.clear_messages(self)
137
+ end
138
+
139
+ # Public: Compare two queues to see if they are the same.
140
+ #
141
+ # other - A queue.
142
+ #
143
+ # Returns true|false.
144
+ def ==(other)
145
+ name == other.name
146
+ end
147
+
148
+ # Public: Force a reload of this queue metadata from the server.
149
+ #
150
+ # Returns the Hash of metadata.
151
+ def load_metadata!
152
+ @service.load_metadata(self)
153
+ end
154
+
155
+ # Public: Put the current queue's metadata into the storage service.
156
+ #
157
+ # Returns true|false to indicate success.
158
+ def save_metadata!
159
+ @service.save_metadata(self)
160
+ end
161
+
162
+ # Public: Extracts metadata from a hash containing HTTP headers (so
163
+ # "x-ms-meta-Name" => "Foo" is extracted as "Name" => "Foo"). This
164
+ # replaces the metadata of this container.
165
+ #
166
+ # hash - A hash of String => String with HTTP header values.
167
+ #
168
+ # Returns a Hash with the extracted metadata.
169
+ def extract_metadata(hash)
170
+ new_metadata = hash.each_with_object({}) do |(k,v), hash|
171
+ if key = k[/^x-ms-meta-(?<key>.*)?/, :key]
172
+ hash[key] = v
173
+ end
174
+ end
175
+
176
+ metadata.replace(new_metadata)
177
+ end
178
+
179
+ # Public: Deletes this queue from the storage service.
180
+ #
181
+ # Returns true|false to indicate whether the delete was successful or not.
182
+ def delete
183
+ @service.delete(self)
184
+ end
185
+ end
186
+ end
187
+ end
@@ -0,0 +1,263 @@
1
+ require "azure/core/service"
2
+ require "azure/core/auth/shared_key"
3
+ require "azure/queues/uri"
4
+ require "nokogiri"
5
+
6
+ module Azure
7
+ module Queues
8
+
9
+ class Service < Core::Service
10
+ def initialize(signer=Azure::Core::Auth::SharedKey.new)
11
+ super(signer)
12
+ end
13
+ end
14
+
15
+ module Services
16
+
17
+ # Public: gets the properties of a storage account’s Queue Service.
18
+ class GetServiceProperties < Service
19
+
20
+ # Public: Invoke the service.
21
+ #
22
+ # options - Options for this query:
23
+ # :timeout - (optional) timeout for the request in seconds
24
+ #
25
+ # Returns a Response.
26
+ def call(options = {})
27
+ uri = Queues::URI.service_properties(options)
28
+
29
+ super(:get, uri)
30
+ end
31
+ end
32
+
33
+ # Public: sets the properties of a storage account’s Queue Service.
34
+ class SetServiceProperties < Service
35
+
36
+ # Public: Invoke the service.
37
+ #
38
+ # properties - an Azure::Queues::ServiceProperties object
39
+ # options - Options for this query:
40
+ # :timeout - (optional) timeout for the request in seconds
41
+ #
42
+ # Returns a Response.
43
+ def call(properties, options = {})
44
+ uri = Queues::URI.service_properties(options)
45
+
46
+ body = properties.to_xml
47
+
48
+ super(:put, uri, body)
49
+ end
50
+ end
51
+
52
+ # Public: List queues from a storage account
53
+ class ListQueues < Service
54
+ # Public: Invoke the service.
55
+ #
56
+ # options - A hash of options
57
+ # :prefix - Filters the results to return only
58
+ # queues with names that begin with the
59
+ # specified prefix.
60
+ # :marker - A string value that identifies the
61
+ # portion of the list to be returned
62
+ # with the next list operation.
63
+ # :maxresults - Specifies the maximum number of queues
64
+ # to return.
65
+ #
66
+ # Returns a Response.
67
+ def call(options)
68
+ uri = Queues::URI.collection(options)
69
+ super(:get, uri)
70
+ end
71
+ end
72
+
73
+ # Public: Add a queue to the storage account.
74
+ class CreateQueue < Service
75
+
76
+ # Public: Invoke the service.
77
+ #
78
+ # name - The name of the new container.
79
+ # metadata - User defined metadata for this queue (default: {}).
80
+ #
81
+ # Returns a Response.
82
+ def call(name, metadata = {})
83
+ uri = Queues::URI.queue(name)
84
+
85
+ super(:put, uri) do |request|
86
+ metadata.each do |name, value|
87
+ request.headers["x-ms-meta-#{name}"] = value
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ # Public: Deletes a queue from the storage account.
94
+ class DeleteQueue < Service
95
+
96
+ # Public: Invoke the service.
97
+ #
98
+ # name - The name of the queue.
99
+ #
100
+ # Returns a Response.
101
+ def call(name)
102
+ uri = Queues::URI.queue(name)
103
+ super(:delete, uri)
104
+ end
105
+ end
106
+
107
+ # Public: Get queue metadata
108
+ class GetMetadata < Service
109
+ # Public: Invoke the service.
110
+ #
111
+ # name - The queue name.
112
+ #
113
+ # Returns a Response.
114
+ def call(name)
115
+ uri = Queues::URI.queue(name, comp: "metadata")
116
+ super(:head, uri)
117
+ end
118
+ end
119
+
120
+ # Public: Set queue metadata.
121
+ class SetMetadata < Service
122
+ # Public: Invoke the service.
123
+ #
124
+ # name - The queue name.
125
+ # metadata - User defined metadata for this queue.
126
+ #
127
+ # Returns a Response.
128
+ def call(name, metadata)
129
+ uri = Queues::URI.queue(name, comp: "metadata")
130
+
131
+ super(:put, uri) do |request|
132
+ metadata.each do |name, value|
133
+ request.headers["x-ms-meta-#{name}"] = value
134
+ end
135
+ end
136
+ end
137
+ end
138
+
139
+ ## Messages
140
+
141
+ # Public: Add a message to the message queue
142
+ class PutMessage < Service
143
+ # Public: Invoke the service.
144
+ #
145
+ # queue_name - The name of the queue.
146
+ # text - The message's text.
147
+ # options - A Hash of options for this message (optional):
148
+ # :visibilitytimeout - Amount of seconds during which the
149
+ # message will be invisible
150
+ # (default: 0).
151
+ # :messagettl - Time in seconds until the message is
152
+ # unreacable, between 1 second and 7
153
+ # days (default: 7 days).
154
+ #
155
+ # Returns a Response.
156
+ def call(queue_name, text, options = {})
157
+ uri = Queues::URI.messages(queue_name, options)
158
+
159
+ body = Nokogiri::XML::Builder.new do |xml|
160
+ xml.QueueMessage {
161
+ xml.MessageText text
162
+ }
163
+ end
164
+
165
+ super(:post, uri, body.to_xml)
166
+ end
167
+ end
168
+
169
+ # Public: Get a list of messages from the front of the message queue.
170
+ class GetMessages < Service
171
+ # Public: Invoke the service.
172
+ #
173
+ # queue_name - The name of the message queue.
174
+ # options - A Hash of options for this operation (optional):
175
+ # :visibilitytimeout - Update the returned messages'
176
+ # visibilitytimeout to this number (at
177
+ # least 1, the default).
178
+ # :numofmessages - A number between 1 and 32 of messages
179
+ # to return (default: 1).
180
+ #
181
+ # Returns a Response.
182
+ def call(queue_name, options={})
183
+ uri = Queues::URI.messages(queue_name, options)
184
+ super(:get, uri)
185
+ end
186
+ end
187
+
188
+ # Public: Peek at a list of messages from the front of the message queue.
189
+ class PeekMessages < Service
190
+ # Public: Invoke the service.
191
+ #
192
+ # queue_name - The name of the message queue.
193
+ # options - A Hash of options for this operation (optional):
194
+ # :numofmessages - A number between 1 and 32 of messages
195
+ # to return (default: 1).
196
+ #
197
+ # Returns a Response.
198
+ def call(queue_name, options={})
199
+ options.update(peekonly: 'true')
200
+ uri = Queues::URI.messages(queue_name, options)
201
+ super(:get, uri)
202
+ end
203
+ end
204
+
205
+ # Public: Deletes a message from the message queue.
206
+ class DeleteMessage < Service
207
+ # Public: Invoke the service.
208
+ #
209
+ # queue_name - The name of the message queue.
210
+ # message_id - The message id.
211
+ # pop_receipt - The receipt of a previous pop operation on this message.
212
+ #
213
+ # Returns a Response.
214
+ def call(queue_name, message_id, pop_receipt)
215
+ uri = Queues::URI.message(
216
+ queue_name, message_id, popreceipt: pop_receipt
217
+ )
218
+ super(:delete, uri)
219
+ end
220
+ end
221
+
222
+ # Public: Deletes all messages on the given queue.
223
+ class ClearMessages < Service
224
+ # Public: Invoke the service.
225
+ #
226
+ # queue_name - The name of the queue.
227
+ #
228
+ # Returns a Response.
229
+ def call(queue_name)
230
+ uri = Queues::URI.messages(queue_name)
231
+ super(:delete, uri)
232
+ end
233
+ end
234
+
235
+ # Public: Update a message from the message queue.
236
+ class UpdateMessage < Service
237
+ # Public: Invoke the service.
238
+ #
239
+ # queue_name - The name of the message queue.
240
+ # message_id - The message's id.
241
+ # text - The message's new text.
242
+ # timeout - A New visibilitytimeout for the message.
243
+ # pop_receipt - The receipt of a previous pop operation on this message.
244
+ #
245
+ # Returns a Response.
246
+ def call(queue_name, message_id, text, timeout, pop_receipt)
247
+ uri = Queues::URI.message(queue_name, message_id, {
248
+ popreceipt: pop_receipt, visibilitytimeout: timeout
249
+ })
250
+
251
+ body = Nokogiri::XML::Builder.new do |xml|
252
+ xml.QueueMessage {
253
+ xml.MessageText text
254
+ }
255
+ end
256
+
257
+ super(:put, uri, body.to_xml)
258
+ end
259
+ end
260
+
261
+ end
262
+ end
263
+ end