Class: AliyunMns::Topic

Inherits:
Object
  • Object
show all
Defined in:
lib/aliyun_mns/topic.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, subscription_name = nil) ⇒ Topic

Returns a new instance of Topic.



19
20
21
22
# File 'lib/aliyun_mns/topic.rb', line 19

def initialize(name, subscription_name = nil)
  @name = name
  @subscription_name = subscription_name unless subscription_name.nil?
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



3
4
5
# File 'lib/aliyun_mns/topic.rb', line 3

def name
  @name
end

#subscription_nameObject (readonly)

Returns the value of attribute subscription_name.



3
4
5
# File 'lib/aliyun_mns/topic.rb', line 3

def subscription_name
  @subscription_name
end

Class Method Details

.[](name, subscription_name = nil) ⇒ Object



7
8
9
# File 'lib/aliyun_mns/topic.rb', line 7

def [](name, subscription_name = nil)
  Topic.new(name, subscription_name)
end

.topics(opts = {}) ⇒ Object



11
12
13
14
15
16
# File 'lib/aliyun_mns/topic.rb', line 11

def topics(opts = {})
  mqs_options = {query: "x-mns-prefix", offset: "x-mns-marker", size: "x-mns-ret-number"}
  mqs_headers = opts.slice(*mqs_options.keys).reduce({}) { |mqs_headers, item| k, v = *item; mqs_headers.merge!(mqs_options[k] => v) }
  response = Request.get("/topics", mqs_headers: mqs_headers)
  Hash.xml_array(response, "Topics", "Topic").collect { |item| Topic.new(URI(item["TopicURL"]).path.sub!(/^\/topics\//, "")) }
end

Instance Method Details

#create(opts = {}) ⇒ Object

创建topic



25
26
27
28
29
30
31
32
# File 'lib/aliyun_mns/topic.rb', line 25

def create(opts={})
  Request.put(topic_path) do |request|
    msg_options = {
        :MaximumMessageSize => 65536
    }.merge(opts)
    request.content :Topic, msg_options
  end
end

#deleteObject

删除topic



35
36
37
# File 'lib/aliyun_mns/topic.rb', line 35

def delete
  Request.delete(topic_path)
end

#get_topic_attributesObject

获取topic属性



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/aliyun_mns/topic.rb', line 40

def get_topic_attributes
  topic_hash = Hash.from_xml(Request.get(topic_path))
  {
      :topic_name => topic_hash["Topic"]["TopicName"],
      :create_time => topic_hash["Topic"]["CreateTime"],
      :last_modify_time => topic_hash["Topic"]["LastModifyTime"],
      :maximum_message_size => topic_hash["Topic"]["MaximumMessageSize"],
      :message_retention_period => topic_hash["Topic"]["MessageRetentionPeriod"],
      :message_ount => topic_hash["Topic"]["MessageCount"],
      :logging_enabled => topic_hash["Topic"]["LoggingEnabled"]
  }

end

#message_pathObject



89
90
91
# File 'lib/aliyun_mns/topic.rb', line 89

def message_path
  "/topics/#{name}/messages"
end

#publish_message(opts = {}) ⇒ Object

发布消息



71
72
73
74
75
76
77
78
79
# File 'lib/aliyun_mns/topic.rb', line 71

def publish_message(opts = {})
  if opts[:MessageBody].nil? || opts[:MessageBody].blank?
    raise RequestException.new(Exception.new("publish message parameters invalid"))
  else
    Request.post(message_path) do |request|
      request.content(:Message, opts)
    end
  end
end

#subscribe(opts = {}) ⇒ Object

订阅topic



55
56
57
58
59
60
61
62
63
# File 'lib/aliyun_mns/topic.rb', line 55

def subscribe(opts = {})
  if opts[:Endpoint].nil? || opts[:Endpoint].blank?
    raise RequestException.new(Exception.new("subscribe parameters invalid"))
  else
    Request.put(subscribe_path) do |request|
      request.content(:Subscription, opts)
    end
  end
end

#subscribe_pathObject



85
86
87
# File 'lib/aliyun_mns/topic.rb', line 85

def subscribe_path
  "/topics/#{name}/subscriptions/#{subscription_name}"
end

#topic_pathObject



81
82
83
# File 'lib/aliyun_mns/topic.rb', line 81

def topic_path
  "/topics/#{name}"
end

#unsubscribeObject

退订topic



66
67
68
# File 'lib/aliyun_mns/topic.rb', line 66

def unsubscribe
  Request.delete(subscribe_path)
end