Class: Jabber::PubSub::ServiceHelper
- Inherits:
-
Object
- Object
- Jabber::PubSub::ServiceHelper
- Defined in:
- lib/xmpp4r/pubsub/helper/servicehelper.rb
Overview
A Helper representing a PubSub Service
Direct Known Subclasses
NodeHelper, OAuthServiceHelper, UserLocation::Helper, UserTune::Helper
Instance Method Summary collapse
-
#add_event_callback(prio = 200, ref = nil, &block) ⇒ Object
Register callbacks for incoming events (i.e. Message stanzas containing) PubSub notifications.
-
#create_collection_node(node = nil, configure = Jabber::PubSub::NodeConfig.new) ⇒ Object
- Create a new collection node on the pubsub service node
- String
- the node name - otherwise you get an automatically generated one (in most cases) configure
- Jabber::PubSub::NodeConfig
- if you want to configure your node (default nil) return
-
[String].
-
#create_node(node = nil, configure = Jabber::PubSub::NodeConfig.new) ⇒ Object
- Create a new node on the pubsub service node
- String
- the node name - otherwise you get a automatically generated one (in most cases) configure
- Jabber::PubSub::NodeConfig
- if you want to configure your node (default nil) return
-
[String].
-
#delete_item_from(node, item_id) ⇒ Object
- deletes an item from a persistent node node
- String
- item_id
- String
- or [Array] of [String] return
-
true.
-
#delete_node(node) ⇒ Object
- Delete a pubsub node node
- String
- return
-
true.
-
#get_affiliations(node = nil) ⇒ Object
- shows the affiliations on a pubsub service node
- String
- return
- Hash
-
of { node => symbol }.
-
#get_config_from(node) ⇒ Object
- get configuration from a node node
- String
- return
-
[Jabber::PubSub::Configure].
-
#get_items_from(node, count = nil, subid = nil) ⇒ Object
- gets all items from a pubsub node node
- String
- count
- Fixnum
- subid
- String
- return
- Hash
-
{ id => [Jabber::PubSub::Item] }.
-
#get_options_from(node, jid, subid = nil) ⇒ Object
- get options from a subscription node
- String
- jid
- Jabber::JID
- or [String] subid
- String
- or nil return
-
[Jabber::PubSub::OwnerConfigure].
-
#get_subids_for(node) ⇒ Object
- get subids for a passed node return
- Array
-
of subids.
-
#get_subscribers_from(node) ⇒ Object
- shows all jids of subscribers of a node node
- String
- return
- Array
-
of [String].
-
#get_subscriptions_from(node) ⇒ Object
- shows all subscriptions on the given node node
- String
- return
- Array
-
of [Jabber::Pubsub::Subscription].
-
#get_subscriptions_from_all_nodes ⇒ Object
- get all subscriptions on a pubsub component return
- Hash
-
of [PubSub::Subscription].
-
#initialize(stream, pubsubjid) ⇒ ServiceHelper
constructor
- Creates a new representation of a pubsub service stream
- Jabber::Stream
- pubsubjid
- String
-
or [Jabber::JID].
-
#publish_item_to(node, item) ⇒ Object
NOTE: this method sends only one item per publish request because some services may not allow batch processing.
-
#publish_item_with_id_to(node, item, id) ⇒ Object
- node
- String
- item
- REXML::Element
- id
- String
- return
-
true.
-
#purge_items_from(node) ⇒ Object
- purges all items on a persistent node node
- String
- return
-
true.
- #set_affiliations(node, jid, role = 'publisher') ⇒ Object
-
#set_config_for(node, config) ⇒ Object
- set configuration for a node node
- String
- options
- Jabber::PubSub::NodeConfig
- return
-
true on success.
-
#set_options_for(node, jid, options, subid = nil) ⇒ Object
- set options for a subscription node
- String
- jid
- Jabber::JID
- or [String] options
- Jabber::PubSub::SubscriptionConfig} specifying configuration options subid:: [String
- or nil return
-
true.
-
#subscribe_to(node) ⇒ Object
- subscribe to a node node
- String
- return
- Hash
-
of { attributename => value }.
-
#to_s ⇒ Object
- String representation result
- String
-
The PubSub service’s JID.
-
#unsubscribe_from(node, subid = nil) ⇒ Object
Unsubscribe from a node with an optional subscription id.
Constructor Details
#initialize(stream, pubsubjid) ⇒ ServiceHelper
Creates a new representation of a pubsub service
- stream
- Jabber::Stream
- pubsubjid
- String
-
or [Jabber::JID]
61 62 63 64 65 66 67 68 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 61 def initialize(stream, pubsubjid) @stream = stream @pubsubjid = pubsubjid @event_cbs = CallbackList.new @stream.(200,self) { || () } end |
Instance Method Details
#add_event_callback(prio = 200, ref = nil, &block) ⇒ Object
Register callbacks for incoming events (i.e. Message stanzas containing) PubSub notifications
457 458 459 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 457 def add_event_callback(prio = 200, ref = nil, &block) @event_cbs.add(prio, ref, block) end |
#create_collection_node(node = nil, configure = Jabber::PubSub::NodeConfig.new) ⇒ Object
Create a new collection node on the pubsub service
- node
- String
-
the node name - otherwise you get an automatically generated one (in most cases)
- configure
- Jabber::PubSub::NodeConfig
-
if you want to configure your node (default nil)
- return
- String
291 292 293 294 295 296 297 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 291 def create_collection_node(node = nil, configure = Jabber::PubSub::NodeConfig.new) if configure.['pubsub#node_type'] && configure.['pubsub#node_type'] != 'collection' raise Jabber::ArgumentError, "Invalid node_type specified in node configuration. Either do not specify one, or use 'collection'" end configure. = configure..merge({'pubsub#node_type' => 'collection'}) create_node(node, configure) end |
#create_node(node = nil, configure = Jabber::PubSub::NodeConfig.new) ⇒ Object
Create a new node on the pubsub service
- node
- String
-
the node name - otherwise you get a automatically generated one (in most cases)
- configure
- Jabber::PubSub::NodeConfig
-
if you want to configure your node (default nil)
- return
- String
267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 267 def create_node(node = nil, configure = Jabber::PubSub::NodeConfig.new) rnode = nil iq = basic_pubsub_query(:set) iq.pubsub.add(REXML::Element.new('create')).attributes['node'] = node if configure if configure.kind_of?(Jabber::PubSub::NodeConfig) iq.pubsub.add(configure) end end @stream.send_with_id(iq) do |reply| if reply.kind_of?(Jabber::Iq) and reply.type == :result rnode = node end end rnode end |
#delete_item_from(node, item_id) ⇒ Object
deletes an item from a persistent node
- node
- String
- item_id
- String
-
or [Array] of [String]
- return
-
true
230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 230 def delete_item_from(node, item_id) iq = basic_pubsub_query(:set) retract = iq.pubsub.add(Jabber::PubSub::Retract.new) retract.node = node if item_id.kind_of? Array item_id.each { |id| xmlitem = Jabber::PubSub::Item.new xmlitem.id = id retract.add(xmlitem) } else xmlitem = Jabber::PubSub::Item.new xmlitem.id = item_id retract.add(xmlitem) end @stream.send_with_id(iq) end |
#delete_node(node) ⇒ Object
Delete a pubsub node
- node
- String
- return
-
true
328 329 330 331 332 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 328 def delete_node(node) iq = basic_pubsub_query(:set,true) iq.pubsub.add(REXML::Element.new('delete')).attributes['node'] = node @stream.send_with_id(iq) end |
#get_affiliations(node = nil) ⇒ Object
shows the affiliations on a pubsub service
- node
- String
- return
- Hash
-
of { node => symbol }
352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 352 def get_affiliations(node = nil) iq = basic_pubsub_query(:get) affiliations = iq.pubsub.add(REXML::Element.new('affiliations')) affiliations.attributes['node'] = node res = nil @stream.send_with_id(iq) { |reply| if reply.pubsub.first_element('affiliations') res = {} reply.pubsub.first_element('affiliations').each_element('affiliation') do |affiliation| # TODO: This should be handled by an affiliation element class aff = case affiliation.attributes['affiliation'] when 'owner' then :owner when 'publisher' then :publisher when 'none' then :none when 'outcast' then :outcast else nil end res[affiliation.attributes['node']] = aff end end true } res end |
#get_config_from(node) ⇒ Object
get configuration from a node
- node
- String
- return
- Jabber::PubSub::Configure
303 304 305 306 307 308 309 310 311 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 303 def get_config_from(node) iq = basic_pubsub_query(:get, true) iq.pubsub.add(Jabber::PubSub::OwnerNodeConfig.new(node)) ret = nil @stream.send_with_id(iq) do |reply| ret = reply.pubsub.first_element('configure') end ret end |
#get_items_from(node, count = nil, subid = nil) ⇒ Object
gets all items from a pubsub node
- node
- String
- count
- Fixnum
- subid
- String
- return
- Hash
-
{ id => [Jabber::PubSub::Item] }
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 159 def get_items_from(node, count=nil, subid=nil) if subid.nil? # Hm... no subid passed. Let's see if we can provide one. subids = get_subids_for(node) if ! subids.empty? # If more than one, sorry. We'll just respect the first. subid = subids[0] end end iq = basic_pubsub_query(:get) items = Jabber::PubSub::Items.new items.max_items = count items.subid = subid unless subid.nil? # if subid is still nil, we haven't any... why bother? items.node = node iq.pubsub.add(items) res = nil @stream.send_with_id(iq) { |reply| if reply.kind_of?(Iq) and reply.pubsub and reply.pubsub.first_element('items') res = {} reply.pubsub.first_element('items').each_element('item') do |item| res[item.attributes['id']] = item.children.first if item.children.first end end true } res end |
#get_options_from(node, jid, subid = nil) ⇒ Object
get options from a subscription
- node
- String
- jid
- Jabber::JID
-
or [String]
- subid
- String
-
or nil
- return
- Jabber::PubSub::OwnerConfigure
419 420 421 422 423 424 425 426 427 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 419 def (node, jid, subid = nil) iq = basic_pubsub_query(:get) iq.pubsub.add(Jabber::PubSub::SubscriptionConfig.new(node, jid.kind_of?(String) ? Jabber::JID.new(jid).strip: jid.strip, subid)) ret = nil @stream.send_with_id(iq) do |reply| ret = reply.pubsub.first_element('options') end ret end |
#get_subids_for(node) ⇒ Object
get subids for a passed node
- return
- Array
-
of subids
92 93 94 95 96 97 98 99 100 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 92 def get_subids_for(node) ret = [] get_subscriptions_from_all_nodes.each do |subscription| if subscription.node == node ret << subscription.subid end end return ret end |
#get_subscribers_from(node) ⇒ Object
shows all jids of subscribers of a node
- node
- String
- return
- Array
-
of [String]
404 405 406 407 408 409 410 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 404 def get_subscribers_from(node) res = [] get_subscriptions_from(node).each { |sub| res << sub.jid } res end |
#get_subscriptions_from(node) ⇒ Object
shows all subscriptions on the given node
- node
- String
- return
- Array
-
of [Jabber::Pubsub::Subscription]
381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 381 def get_subscriptions_from(node) iq = basic_pubsub_query(:get) entities = iq.pubsub.add(REXML::Element.new('subscriptions')) entities.attributes['node'] = node res = nil @stream.send_with_id(iq) { |reply| if reply.pubsub.first_element('subscriptions') res = [] if reply.pubsub.first_element('subscriptions').attributes['node'] == node reply.pubsub.first_element('subscriptions').each_element('subscription') { |subscription| res << PubSub::Subscription.import(subscription) } end end true } res end |
#get_subscriptions_from_all_nodes ⇒ Object
get all subscriptions on a pubsub component
- return
- Hash
-
of [PubSub::Subscription]
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 73 def get_subscriptions_from_all_nodes iq = basic_pubsub_query(:get) entities = iq.pubsub.add(REXML::Element.new('subscriptions')) res = nil @stream.send_with_id(iq) { |reply| if reply.pubsub.first_element('subscriptions') res = [] reply.pubsub.first_element('subscriptions').each_element('subscription') { |subscription| res << Jabber::PubSub::Subscription.import(subscription) } end } res end |
#publish_item_to(node, item) ⇒ Object
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
193 194 195 196 197 198 199 200 201 202 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 193 def publish_item_to(node,item) iq = basic_pubsub_query(:set) publish = iq.pubsub.add(REXML::Element.new('publish')) publish.attributes['node'] = node if item.kind_of?(Jabber::PubSub::Item) publish.add(item) @stream.send_with_id(iq) end end |
#publish_item_with_id_to(node, item, id) ⇒ Object
- node
- String
- item
- REXML::Element
- id
- String
- return
-
true
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 209 def publish_item_with_id_to(node,item,id) iq = basic_pubsub_query(:set) publish = iq.pubsub.add(REXML::Element.new('publish')) publish.attributes['node'] = node if item.kind_of?(REXML::Element) xmlitem = Jabber::PubSub::Item.new xmlitem.id = id xmlitem.import(item) publish.add(xmlitem) else raise "given item is not a proper xml document or Jabber::PubSub::Item" end @stream.send_with_id(iq) end |
#purge_items_from(node) ⇒ Object
purges all items on a persistent node
- node
- String
- return
-
true
254 255 256 257 258 259 260 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 254 def purge_items_from(node) iq = basic_pubsub_query(:set, true) purge = REXML::Element.new('purge') purge.attributes['node'] = node iq.pubsub.add(purge) @stream.send_with_id(iq) end |
#set_affiliations(node, jid, role = 'publisher') ⇒ Object
334 335 336 337 338 339 340 341 342 343 344 345 346 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 334 def set_affiliations(node, jid, role = 'publisher') iq = basic_pubsub_query(:set, true) affiliations = iq.pubsub.add(REXML::Element.new('affiliations')) affiliations.attributes['node'] = node affiliation = affiliations.add(REXML::Element.new('affiliation')) affiliation.attributes['jid'] = jid.to_s affiliation.attributes['affiliation'] = role.to_s res = nil @stream.send_with_id(iq) { |reply| true } res end |
#set_config_for(node, config) ⇒ Object
set configuration for a node
- node
- String
- options
- Jabber::PubSub::NodeConfig
- return
-
true on success
318 319 320 321 322 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 318 def set_config_for(node, config) iq = basic_pubsub_query(:set, true) iq.pubsub.add(config) @stream.send_with_id(iq) end |
#set_options_for(node, jid, options, subid = nil) ⇒ Object
set options for a subscription
- node
- String
- jid
- Jabber::JID
-
or [String]
- options
-
[Jabber::PubSub::SubscriptionConfig} specifying configuration options
- subid
- String
-
or nil
- return
-
true
436 437 438 439 440 441 442 443 444 445 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 436 def (node, jid, , subid = nil) iq = basic_pubsub_query(:set) iq.pubsub.add(Jabber::PubSub::SubscriptionConfig.new(node, jid.kind_of?(String) ? Jabber::JID.new(jid).strip: jid.strip, , subid)) ret = false @stream.send_with_id(iq) do |reply| ret = ( reply.type == :result ) end ret end |
#subscribe_to(node) ⇒ Object
subscribe to a node
- node
- String
- return
- Hash
-
of { attributename => value }
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 106 def subscribe_to(node) iq = basic_pubsub_query(:set) sub = REXML::Element.new('subscribe') sub.attributes['node'] = node sub.attributes['jid'] = @stream.jid.strip.to_s iq.pubsub.add(sub) res = nil @stream.send_with_id(iq) do |reply| pubsubanswer = reply.pubsub if pubsubanswer.first_element('subscription') res = PubSub::Subscription.import(pubsubanswer.first_element('subscription')) end end # @stream.send_with_id(iq) res end |
#to_s ⇒ Object
String representation
- result
- String
-
The PubSub service’s JID
450 451 452 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 450 def to_s @pubsubjid.to_s end |
#unsubscribe_from(node, subid = nil) ⇒ Object
Unsubscribe from a node with an optional subscription id
May raise ServerError
- node
- String
- subid
- String
-
or nil (not supported)
- return
-
true
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/xmpp4r/pubsub/helper/servicehelper.rb', line 129 def unsubscribe_from(node, subid=nil) ret = [] if subid.nil? subids = get_subids_for(node) else subids = [ subid ] end subids << nil if subids.empty? subids.each do |sid| iq = basic_pubsub_query(:set) unsub = PubSub::Unsubscribe.new unsub.node = node unsub.jid = @stream.jid.strip unsub.subid = sid iq.pubsub.add(unsub) res = false @stream.send_with_id(iq) { |reply| res = reply.kind_of?(Jabber::Iq) and reply.type == :result } # @stream.send_with_id(iq) ret << res end ret end |