aliyun_iot 0.1.3 → 0.1.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a2a8e2c6dc0cf992364f0fc18e4fa8e1bd360274
4
- data.tar.gz: e9077f32da1e594c3b0ce6e2d4b6fee3044475d5
3
+ metadata.gz: b77eea144b0719d2d909bf02bf10fb08c3bfa6e6
4
+ data.tar.gz: 2b0450faec422ce648dbd016d5656cc1167545ef
5
5
  SHA512:
6
- metadata.gz: 828d01bb13580c10f440305645fe7b6b096e70b8167ede7a44e285495469c0df746ca5775556fc95a64568f28a39a2f5369ebaed5fda41841400b685d4d242f5
7
- data.tar.gz: 1d0e8da9fd33151f010c82ead720961c4caba66a5117723613fd0397dcf975dfbc1ecc5c8815a63bc02455b99ab561f407ce93a00052d1a340df19c368a086ec
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.check_regist_state(ApplyId) ## 批量查询注册状态
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
@@ -9,6 +9,7 @@ require "aliyun_iot/queue"
9
9
  require "aliyun_iot/topic"
10
10
  require "aliyun_iot/message"
11
11
  require "aliyun_iot/product"
12
+ require "aliyun_iot/result"
12
13
 
13
14
  class Hash
14
15
  def self.xml_array content, *path
@@ -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, content)
7
- h = Hash.xml_object(content, "Message")
6
+ def initialize(queue, h)
7
+ @h = h
8
8
  @queue = queue
9
- @id = h["MessageId"]
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}
@@ -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
- default_params = { Qos: '0' }
58
- default_params.merge!({ Qos: '0' }) if params[:Qos].nil?
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 = {})
@@ -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: mqs_headers.merge({"x-mns-version" => "2015-06-06"}))
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, mqs_headers: {"x-mns-version" => "2015-06-06"}) do |request|
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.content_xml(:Queue, msg_options)
39
+ request.content(:Queue, msg_options)
40
40
  end
41
41
  end
42
42
 
43
43
  #查看消息
44
44
  def peek
45
- request_opts = {mqs_headers: {"x-mns-version" => "2015-06-06"}, query: {peekonly: true}}
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(queue_path, mqs_headers: {"x-mns-version" => "2015-06-06"})
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, mqs_headers: {"x-mns-version" => "2015-06-06"}) do |request|
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.content_xml(:Message, msg_options.merge(:MessageBody => message.to_s))
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 = nil)
67
- request_opts = {mqs_headers: {"x-mns-version" => "2015-06-06"}}
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
- Message.new(self, result)
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
@@ -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.merge({"x-mns-version" => "2015-06-06"}))
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, mqs_headers: {"x-mns-version" => "2015-06-06"}) do |request|
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, mqs_headers: {"x-mns-version" => "2015-06-06"})
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, mqs_headers: {"x-mns-version" => "2015-06-06"}))
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, mqs_headers: {"x-mns-version" => "2015-06-06"}) do |request|
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, mqs_headers: {"x-mns-version" => "2015-06-06"})
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, mqs_headers: {"x-mns-version" => "2015-06-06"}) do |request|
79
+ Request::Xml.post(message_path) do |request|
80
80
  request.content(:Message, opts)
81
81
  end
82
82
  end
@@ -1,3 +1,3 @@
1
1
  module AliyunIot
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
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.3
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-03-09 00:00:00.000000000 Z
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