跳至内容 跳至搜索
方法
#
D
I
M
N

属性

[R] attributes

类公共方法

new(attributes)

# File activemodel/lib/active_model/validations/acceptance.rb, line 28
def initialize(attributes)
  @attributes = attributes.map(&:to_s)
end

实例公共方法

==(other)

# File activemodel/lib/active_model/validations/acceptance.rb, line 73
def ==(other)
  self.class == other.class && attributes == other.attributes
end

define_on(klass)

# 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)

# 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)

# 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