Class: ActiveResource::Errors

Inherits:
ActiveModel::Errors
  • Object
show all
Defined in:
lib/active_resource/validations.rb

Overview

Active Resource validation is reported to and from this object, which is used by Base#save to determine whether the object in a valid state to be saved. See usage example in Validations.

Instance Method Summary collapse

Instance Method Details

#from_array(messages, save_cache = false) ⇒ Object

Grabs errors from an array of messages (like ActiveRecord::Validations). The second parameter directs the errors cache to be cleared (default) or not (by passing true).



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/active_resource/validations.rb', line 16

def from_array(messages, save_cache = false)
  clear unless save_cache
  humanized_attributes = Hash[@base.known_attributes.map { |attr_name| [attr_name.humanize, attr_name] }]
  messages.each do |message|
    attr_message = humanized_attributes.keys.sort_by { |a| -a.length }.detect do |attr_name|
      if message[0, attr_name.size + 1] == "#{attr_name} "
        add humanized_attributes[attr_name], message[(attr_name.size + 1)..-1]
      end
    end
    add(:base, message) if attr_message.nil?
  end
end

#from_hash(messages, save_cache = false) ⇒ Object

Grabs errors from a hash of attribute => array of errors elements The second parameter directs the errors cache to be cleared (default) or not (by passing true)

Unrecognized attribute names will be humanized and added to the record’s base errors.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/active_resource/validations.rb', line 35

def from_hash(messages, save_cache = false)
  clear unless save_cache

  messages.each do |(key, errors)|
    errors.each do |error|
      if @base.known_attributes.include?(key)
        add key, error
      elsif key == "base"
        add(:base, error)
      else
        # reporting an error on an attribute not in attributes
        # format and add them to base
        add(:base, "#{key.humanize} #{error}")
      end
    end
  end
end

#from_json(json, save_cache = false) ⇒ Object

Grabs errors from a json response.



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/active_resource/validations.rb', line 54

def from_json(json, save_cache = false)
  decoded = ActiveSupport::JSON.decode(json) || {} rescue {}
  if decoded.kind_of?(Hash) && (decoded.has_key?("errors") || decoded.empty?)
    errors = decoded["errors"] || {}
    if errors.kind_of?(Array)
      # 3.2.1-style with array of strings
      ActiveResource.deprecator.warn("Returning errors as an array of strings is deprecated.")
      from_array errors, save_cache
    else
      # 3.2.2+ style
      from_hash errors, save_cache
    end
  else
    # <3.2-style respond_with - lacks 'errors' key
    ActiveResource.deprecator.warn('Returning errors as a hash without a root "errors" key is deprecated.')
    from_hash decoded, save_cache
  end
end

#from_xml(xml, save_cache = false) ⇒ Object

Grabs errors from an XML response.



74
75
76
77
# File 'lib/active_resource/validations.rb', line 74

def from_xml(xml, save_cache = false)
  array = Array.wrap(Hash.from_xml(xml)["errors"]["error"]) rescue []
  from_array array, save_cache
end