Module: ActiveModel::ErrorsDetails

Defined in:
lib/active_model/errors_details.rb,
lib/active_model/errors_details/version.rb

Constant Summary collapse

MESSAGE_OPTIONS =
[:message]
VERSION =
"1.2.0"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



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

def self.included(base)
  base.class_eval do
    alias_method :initialize_without_details, :initialize
    alias_method :initialize, :initialize_with_details

    alias_method :initialize_dup_without_details, :initialize_dup
    alias_method :initialize_dup, :initialize_dup_with_details

    alias_method :delete_without_details, :delete
    alias_method :delete, :delete_with_details

    alias_method :clear_without_details, :clear
    alias_method :clear, :clear_with_details

    alias_method :add_without_details, :add
    alias_method :add, :add_with_details
  end
end

Instance Method Details

#add_with_details(attribute, message = :invalid, options = {}) ⇒ Object



78
79
80
81
82
83
84
# File 'lib/active_model/errors_details.rb', line 78

def add_with_details(attribute, message = :invalid, options = {})
  message = message.call if message.respond_to?(:call)

  error = {error: message}.merge(options.except(*::ActiveModel::Errors::CALLBACKS_OPTIONS + MESSAGE_OPTIONS))
  details[attribute.to_sym] << error
  add_without_details(attribute, message, options)
end

#clear_with_detailsObject



73
74
75
76
# File 'lib/active_model/errors_details.rb', line 73

def clear_with_details
  details.clear
  clear_without_details
end

#delete_with_details(key) ⇒ Object



68
69
70
71
# File 'lib/active_model/errors_details.rb', line 68

def delete_with_details(key)
  details.delete(key)
  delete_without_details(key)
end

#detailsObject



59
60
61
# File 'lib/active_model/errors_details.rb', line 59

def details
  @details
end

#initialize_dup_with_details(other) ⇒ Object



54
55
56
57
# File 'lib/active_model/errors_details.rb', line 54

def initialize_dup_with_details(other)
  @details = other.details.deep_dup
  initialize_dup_without_details(other)
end

#initialize_with_details(base) ⇒ Object



63
64
65
66
# File 'lib/active_model/errors_details.rb', line 63

def initialize_with_details(base)
  @details = Hash.new { |details, attribute| details[attribute] = [] }
  initialize_without_details(base)
end