# =XMPP4R - XMPP Library for Ruby
# License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
# Website::http://home.gna.org/xmpp4r/
require 'xmpp4r/query'
module Jabber
module Discovery
NS_DISCO_INFO = 'http://jabber.org/protocol/disco#info'
##
# Class for handling Service Discovery queries,
# info
# (JEP 0030)
#
# This may contain multiple Identity and Feature
# elements, describing the type and the supported namespaces of
# the service.
class IqQueryDiscoInfo < IqQuery
name_xmlns 'query', NS_DISCO_INFO
##
# Get the queried Service Discovery node or nil
#
# See IqQueryDiscoItems#node for a
# small explanation of this.
def node
attributes['node']
end
##
# Set the queried Service Discovery node or nil
# val:: [String]
def node=(val)
attributes['node'] = val
end
##
# Set the queried Service Discovery node or nil
# (chaining-friendly)
# val:: [String]
def set_node(val)
self.node = val
self
end
##
# Get the first identity child
# result:: [Identity]
def identity
first_element('identity')
end
##
# Get list of identities
# result:: [Array] of [Identity]
def identities
get_elements('identity')
end
##
# Get list of features
# result:: [Array] of [String]
def features
res = []
each_element('feature') { |feature|
res.push(feature.var)
}
res
end
end
##
# Service Discovery identity to add() to IqQueryDiscoInfo
#
# Please note that XEP 0030 requires both category and type to occur,
# for a reference see: http://www.xmpp.org/registrar/disco-categories.html
class Identity < XMPPElement
name_xmlns 'identity', NS_DISCO_INFO
##
# Initialize a new Identity
# category:: [String] Initial category or nil
# iname:: [String] Initial identity name or nil
# type:: [String] Initial type or nil
def initialize(category=nil, iname=nil, type=nil)
super()
set_category(category)
set_iname(iname)
set_type(type)
end
##
# Get the identity's category or nil
# result:: [String]
def category
attributes['category']
end
##
# Set the identity's category
#
# Service Discovery categories should be somewhat
# standardized by some registry, so clients may
# represent specific categories by specific icons...
# (see http://www.jabber.org/registrar/disco-categories.html)
# val:: [String]
def category=(val)
attributes['category'] = val
end
##
# Set the identity's category (chaining-friendly)
# val:: [String]
def set_category(val)
self.category = val
self
end
##
# Get the identity's name or nil
#
# This has been renamed from to "iname" here
# to keep REXML::Element#name accessible
# result:: [String]
def iname
attributes['name']
end
##
# Set the identity's name
# val:: [String]
def iname=(val)
attributes['name'] = val
end
##
# Set the identity's name (chaining-friendly)
# val:: [String]
def set_iname(val)
self.iname = val
self
end
##
# Get the identity's type or nil
# result:: [String]
def type
attributes['type']
end
##
# Set the identity's type
# (see http://www.jabber.org/registrar/disco-categories.html)
# val:: [String]
def type=(val)
attributes['type'] = val
end
##
# Set the identity's type (chaining-friendly)
# val:: [String]
def set_type(val)
self.type = val
self
end
end
##
# Service Discovery feature to add() to IqQueryDiscoInfo
#
# Please note that JEP 0030 requires var to be set,
# for a reference see: http://www.xmpp.org/registrar/disco-features.html
class Feature < XMPPElement
name_xmlns 'feature', NS_DISCO_INFO
##
# Create a new element
# var:: [String] New var
def initialize(var=nil)
super()
set_var(var)
end
##
# Get the feature's var or nil
# result:: [String]
def var
attributes['var']
end
##
# Set the feature's var
#
# This is a namespace the identity supports.
# val:: [String]
def var=(val)
attributes['var'] = val
end
##
# Set the feature's var (chaining-friendly)
# val:: [String]
def set_var(val)
self.var = val
self
end
end
end
end