Class: Vines::Stanza::PubSub::Publish

Inherits:
Vines::Stanza::PubSub show all
Defined in:
lib/vines/stanza/pubsub/publish.rb

Constant Summary collapse

NS =
NAMESPACES[:pubsub]

Constants inherited from Iq

Iq::VALID_TYPES

Constants inherited from Vines::Stanza

EMPTY, ROUTABLE_STANZAS

Instance Attribute Summary

Attributes inherited from Vines::Stanza

#stream

Instance Method Summary collapse

Methods inherited from Iq

#to_result

Methods inherited from Vines::Stanza

#broadcast, from_node, #initialize, #local?, #local_jid?, #method_missing, register, #route, #router, #send_unavailable, #storage, #to_pubsub_domain?, #unavailable, #validate_from, #validate_to

Constructor Details

This class inherits a constructor from Vines::Stanza

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Vines::Stanza

Instance Method Details

#processObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/vines/stanza/pubsub/publish.rb', line 11

def process
  return if route_iq || !allowed?
  validate_to_address

  node = self.xpath('ns:pubsub/ns:publish', 'ns' => NS)
  raise StanzaErrors::BadRequest.new(self, 'modify') if node.size != 1
  node = node.first
  id = node['node']

  raise StanzaErrors::ItemNotFound.new(self, 'cancel') unless pubsub.node?(id)

  item = node.xpath('ns:item', 'ns' => NS)
  raise StanzaErrors::BadRequest.new(self, 'modify') unless item.size == 1
  item = item.first
  unless item['id']
    item['id'] = Kit.uuid
    include_item = true
  end

  raise StanzaErrors::BadRequest.new(self, 'modify') unless item.elements.size == 1
  pubsub.publish(id, message(id, item))
  send_result_iq(id, include_item ? item : nil)
end