Class: Jabber::ErrorResponse

Inherits:
XMPPElement show all
Defined in:
lib/xmpp4r/errors.rb

Overview

A class used to build/parse <error/> elements. Look at XEP-0086 for explanation: www.xmpp.org/extensions/xep-0086.html

FIXME : XEP-0086 is officially deprecated. What effect does that have on this class? Any?

Constant Summary collapse

@@Errors =

Possible XMPP error conditions, types and codes (XEP-0086)

[['bad-request', :modify, 400],
['conflict', :cancel, 409],
['feature-not-implemented', :cancel, 501],
['forbidden', :auth, 403],
['gone', :modify, 302],
['internal-server-error', :wait, 500],
['item-not-found', :cancel, 404],
['jid-malformed', :modify, 400],
['not-acceptable', :modify, 406],
['not-allowed', :cancel, 405],
['not-authorized', :auth, 401],
['payment-required', :auth, 402],
['recipient-unavailable', :wait, 404],
['redirect', :modify, 302],
['registration-required', :auth, 407],
['remote-server-not-found', :cancel, 404],
['remote-server-timeout', :wait, 504],
['resource-constraint', :wait, 500],
['service-unavailable', :cancel, 503],
['subscription-required', :auth, 407],
['undefined-condition', nil, 500],
['unexpected-request', :wait, 400]]

Instance Method Summary collapse

Methods inherited from XMPPElement

class_for_name_xmlns, #clone, force_xmlns, force_xmlns?, import, name_xmlns, name_xmlns_for_class, #parent=, #set_xml_lang, #typed_add, #xml_lang, #xml_lang=

Methods inherited from REXML::Element

#==, #delete_elements, #each_elements, #first_element, #first_element_content, #first_element_text, #import, import, #replace_element_content, #replace_element_text, #typed_add

Constructor Details

#initialize(errorcondition = nil, text = nil) ⇒ ErrorResponse

errorcondition
nil

or [String] of the following:

  • “bad-request”

  • “conflict”

  • “feature-not-implemented”

  • “forbidden”

  • “gone”

  • “internal-server-error”

  • “item-not-found”

  • “jid-malformed”

  • “not-acceptable”

  • “not-allowed”

  • “not-authorized”

  • “payment-required”

  • “recipient-unavailable”

  • “redirect”

  • “registration-required”

  • “remote-server-not-found”

  • “remote-server-timeout”

  • “resource-constraint”

  • “service-unavailable”

  • “subscription-required”

  • “undefined-condition”

  • “unexpected-request”

Will raise an [Exception] if not [nil] and none of the above

Also sets type and code to appropriate values according to errorcondition

text: [nil] or [String] ErrorResponse text



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/xmpp4r/errors.rb', line 100

def initialize(errorcondition=nil, text=nil)
  if errorcondition.nil?
    super()
    set_text(text) unless text.nil?
  else
    errortype = nil
    errorcode = nil
    @@Errors.each { |cond,type,code|
      if errorcondition == cond
        errortype = type
        errorcode = code
      end
    }

    if errortype.nil? || errorcode.nil?
      raise ArgumentError, "Unknown error condition when initializing ErrorReponse"
    end

    super()
    set_error(errorcondition)
    set_type(errortype)
    set_code(errorcode)
    set_text(text) unless text.nil?
  end
end

Instance Method Details

#codeObject

Get the 'Legacy error code' or nil

result
Integer

Error code



129
130
131
132
133
134
135
# File 'lib/xmpp4r/errors.rb', line 129

def code
  if attributes['code']
    attributes['code'].to_i
  else
    nil
  end
end

#code=(i) ⇒ Object

Set the 'Legacy error code' or nil

i
Integer

Error code



140
141
142
143
144
145
146
# File 'lib/xmpp4r/errors.rb', line 140

def code=(i)
  if i.nil?
    attributes['code'] = nil
  else
    attributes['code'] = i.to_s
  end
end

#errorObject

Get the 'XMPP error condition'

This can be anything that possess the specific namespace, checks don't apply here



160
161
162
163
164
# File 'lib/xmpp4r/errors.rb', line 160

def error
  name = nil
  each_element { |e| name = e.name if (e.namespace == 'urn:ietf:params:xml:ns:xmpp-stanzas') && (e.name != 'text') }
  name
end

#error=(s) ⇒ Object

Set the 'XMPP error condition'

One previous element with that namespace will be deleted before

s
String

Name of the element to be added,

namespace will be added automatically, checks don't apply here



173
174
175
176
177
178
179
180
181
# File 'lib/xmpp4r/errors.rb', line 173

def error=(s)
  xe = nil
  each_element { |e| xe = e if (e.namespace == 'urn:ietf:params:xml:ns:xmpp-stanzas') && (e.name != 'text') }
  unless xe.nil?
    delete_element(xe)
  end

  add_element(s).add_namespace('urn:ietf:params:xml:ns:xmpp-stanzas')
end

#set_code(i) ⇒ Object

Set the 'Legacy error code' (chaining-friendly)



150
151
152
153
# File 'lib/xmpp4r/errors.rb', line 150

def set_code(i)
  self.code = i
  self
end

#set_error(s) ⇒ Object

Set the 'XMPP error condition' (chaining-friendly)



185
186
187
188
# File 'lib/xmpp4r/errors.rb', line 185

def set_error(s)
  self.error = s
  self
end

#set_text(s) ⇒ Object

Set the errors <text/> element text (chaining-friendly)



213
214
215
216
# File 'lib/xmpp4r/errors.rb', line 213

def set_text(s)
  self.text = s
  self
end

#set_type(t) ⇒ Object

Set the type of error (chaining-friendly)



253
254
255
256
# File 'lib/xmpp4r/errors.rb', line 253

def set_type(t)
  self.type = t
  self
end

#textObject

Get the errors <text/> element text

result
String

or nil



193
194
195
# File 'lib/xmpp4r/errors.rb', line 193

def text
  first_element_text('text') || super
end

#text=(s) ⇒ Object

Set the errors <text/> element text (Previous <text/> elements will be deleted first)

s
String

<text/> content or [nil] if no <text/> element



201
202
203
204
205
206
207
208
209
# File 'lib/xmpp4r/errors.rb', line 201

def text=(s)
  delete_elements('text')

  unless s.nil?
    e = add_element('text')
    e.add_namespace('urn:ietf:params:xml:ns:xmpp-stanzas')
    e.text = s
  end
end

#typeObject

Get the type of error (meaning how to proceed)

result
Symbol

or [nil] as following:

  • :auth

  • :cancel

  • :continue

  • :modify

  • :wait



227
228
229
230
231
232
233
234
235
236
# File 'lib/xmpp4r/errors.rb', line 227

def type
  case attributes['type']
    when 'auth' then :auth
    when 'cancel' then :cancel
    when 'continue' then :continue
    when 'modify' then :modify
    when 'wait' then :wait
    else nil
  end
end

#type=(t) ⇒ Object

Set the type of error (see ErrorResponse#type)



240
241
242
243
244
245
246
247
248
249
# File 'lib/xmpp4r/errors.rb', line 240

def type=(t)
  case t
    when :auth then attributes['type'] = 'auth'
    when :cancel then attributes['type'] = 'cancel'
    when :continue then attributes['type'] = 'continue'
    when :modify then attributes['type'] = 'modify'
    when :wait then attributes['type'] = 'wait'
    else attributes['type'] = nil
  end
end