module ActiveModel::ErrorsDetails

Constants

MESSAGE_OPTIONS
VERSION

Public Class Methods

included(base) click to toggle source
# File lib/active_model/errors_details.rb, line 70
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

Public Instance Methods

add_with_details(attribute, message = :invalid, options = {}) click to toggle source
# File lib/active_model/errors_details.rb, line 113
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_details() click to toggle source
# File lib/active_model/errors_details.rb, line 108
def clear_with_details
  details.clear
  clear_without_details
end
delete_with_details(key) click to toggle source
# File lib/active_model/errors_details.rb, line 103
def delete_with_details(key)
  details.delete(key)
  delete_without_details(key)
end
details() click to toggle source
# File lib/active_model/errors_details.rb, line 94
def details
  @details
end
initialize_dup_with_details(other) click to toggle source
# File lib/active_model/errors_details.rb, line 89
def initialize_dup_with_details(other)
  @details = other.details.deep_dup
  initialize_dup_without_details(other)
end
initialize_with_details(base) click to toggle source
# File lib/active_model/errors_details.rb, line 98
def initialize_with_details(base)
  @details = Hash.new { |details, attribute| details[attribute] = [] }
  initialize_without_details(base)
end
marshal_dump() click to toggle source
# File lib/active_model/errors_details.rb, line 121
def marshal_dump
  [@base, without_default_proc(@messages), without_default_proc(@details)]
end
marshal_load(array) click to toggle source
# File lib/active_model/errors_details.rb, line 125
def marshal_load(array)
  @base, @messages, @details = array
  apply_default_array(@messages)
  apply_default_array(@details)
end

Private Instance Methods

apply_default_array(hash) click to toggle source
# File lib/active_model/errors_details.rb, line 139
def apply_default_array(hash)
  hash.default_proc = proc { |h, key| h[key] = [] }
  hash
end
without_default_proc(hash) click to toggle source
# File lib/active_model/errors_details.rb, line 133
def without_default_proc(hash)
  hash.dup.tap do |new_h|
    new_h.default_proc = nil
  end
end