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.1.1"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/active_model/errors_details.rb', line 9

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



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

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



47
48
49
50
# File 'lib/active_model/errors_details.rb', line 47

def clear_with_details
  details.clear
  clear_without_details
end

#delete_with_details(key) ⇒ Object



42
43
44
45
# File 'lib/active_model/errors_details.rb', line 42

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

#detailsObject



33
34
35
# File 'lib/active_model/errors_details.rb', line 33

def details
  @details
end

#initialize_dup_with_details(other) ⇒ Object



28
29
30
31
# File 'lib/active_model/errors_details.rb', line 28

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

#initialize_with_details(base) ⇒ Object



37
38
39
40
# File 'lib/active_model/errors_details.rb', line 37

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