Sha256: 878f6b684c78a6b1f4054d13658650f6028258192d49880b46d9924dad8c8b77

Contents?: true

Size: 1.08 KB

Versions: 27

Compression:

Stored size: 1.08 KB

Contents

# encoding: UTF-8

module Vines
  class Stanza
    class PubSub
      class Delete < PubSub
        NS = NAMESPACES[:pubsub]

        register "/iq[@id and @type='set']/ns:pubsub/ns:delete", 'ns' => NS

        def process
          return if route_iq || !allowed?
          validate_to_address

          node = self.xpath('ns:pubsub/ns:delete', '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)

          pubsub.publish(id, message(id))
          pubsub.delete_node(id)
          stream.write(to_result)
        end

        private

        def message(id)
          doc = Document.new
          doc.create_element('message') do |node|
            node << node.document.create_element('event') do |event|
              event.default_namespace = NAMESPACES[:pubsub_event]
              event << node.document.create_element('delete', 'node' => id)
            end
          end
        end
      end
    end
  end
end

Version data entries

27 entries across 27 versions & 4 rubygems

Version Path
vinesmod-0.4.5 lib/vines/stanza/pubsub/delete.rb
vines-0.4.5 lib/vines/stanza/pubsub/delete.rb
vines-0.4.4 lib/vines/stanza/pubsub/delete.rb
vines-0.4.3 lib/vines/stanza/pubsub/delete.rb
vines-0.4.2 lib/vines/stanza/pubsub/delete.rb
vines-0.4.1 lib/vines/stanza/pubsub/delete.rb
vines-0.4.0 lib/vines/stanza/pubsub/delete.rb