aliyun_iot 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -1
- data/lib/aliyun_iot.rb +1 -0
- data/lib/aliyun_iot/message.rb +16 -12
- data/lib/aliyun_iot/product.rb +6 -4
- data/lib/aliyun_iot/queue.rb +24 -13
- data/lib/aliyun_iot/result.rb +16 -0
- data/lib/aliyun_iot/topic.rb +7 -7
- data/lib/aliyun_iot/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b77eea144b0719d2d909bf02bf10fb08c3bfa6e6
|
4
|
+
data.tar.gz: 2b0450faec422ce648dbd016d5656cc1167545ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ecde67ef1d5385fa84b19be5d14e6100a00d921ab9bc67959a9dcb84dd5a3744f3b7270eb3f9c34ed7189017b167f33fe3ad5a1d6562e28d1082257fcbef720
|
7
|
+
data.tar.gz: 98f5eccf02d8dc2edc26c8bb657aca565294229b774a8b7ba33c1dcdd2f204112c074165b799648124a8214eeda128e34cc85f62d13c549cf6127031f8b395b5
|
data/README.md
CHANGED
@@ -60,6 +60,7 @@ production:
|
|
60
60
|
```ruby
|
61
61
|
AliyunIot::Queue.queues ## 列出所有队列
|
62
62
|
AliyunIot::Queue[QueueName].receive_message(WaitSeconds) ## 消费消息
|
63
|
+
AliyunIot::Queue[QueueName].batch_receive_message(MessageCount, WaitSeconds) ## 批量消费消息
|
63
64
|
AliyunIot::Queue[QueueName].peek ## 查看消息
|
64
65
|
AliyunIot::Queue[QueueName].create({DelaySeconds, MaximumMessageSize, MessageRetentionPeriod, VisibilityTimeout, PollingWaitSeconds, LoggingEnabled}) ## 创建队列
|
65
66
|
AliyunIot::Queue[QueueName].delete ## 删除队列
|
@@ -82,7 +83,8 @@ production:
|
|
82
83
|
|
83
84
|
```ruby
|
84
85
|
AliyunIot::Product.create(Name) ## 创建产品
|
85
|
-
AliyunIot::Product.
|
86
|
+
AliyunIot::Product.batch_get_device_state({DeviceName.1, DeviceName.2 ....}) ## 批量查询设备状态
|
87
|
+
AliyunIot::Product.check_regist_state(ApplyId) ## 查询注册状态
|
86
88
|
AliyunIot::Product.list_regist_info(ApplyId, PageSize, CurrentPage) ## 批量查询注册状态
|
87
89
|
AliyunIot::Product[ProductKey].update({ProductName, ProductDesc}) ## 修改产品信息
|
88
90
|
AliyunIot::Product[ProductKey].list({PageSize, CurrentPage}) ## 查询产品的设备列表
|
data/lib/aliyun_iot.rb
CHANGED
data/lib/aliyun_iot/message.rb
CHANGED
@@ -1,20 +1,12 @@
|
|
1
1
|
require "aliyun_iot/request/xml"
|
2
2
|
module AliyunIot
|
3
3
|
class Message
|
4
|
-
attr_reader :queue, :id, :body_md5, :body, :receipt_handle, :enqueue_at, :first_enqueue_at, :next_visible_at, :dequeue_count, :priority
|
4
|
+
attr_reader :h, :queue, :id, :body_md5, :body, :receipt_handle, :enqueue_at, :first_enqueue_at, :next_visible_at, :dequeue_count, :priority
|
5
5
|
|
6
|
-
def initialize(queue,
|
7
|
-
h =
|
6
|
+
def initialize(queue, h)
|
7
|
+
@h = h
|
8
8
|
@queue = queue
|
9
|
-
|
10
|
-
@body_md5 = h["MessageBodyMD5"]
|
11
|
-
@body = h["MessageBody"]
|
12
|
-
@enqueue_at = Time.at(h["EnqueueTime"].to_i/1000.0)
|
13
|
-
@first_enqueue_at = Time.at(h["FirstDequeueTime"].to_i/1000.0)
|
14
|
-
@dequeue_count = h["DequeueCount"].to_i
|
15
|
-
@priority = h["Priority"].to_i
|
16
|
-
@receipt_handle = h["ReceiptHandle"]
|
17
|
-
@next_visible_at = Time.at(h["NextVisibleTime"].to_i/1000.0)
|
9
|
+
set_message_info
|
18
10
|
end
|
19
11
|
|
20
12
|
#删除消息
|
@@ -56,6 +48,18 @@ module AliyunIot
|
|
56
48
|
end
|
57
49
|
|
58
50
|
private
|
51
|
+
|
52
|
+
def set_message_info
|
53
|
+
@id = h["MessageId"]
|
54
|
+
@body_md5 = h["MessageBodyMD5"]
|
55
|
+
@body = h["MessageBody"]
|
56
|
+
@enqueue_at = Time.at(h["EnqueueTime"].to_i/1000.0)
|
57
|
+
@first_enqueue_at = Time.at(h["FirstDequeueTime"].to_i/1000.0)
|
58
|
+
@dequeue_count = h["DequeueCount"].to_i
|
59
|
+
@priority = h["Priority"].to_i
|
60
|
+
@receipt_handle = h["ReceiptHandle"]
|
61
|
+
@next_visible_at = Time.at(h["NextVisibleTime"].to_i/1000.0)
|
62
|
+
end
|
59
63
|
|
60
64
|
def set_data(query)
|
61
65
|
{mqs_headers: {"x-mns-version" => "2015-06-06"}, query: query}
|
data/lib/aliyun_iot/product.rb
CHANGED
@@ -51,13 +51,15 @@ module AliyunIot
|
|
51
51
|
def regist_devices(params = {})
|
52
52
|
execute params, 'ApplyDeviceWithNames'
|
53
53
|
end
|
54
|
+
|
55
|
+
def batch_get_device_state(params = {})
|
56
|
+
execute params, 'BatchGetDeviceState'
|
57
|
+
end
|
54
58
|
|
55
59
|
def pub(params = {})
|
56
60
|
raise RequestException.new(Exception.new("message MessageContent is empty!")) if params[:MessageContent].nil?
|
57
|
-
|
58
|
-
|
59
|
-
params[:MessageContent] = Base64.urlsafe_encode64(params[:MessageContent]).chomp
|
60
|
-
execute params.merge(default_params), 'Pub'
|
61
|
+
params[:MessageContent] = Base64.encode64(params[:MessageContent]).chomp
|
62
|
+
execute params, 'Pub'
|
61
63
|
end
|
62
64
|
|
63
65
|
def sub(params = {})
|
data/lib/aliyun_iot/queue.rb
CHANGED
@@ -16,7 +16,7 @@ module AliyunIot
|
|
16
16
|
def queues(opts = {})
|
17
17
|
mqs_options = {query: "x-mns-prefix", offset: "x-mns-marker", size: "x-mns-ret-number"}
|
18
18
|
mqs_headers = opts.slice(*mqs_options.keys).reduce({}) { |mqs_headers, item| k, v = *item; mqs_headers.merge!(mqs_options[k] => v) }
|
19
|
-
response = Request::Xml.get("/queues", mqs_headers
|
19
|
+
response = Request::Xml.get("/queues", mqs_headers)
|
20
20
|
Hash.xml_array(response, "Queues", "Queue").collect { |item| Queue.new(URI(item["QueueURL"]).path.sub!(/^\/queues\//, "")) }
|
21
21
|
end
|
22
22
|
end
|
@@ -28,7 +28,7 @@ module AliyunIot
|
|
28
28
|
|
29
29
|
#创建队列
|
30
30
|
def create(opts = {})
|
31
|
-
Request::Xml.put(queue_path
|
31
|
+
Request::Xml.put(queue_path) do |request|
|
32
32
|
msg_options = {
|
33
33
|
:VisibilityTimeout => 30,
|
34
34
|
:DelaySeconds => 0,
|
@@ -36,39 +36,50 @@ module AliyunIot
|
|
36
36
|
:MessageRetentionPeriod => 345600,
|
37
37
|
:PollingWaitSeconds => 0
|
38
38
|
}.merge(opts)
|
39
|
-
request.
|
39
|
+
request.content(:Queue, msg_options)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
#查看消息
|
44
44
|
def peek
|
45
|
-
|
46
|
-
Request::Xml.get(messages_path, request_opts)
|
45
|
+
Request::Xml.get(messages_path, query: {peekonly: true})
|
47
46
|
end
|
48
47
|
|
49
48
|
#删除队列
|
50
49
|
def delete
|
51
|
-
Request::Xml.delete
|
50
|
+
Request::Xml.delete queue_path
|
52
51
|
end
|
53
52
|
|
54
53
|
#发送消息
|
55
54
|
def send_message(message, opts = {})
|
56
|
-
Request::Xml.post(messages_path
|
55
|
+
Request::Xml.post(messages_path) do |request|
|
57
56
|
msg_options = {
|
58
57
|
:DelaySeconds => 0,
|
59
58
|
:Priority => 8
|
60
59
|
}.merge(opts)
|
61
|
-
request.
|
60
|
+
request.content(:Message, msg_options.merge(:MessageBody => message.to_s))
|
62
61
|
end
|
63
62
|
end
|
64
63
|
|
65
64
|
#消费消息
|
66
|
-
def receive_message(wait_seconds =
|
67
|
-
|
68
|
-
request_opts.merge!(query: {waitseconds: wait_seconds}) if wait_seconds
|
69
|
-
result = Request::Xml.get(messages_path, request_opts)
|
65
|
+
def receive_message(wait_seconds = 3)
|
66
|
+
result = Request::Xml.get(messages_path, query: {waitseconds: wait_seconds})
|
70
67
|
return nil if result.nil?
|
71
|
-
|
68
|
+
Result.new(self, result).get_message
|
69
|
+
end
|
70
|
+
|
71
|
+
#批量消费消息
|
72
|
+
def batch_receive_message(num = 16, wait_seconds = 3)
|
73
|
+
result = Request::Xml.get(messages_path, query: {waitseconds: wait_seconds, numOfMessages: num})
|
74
|
+
return nil if result.nil?
|
75
|
+
Result.new(self, result, "Messages", "Message").get_message
|
76
|
+
end
|
77
|
+
|
78
|
+
#设置队列属性
|
79
|
+
def set_attr(opts = {})
|
80
|
+
Request::Xml.put(queue_path, query: {Metaoverride: true}) do |request|
|
81
|
+
request.content(:Queue, opts)
|
82
|
+
end
|
72
83
|
end
|
73
84
|
|
74
85
|
def queue_path
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module AliyunIot
|
2
|
+
class Result
|
3
|
+
|
4
|
+
attr_reader :h, :queue
|
5
|
+
|
6
|
+
def initialize(queue, content, *path)
|
7
|
+
@queue = queue
|
8
|
+
@h = path.blank? ? Hash.xml_object(content, "Message") : Hash.xml_array(content, *path)
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_message
|
12
|
+
h.is_a?(Array) ? h.map{ |message| Message.new(queue, message) } : Message.new(queue, h)
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
data/lib/aliyun_iot/topic.rb
CHANGED
@@ -15,7 +15,7 @@ module AliyunIot
|
|
15
15
|
def topics(opts = {})
|
16
16
|
mqs_options = {query: "x-mns-prefix", offset: "x-mns-marker", size: "x-mns-ret-number"}
|
17
17
|
mqs_headers = opts.slice(*mqs_options.keys).reduce({}) { |mqs_headers, item| k, v = *item; mqs_headers.merge!(mqs_options[k] => v) }
|
18
|
-
response = Request::Xml.get("/topics", mqs_headers: mqs_headers
|
18
|
+
response = Request::Xml.get("/topics", mqs_headers: mqs_headers)
|
19
19
|
Hash.xml_array(response, "Topics", "Topic").collect { |item| Topic.new(URI(item["TopicURL"]).path.sub!(/^\/topics\//, "")) }
|
20
20
|
end
|
21
21
|
end
|
@@ -27,7 +27,7 @@ module AliyunIot
|
|
27
27
|
|
28
28
|
#创建topic
|
29
29
|
def create(opts={})
|
30
|
-
Request::Xml.put(topic_path
|
30
|
+
Request::Xml.put(topic_path) do |request|
|
31
31
|
msg_options = {
|
32
32
|
MaximumMessageSize: 65536
|
33
33
|
}.merge(opts)
|
@@ -37,12 +37,12 @@ module AliyunIot
|
|
37
37
|
|
38
38
|
# 删除topic
|
39
39
|
def delete
|
40
|
-
Request::Xml.delete(topic_path
|
40
|
+
Request::Xml.delete(topic_path)
|
41
41
|
end
|
42
42
|
|
43
43
|
# 获取topic属性
|
44
44
|
def get_topic_attributes
|
45
|
-
topic_hash = Hash.from_xml(Request::Xml.get(topic_path
|
45
|
+
topic_hash = Hash.from_xml(Request::Xml.get(topic_path))
|
46
46
|
{
|
47
47
|
topic_name: topic_hash["Topic"]["TopicName"],
|
48
48
|
create_time: topic_hash["Topic"]["CreateTime"],
|
@@ -60,7 +60,7 @@ module AliyunIot
|
|
60
60
|
if opts[:Endpoint].nil? || opts[:Endpoint].blank?
|
61
61
|
raise Request::XmlException.new(Exception.new("subscribe parameters invalid"))
|
62
62
|
else
|
63
|
-
Request::Xml.put(subscribe_path
|
63
|
+
Request::Xml.put(subscribe_path) do |request|
|
64
64
|
request.content(:Subscription, opts)
|
65
65
|
end
|
66
66
|
end
|
@@ -68,7 +68,7 @@ module AliyunIot
|
|
68
68
|
|
69
69
|
#退订topic
|
70
70
|
def unsubscribe
|
71
|
-
Request::Xml.delete(subscribe_path
|
71
|
+
Request::Xml.delete(subscribe_path)
|
72
72
|
end
|
73
73
|
|
74
74
|
#发布消息
|
@@ -76,7 +76,7 @@ module AliyunIot
|
|
76
76
|
if opts[:MessageBody].nil? || opts[:MessageBody].blank?
|
77
77
|
raise Exception.new("publish message parameters invalid")
|
78
78
|
else
|
79
|
-
Request::Xml.post(message_path
|
79
|
+
Request::Xml.post(message_path) do |request|
|
80
80
|
request.content(:Message, opts)
|
81
81
|
end
|
82
82
|
end
|
data/lib/aliyun_iot/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aliyun_iot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CooCOccO
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -126,6 +126,7 @@ files:
|
|
126
126
|
- lib/aliyun_iot/request/http_client.rb
|
127
127
|
- lib/aliyun_iot/request/json.rb
|
128
128
|
- lib/aliyun_iot/request/xml.rb
|
129
|
+
- lib/aliyun_iot/result.rb
|
129
130
|
- lib/aliyun_iot/topic.rb
|
130
131
|
- lib/aliyun_iot/version.rb
|
131
132
|
- lib/generators/aliyun_iot/install_generator.rb
|