Class: ActiveModel::Validations::AcceptanceValidator::LazilyDefineAttributes
  
  
  
  
  
    - Inherits:
 
    - 
      Module
      
        
          - Object
 
          
            - Module
 
          
            - ActiveModel::Validations::AcceptanceValidator::LazilyDefineAttributes
 
          
        
        show all
      
     
  
  
  
  
  
  
  
  
  
  
    - Defined in:
 
    - activemodel/lib/active_model/validations/acceptance.rb
 
  
  
 
Overview
  
  Constant Summary
  
  Constants inherited
     from Module
  Module::DelegationError
  
    
      Instance Method Summary
      collapse
    
    
  
  
  
  
  
  
  
  
  
  Methods inherited from Module
  #alias_attribute, #anonymous?, #as_json, #attr_internal_accessor, #attr_internal_reader, #attr_internal_writer, #deep_dup, #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
     |