Class: ActiveModel::Validations::AcceptanceValidator::LazilyDefineAttributes
- Inherits:
-
Module
- Object
- Module
- ActiveModel::Validations::AcceptanceValidator::LazilyDefineAttributes
show all
- Defined in:
- activemodel/lib/active_model/validations/acceptance.rb
Constant Summary
Constants inherited
from Module
Module::DELEGATION_RESERVED_KEYWORDS, Module::DELEGATION_RESERVED_METHOD_NAMES, Module::RUBY_RESERVED_KEYWORDS
Instance Method Summary
collapse
Methods inherited from Module
#alias_attribute, #anonymous?, #as_json, #attr_internal_accessor, #attr_internal_reader, #attr_internal_writer, #delegate, #delegate_missing_to, #deprecate, #mattr_accessor, #mattr_reader, #mattr_writer, #method_visibility, #module_parent, #module_parent_name, #module_parents, #redefine_method, #redefine_singleton_method, #remove_possible_method, #remove_possible_singleton_method, #silence_redefinition_of_method, #thread_mattr_accessor, #thread_mattr_reader, #thread_mattr_writer
#concern, #concerning
Constructor Details
Returns a new instance of LazilyDefineAttributes.
28
29
30
|
# File 'activemodel/lib/active_model/validations/acceptance.rb', line 28
def initialize(attributes)
@attributes = attributes.map(&:to_s)
end
|
Instance Method Details
#==(other) ⇒ Object
73
74
75
|
# File 'activemodel/lib/active_model/validations/acceptance.rb', line 73
def ==(other)
self.class == other.class && attributes == other.attributes
end
|
#define_on(klass) ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'activemodel/lib/active_model/validations/acceptance.rb', line 56
def define_on(klass)
@lock&.synchronize do
return unless @lock
attr_readers = attributes.reject { |name| klass.attribute_method?(name) }
attr_writers = attributes.reject { |name| klass.attribute_method?("#{name}=") }
attr_reader(*attr_readers)
attr_writer(*attr_writers)
remove_method :respond_to_missing?
remove_method :method_missing
@lock = nil
end
end
|
#included(klass) ⇒ Object
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'activemodel/lib/active_model/validations/acceptance.rb', line 32
def included(klass)
@lock = Mutex.new
mod = self
define_method(:respond_to_missing?) do |method_name, include_private = false|
mod.define_on(klass)
super(method_name, include_private) || mod.matches?(method_name)
end
define_method(:method_missing) do |method_name, *args, &block|
mod.define_on(klass)
if mod.matches?(method_name)
send(method_name, *args, &block)
else
super(method_name, *args, &block)
end
end
end
|
#matches?(method_name) ⇒ Boolean
51
52
53
54
|
# File 'activemodel/lib/active_model/validations/acceptance.rb', line 51
def matches?(method_name)
attr_name = method_name.to_s.chomp("=")
attributes.any? { |name| name == attr_name }
end
|