lib/blather/stanza/pubsub/items.rb in blather-0.4.7 vs lib/blather/stanza/pubsub/items.rb in blather-0.4.8
- old
+ new
@@ -1,63 +1,103 @@
module Blather
class Stanza
class PubSub
+ # # PubSub Items Stanza
+ #
+ # [XEP-0060 Section 6.5 - Retrieve Items from a Node](http://xmpp.org/extensions/xep-0060.html#subscriber-retrieve)
+ #
+ # @handler :pubsub_items
class Items < PubSub
register :pubsub_items, :items, self.registered_ns
include Enumerable
alias_method :find, :xpath
+ # Create a new Items request
+ #
+ # @param [String] host the pubsub host to send the request to
+ # @param [String] path the path of the node
+ # @param [Array<String>] list an array of IDs to request
+ # @param [#to_s] max the maximum number of items to return
+ #
+ # @return [Blather::Stanza::PubSub::Items]
def self.request(host, path, list = [], max = nil)
node = self.new :get, host
node.node = path
node.max_items = max
- (list || []).each { |id| node.items_node << PubSubItem.new(id, nil, node.document) }
+ (list || []).each do |id|
+ node.items_node << PubSubItem.new(id, nil, node.document)
+ end
node
end
+ # Overrides the parent to ensure an items node is created
+ # @private
def self.new(type = nil, host = nil)
new_node = super
new_node.items
new_node
end
+ # Get the node name
+ #
+ # @return [String]
def node
items_node[:node]
end
+ # Set the node name
+ #
+ # @param [String, nil] node
def node=(node)
items_node[:node] = node
end
+ # Get the max number of items requested
+ #
+ # @return [Fixnum, nil]
def max_items
items_node[:max_items].to_i if items_node[:max_items]
end
+ # Set the max number of items requested
+ #
+ # @param [Fixnum, nil] max_items
def max_items=(max_items)
items_node[:max_items] = max_items
end
+ # Iterate over the list of items
+ #
+ # @yieldparam [Blather::Stanza::PubSub::PubSubItem] item
def each(&block)
items.each &block
end
+ # Get the list of items on this stanza
+ #
+ # @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
+ # Get or create the actual items node
+ #
+ # @return [Blather::XMPPNode]
def items_node
unless node = self.pubsub.find_first('ns:items', :ns => self.class.registered_ns)
(self.pubsub << (node = XMPPNode.new('items', self.document)))
node.namespace = self.pubsub.namespace
end
node
end
- end
+ end # Items
-end #PubSub
-end #Stanza
-end #Blather
+end # PubSub
+end # Stanza
+end # Blather