# =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/xmppelement' require 'xmpp4r/pubsub/iq/pubsub' module Jabber module PubSub class Configuration < XMPPElement ## # get the underlying XData form element def form children.each do |c| return c if c.kind_of?(Jabber::Dataforms::XData) end nil end def form=(form) children.each do |c| delete_element(c) if c.kind_of?(Jabber::Dataforms::XData) delete(c) end end add(form) end # Implemented by NodeConfig and SubscriptionConfig def form_type '' end def options=(options) if options self.form = form_for_options( form_type, options ) end end ## # get a list of the configured options represented by this stanza # return:: [Hash] the options and their values def options configured_options = {} if !form.nil? form.fields.each do |f| f.values.size == 1 ? configured_options[f.var] = f.values.first : configured_options[f.var] = f.values end end configured_options end def node=(node) attributes['node'] = node end def node attributes['node'] end private ## # creates a Dataform for configuration # config:: [Hash] the desired configuration options def form_for_options(type, options) form = Jabber::Dataforms::XData.new(:submit) pubsub_config = Jabber::Dataforms::XDataField.new('FORM_TYPE', :hidden) pubsub_config.values = [type] form.add(pubsub_config) options.each_pair do |key, value| f = Jabber::Dataforms::XDataField.new(key) f.values = value.is_a?(Array) ? value : [value] form.add(f) end form end end end end