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