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