lib/blather/errors/stanza_error.rb in sprsquish-blather-0.3.4 vs lib/blather/errors/stanza_error.rb in sprsquish-blather-0.4.0

- old
+ new

@@ -2,10 +2,11 @@ ## # Stanza errors # RFC3920 Section 9.3 (http://xmpp.org/rfcs/rfc3920.html#stanzas-error) class StanzaError < BlatherError + STANZA_ERR_NS = 'urn:ietf:params:xml:ns:xmpp-stanzas' VALID_TYPES = [:cancel, :continue, :modify, :auth, :wait] register :stanza_error attr_reader :original, :name, :type, :text, :extras @@ -17,13 +18,13 @@ original = node.copy original.remove_child 'error' error_node = node.find_first '//*[local-name()="error"]' - name = error_node.find_first('child::*[name()!="text"]', 'urn:ietf:params:xml:ns:xmpp-stanzas').element_name + name = error_node.find_first('child::*[name()!="text"]', STANZA_ERR_NS).element_name type = error_node['type'] - text = node.find_first '//err_ns:text', :err_ns => 'urn:ietf:params:xml:ns:xmpp-stanzas' + text = node.find_first 'descendant::*[name()="text"]', STANZA_ERR_NS text = text.content if text extras = error_node.find("descendant::*[name()!='text' and name()!='#{name}']").map { |n| n } self.new original, name, type, text, extras @@ -57,41 +58,33 @@ ## # Creates an XML node from the error def to_node node = self.original.reply + node.type = 'error' + node << (error_node = XMPPNode.new('error')) - error_node = XMPPNode.new 'error' - err = XMPPNode.new(@name) + error_node << (err = XMPPNode.new(@name, error_node.document)) err.namespace = 'urn:ietf:params:xml:ns:xmpp-stanzas' - error_node << err if self.text - text = XMPPNode.new('text') + error_node << (text = XMPPNode.new('text', error_node.document)) text.namespace = 'urn:ietf:params:xml:ns:xmpp-stanzas' - text << self.text - error_node << text + text.content = self.text end - self.extras.each do |extra| - extra_copy = extra.copy - extra_copy.namespace = extra.namespace - error_node << extra_copy - end - - node << error_node - node.type = 'error' + self.extras.each { |extra| error_node << extra.dup } node end ## # Turns the object into XML fit to be sent over the stream def to_xml to_node.to_s end def inspect # :nodoc: - "Stanza Error (#{@name}): #{self.text}" + "Stanza Error (#{@name}): #{self.text} [#{self.extras}]" end alias_method :to_s, :inspect # :nodoc: end #StanzaError end #Blather \ No newline at end of file