lib/blather/stanza/pubsub/subscription.rb in blather-0.4.7 vs lib/blather/stanza/pubsub/subscription.rb in blather-0.4.8

- old
+ new

@@ -1,66 +1,134 @@ module Blather class Stanza class PubSub + # # PubSub Subscription Stanza + # + # [XEP-0060 Section 8.8 Manage Subscriptions](http://xmpp.org/extensions/xep-0060.html#owner-subscriptions) + # + # @handler :pubsub_subscription class Subscription < PubSub VALID_TYPES = [:none, :pending, :subscribed, :unconfigured] register :pubsub_subscription, :subscription, self.registered_ns + # Create a new subscription request node + # + # @param [Blather::Stanza::Iq::VALID_TYPES] type the IQ type + # @param [String] host the host to send the request to + # @param [String] node the node to look for requests on + # @param [Blather::JID, #to_s] jid the JID of the subscriber + # @param [String] subid the subscription ID + # @param [VALID_TYPES] subscription the subscription type def self.new(type = :result, host = nil, node = nil, jid = nil, subid = nil, subscription = nil) new_node = super(type, host) new_node.node = node new_node.jid = jid new_node.subid = subid new_node.subscription = subscription new_node end - attribute_helpers_for :subscription, VALID_TYPES + # Check if the type is none + # + # @return [Boolean] + def none? + self.subscription == :none + end + # Check if the type is pending + # + # @return [Boolean] + def pending? + self.subscription == :pending + end + + # Check if the type is subscribed + # + # @return [Boolean] + def subscribed? + self.subscription == :subscribed + end + + # Check if the type is unconfigured + # + # @return [Boolean] + def unconfigured? + self.subscription == :unconfigured + end + + # Get the JID of the subscriber + # + # @return [Blather::JID] def jid JID.new(subscription_node[:jid]) end + # Set the JID of the subscriber + # + # @param [Blather::JID, #to_s] jid def jid=(jid) subscription_node[:jid] = jid end + # Get the name of the subscription node + # + # @return [String] def node subscription_node[:node] end + # Set the name of the subscription node + # + # @param [String] node def node=(node) subscription_node[:node] = node end + # Get the ID of the subscription + # + # @return [String] def subid subscription_node[:subid] end + # Set the ID of the subscription + # + # @param [String] subid def subid=(subid) subscription_node[:subid] = subid end + # Get the subscription type + # + # @return [VALID_TYPES, nil] def subscription s = subscription_node[:subscription] s.to_sym if s end + # Set the subscription type + # + # @param [VALID_TYPES, nil] subscription def subscription=(subscription) - raise ArgumentError, "Invalid Type (#{type}), use: #{VALID_TYPES*' '}" if subscription && !VALID_TYPES.include?(subscription.to_sym) + if subscription && !VALID_TYPES.include?(subscription.to_sym) + raise ArgumentError, "Invalid Type (#{type}), use: #{VALID_TYPES*' '}" + end subscription_node[:subscription] = subscription end + # Get or create the actual subscription node + # + # @return [Blather::XMPPNode] def subscription_node unless subscription = pubsub.find_first('ns:subscription', :ns => self.class.registered_ns) self.pubsub << (subscription = XMPPNode.new('subscription', self.document)) subscription.namespace = self.pubsub.namespace end subscription end - end #Subscribe + end # Subscribe -end #PubSub -end #Stanza -end #Blather +end # PubSub +end # Stanza +end # Blather