lib/blather/stanza/pubsub/event.rb in blather-0.4.7 vs lib/blather/stanza/pubsub/event.rb in blather-0.4.8
- old
+ new
@@ -1,77 +1,123 @@
module Blather
class Stanza
class PubSub
+ # # PubSub Event Stanza
+ #
+ # [XEP-0060](http://xmpp.org/extensions/xep-0060.html)
+ #
+ # The PubSub Event stanza is used in many places. Please see the XEP for more
+ # information.
+ #
+ # @handler :pubsub_event
class Event < Message
+ SHIM_NS = 'http://jabber.org/protocol/shim'.freeze
+
register :pubsub_event, :event, 'http://jabber.org/protocol/pubsub#event'
- ##
- # Ensure the event_node is created
+ # Ensures the event_node is created
+ # @private
def self.new(type = nil)
node = super
node.event_node
node
end
- ##
# Kill the event_node node before running inherit
+ # @private
def inherit(node)
event_node.remove
super
end
+ # Get the name of the node
+ #
+ # @return [String, nil]
def node
!purge? ? items_node[:node] : purge_node[:node]
end
+ # Get a list of retractions
+ #
+ # @return [Array<String>]
def retractions
- items_node.find('//ns:retract', :ns => self.class.registered_ns).map { |i| i[:id] }
+ items_node.find('//ns:retract', :ns => self.class.registered_ns).map do |i|
+ i[:id]
+ end
end
+ # Check if this is a retractions stanza
+ #
+ # @return [Boolean]
def retractions?
!retractions.empty?
end
+ # Get the list of items attached to this event
+ #
+ # @return [Array<Blather::Stanza::PubSub::PubSubItem>]
def items
- items_node.find('//ns:item', :ns => self.class.registered_ns).map { |i| PubSubItem.new(nil,nil,self.document).inherit i }
+ items_node.find('//ns:item', :ns => self.class.registered_ns).map do |i|
+ PubSubItem.new(nil,nil,self.document).inherit i
+ end
end
+ # Check if this stanza has items
+ #
+ # @return [Boolean]
def items?
!items.empty?
end
+ # Check if this is a purge stanza
+ #
+ # @return [XML::Node, nil]
def purge?
purge_node
end
+ # Get or create the actual event node
+ #
+ # @return [Blather::XMPPNode]
def event_node
node = find_first('//ns:event', :ns => self.class.registered_ns)
node = find_first('//event', self.class.registered_ns) unless node
unless node
(self << (node = XMPPNode.new('event', self.document)))
node.namespace = self.class.registered_ns
end
node
end
+ # Get or create the actual items node
+ #
+ # @return [Blather::XMPPNode]
def items_node
node = find_first('ns:event/ns:items', :ns => self.class.registered_ns)
unless node
(self.event_node << (node = XMPPNode.new('items', self.document)))
node.namespace = event_node.namespace
end
node
end
+ # Get the actual purge node
+ #
+ # @return [Blather::XMPPNode]
def purge_node
event_node.find_first('//ns:purge', :ns => self.class.registered_ns)
end
+ # Get the subscription IDs associated with this event
+ #
+ # @return [Array<String>]
def subscription_ids
- find('//ns:header[@name="SubID"]', :ns => 'http://jabber.org/protocol/shim').map { |n| n.content }
+ find('//ns:header[@name="SubID"]', :ns => SHIM_NS).map do |n|
+ n.content
+ end
end
- end
+ end # Event
-end #PubSub
-end #Stanza
-end #Blather
+end # PubSub
+end # Stanza
+end # Blather