lib/blather/stanza/pubsub/publish.rb in blather-0.4.7 vs lib/blather/stanza/pubsub/publish.rb in blather-0.4.8
- old
+ new
@@ -1,58 +1,103 @@
module Blather
class Stanza
class PubSub
+ # # PubSub Publish Stanza
+ #
+ # [XEP-0060 Section 7.1 - Publish an Item to a Node](http://xmpp.org/extensions/xep-0060.html#publisher-publish)
+ #
+ # @handler :pubsub_publish
class Publish < PubSub
register :pubsub_publish, :publish, self.registered_ns
include Enumerable
alias_method :find, :xpath
+ # Create a new publish node
+ #
+ # @param [String, nil] host the host to pushlish the node to
+ # @param [String, nil] node the name of the node to publish to
+ # @param [Blather::Stanza::Iq::VALID_TYPES] type the node type
+ # @param [#to_s] payload the payload to publish see {#payload=}
def self.new(host = nil, node = nil, type = :set, payload = nil)
new_node = super(type, host)
new_node.node = node
new_node.payload = payload if payload
new_node
end
+ # Set the payload to publish
+ #
+ # @overload payload=(hash)
+ # Set the payload as a set of ID => payload entries
+ # @param [Hash<id => payload>] hash
+ # @overload payload=(array)
+ # Set the list of payloads all at once
+ # @param [Array<#to_s>] array
+ # @overload payload=(string)
+ # Set the payload as a string
+ # @param [#to_s] string
def payload=(payload)
payload = case payload
when Hash then payload.to_a
when Array then payload.map { |v| [nil, v] }
- else [[nil, payload.to_s]]
+ else [[nil, payload]]
end
- payload.each { |id,value| self.publish << PubSubItem.new(id, value, self.document) }
+ payload.each do |id, value|
+ self.publish << PubSubItem.new(id, value, self.document)
+ end
end
+ # Get the name of the node to publish to
+ #
+ # @return [String, nil]
def node
publish[:node]
end
+ # Set the name of the node to publish to
+ #
+ # @param [String, nil] node
def node=(node)
publish[:node] = node
end
+ # Get or create the actual publish node
+ #
+ # @return [Blather::XMPPNode]
def publish
unless publish = pubsub.find_first('ns:publish', :ns => self.class.registered_ns)
self.pubsub << (publish = XMPPNode.new('publish', self.document))
publish.namespace = self.pubsub.namespace
end
publish
end
+ # Get the list of items
+ #
+ # @return [Array<Blather::Stanza::PubSub::PubSubItem>]
def items
- publish.find('ns:item', :ns => self.class.registered_ns).map { |i| PubSubItem.new(nil,nil,self.document).inherit i }
+ publish.find('ns:item', :ns => self.class.registered_ns).map do |i|
+ PubSubItem.new(nil,nil,self.document).inherit i
+ end
end
+ # Iterate over the list of items
+ #
+ # @yield [item] a block to accept each item
+ # @yieldparam [Blather::Stanza::PubSub::PubSubItem]
def each(&block)
items.each &block
end
+ # Get the size of the items list
+ #
+ # @return [Fixnum]
def size
items.size
end
- end #Publish
+ end # Publish
-end #PubSub
-end #Stanza
-end #Blather
+end # PubSub
+end # Stanza
+end # Blather