Class | Jabber::PubSub::ServiceHelper |
In: |
lib/xmpp4r/pubsub/helper/servicehelper.rb
|
Parent: | Object |
A Helper representing a PubSub Service
Creates a new representation of a pubsub service
client: | [Jabber::Stream] |
pubsubjid: | [String] or [Jabber::JID] |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 25 25: def initialize(client, pubsubjid) 26: @client = client 27: @pubsubjid = pubsubjid 28: @event_cbs = CallbackList.new 29: @client.add_message_callback(200,self) { |message| 30: handle_message(message) 31: } 32: end
shows the affiliations on a pubsub service
return: | [Hash] of { node => symbol } |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 133 133: def affiliations 134: iq = basic_pubsub_query(:get) 135: iq.pubsub.add(REXML::Element.new('affiliations')) 136: res = nil 137: @client.send_with_id(iq) { |reply| 138: if reply.pubsub.first_element('affiliations') 139: res = {} 140: reply.pubsub.first_element('affiliations').each_element('affiliation') do |affiliation| 141: # TODO: This should be handled by an affiliation element class 142: aff = case affiliation.attributes['affiliation'] 143: when 'owner' then :owner 144: when 'publisher' then :publisher 145: when 'none' then :none 146: when 'outcast' then :outcast 147: else nil 148: end 149: res[affiliation.attributes['node']] = aff 150: end 151: end 152: true 153: } 154: res 155: end
Create a new node on the pubsub service
node: | [String] you node name - otherwise you get a automaticly generated one (in most cases) |
configure: | [Jabber::XMLStanza] if you want to configure you node (default nil) |
return: | [String] |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 39 39: def create(node=nil, configure=nil) 40: rnode = nil 41: iq = basic_pubsub_query(:set) 42: iq.pubsub.add(REXML::Element.new('create')).attributes['node'] = node 43: if configure 44: confele = REXML::Element.new('configure') 45: 46: if configure.type_of?(XMLStanza) 47: confele << configure 48: end 49: iq.pubsub.add(confele) 50: end 51: 52: @client.send_with_id(iq) do |reply| 53: if (create = reply.first_element('pubsub/create')) 54: rnode = create.attributes['node'] 55: end 56: true 57: end 58: 59: rnode 60: end
Delete a pubsub node
node: | [String] |
return: | true |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 66 66: def delete(node) 67: iq = basic_pubsub_query(:set,true) 68: iq.pubsub.add(REXML::Element.new('delete')).attributes['node'] = node 69: @client.send_with_id(iq) { |reply| 70: true 71: } 72: end
get options of a node
node: | [String] |
subid: | [String] or nil |
return: | [Jabber::XData] |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 235 235: def get_options(node,subid=nil) 236: iq = basic_pubsub_query(:get) 237: opt = REXML::Element.new('options') 238: opt.attributes['node'] = node 239: opt.attributes['jid'] = @client.jid.strip 240: opt.attributes['subid'] = subid 241: iq.pubsub.add(opt) 242: ret = nil 243: @client.send_with_id(iq) { |reply| 244: reply.pubsub.options.first_element('x') { |xdata| 245: 246: ret = xdata if xdata.kind_of?(Jabber::XData) 247: 248: } 249: true 250: } 251: return ret 252: end
gets all items from a pubsub node
node: | [String] |
count: | [Fixnum] |
return: | [Hash] { id => [Jabber::PubSub::Item] } |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 112 112: def items(node,count=nil) 113: iq = basic_pubsub_query(:get) 114: items = Jabber::PubSub::Items.new 115: items.node = node 116: iq.pubsub.add(items) 117: res = nil 118: @client.send_with_id(iq) { |reply| 119: if reply.kind_of?(Iq) and reply.pubsub and reply.pubsub.first_element('items') 120: res = {} 121: reply.pubsub.first_element('items').each_element('item') do |item| 122: res[item.attributes['id']] = item.children.first if item.children.first 123: end 124: end 125: true 126: } 127: res 128: end
NOTE: this method sends only one item per publish request because some services may not allow batch processing maybe this will changed in the future
node: | [String] |
item: | [Jabber::PubSub::Item] |
return: | true |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 81 81: def publish(node,item) 82: iq = basic_pubsub_query(:set) 83: publish = iq.pubsub.add(REXML::Element.new('publish')) 84: publish.attributes['node'] = node 85: if item.kind_of?(Jabber::PubSub::Item) 86: publish.add(item) 87: @client.send_with_id(iq) { |reply| true } 88: end 89: end
node: | [String] |
item: | [REXML::Element] |
id: | [String] |
return: | true |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 96 96: def publish_with_id(node,item,id) 97: if item.kind_of?(REXML::Element) 98: xmlitem = Jabber::PubSub::Item.new 99: xmlitem.id = id 100: xmlitem.add(item) 101: publish(node,xmlitem) 102: else 103: raise "given item is not a proper xml document or Jabber::PubSub::Item" 104: end 105: end
purges all items on a persist node
node: | [String] |
return: | true |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 275 275: def purge(node) 276: iq = basic_pubsub_query(:set) 277: purge = REXML::Element.new('purge') 278: purge.attributes['node'] = node 279: iq.pubsub.add(purge) 280: @client.send_with_id(iq) { |reply| true } 281: end
set options for a node
node: | [String] |
options: | [Jabber::XData] |
subid: | [String] or nil |
return: | true |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 260 260: def set_options(node,options,subid=nil) 261: iq = basic_pubsub_query(:set) 262: opt = REXML::Element.new('options') 263: opt.attributes['node'] = node 264: opt.attributes['jid'] = @client.jid.strip 265: opt.attributes['subid'] = subid 266: iq.pubsub.add(opt) 267: iq.pubsub.options.add(options) 268: @client.send_with_id(iq) { |reply| true } 269: end
subscribe to a node
node: | [String] |
return: | [Hash] of { attributename => value } |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 194 194: def subscribe(node) 195: iq = basic_pubsub_query(:set) 196: sub = REXML::Element.new('subscribe') 197: sub.attributes['node'] = node 198: sub.attributes['jid'] = @client.jid.strip 199: iq.pubsub.add(sub) 200: res = {} 201: @client.send_with_id(iq) do |reply| 202: pubsubanswer = reply.pubsub 203: if pubsubanswer.first_element('subscription') 204: pubsubanswer.each_element('subscription') { |element| 205: element.attributes.each { |name,value| res[name] = value } 206: } 207: end 208: true 209: end # @client.send_with_id(iq) 210: res 211: end
shows all jids of subscribers of a node
node: | [String] |
return: | [Array] of [String] |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 182 182: def subscribers(node) 183: res = [] 184: subscriptions(node).each { |sub| 185: res << sub.attributes['jid'] 186: } 187: res 188: end
shows all subscriptions on the given node
node: | [String], or nil for all |
return: | [Array] of [REXML::Element] |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 161 161: def subscriptions(node=nil) 162: iq = basic_pubsub_query(:get) 163: entities = iq.pubsub.add(REXML::Element.new('subscriptions')) 164: entities.attributes['node'] = node 165: res = nil 166: @client.send_with_id(iq) { |reply| 167: if reply.pubsub.first_element('subscriptions') 168: res = [] 169: reply.pubsub.first_element('subscriptions').each_element('subscription') { |subscription| 170: res << REXML::Element.new(subscription) 171: } 172: end 173: true 174: } 175: res 176: end
Unsubscibe from a node with an optional subscription id
May raise ErrorException
node: | [String] |
subid: | [String] or nil |
return: | true |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 220 220: def unsubscribe(node,subid=nil) 221: iq = basic_pubsub_query(:set) 222: unsub = REXML::Element.new('unsubscribe') 223: unsub.attributes['node'] = node 224: unsub.attributes['jid'] = @client.jid.strip 225: unsub.attributes['subid'] = subid 226: iq.pubsub.add(unsub) 227: @client.send_with_id(iq) { |reply| true } # @client.send_with_id(iq) 228: end
creates a basic pubsub iq basic_pubsub_query(type)
type: | [Symbol] |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 303 303: def basic_pubsub_query(type,ownerusecase = false) 304: iq = Jabber::Iq::new(type,@pubsubjid) 305: if ownerusecase 306: iq.add(IqPubSubOwner.new) 307: else 308: iq.add(IqPubSub.new) 309: end 310: iq 311: end
handling incoming events handle_message(message)
message: | [Jabber::Message] |
# File lib/xmpp4r/pubsub/helper/servicehelper.rb, line 317 317: def handle_message(message) 318: if message.from == @pubsubjid and message.first_element('event').kind_of?(Jabber::PubSub::Event) 319: event = message.first_element('event') 320: @event_cbs.process(event) 321: end 322: end