Skip to Content Skip to Search

class ActiveRecord::DynamicMatchers::Method

Attributes

[R] matchers
[R] attribute_names
[R] model
[R] name

Public class methods

Source code GitHub
# File activerecord/lib/active_record/dynamic_matchers.rb, line 32
def match(model, name)
  klass = matchers.find { |k| k.pattern.match?(name) }
  klass.new(model, name) if klass
end
Source code GitHub
# File activerecord/lib/active_record/dynamic_matchers.rb, line 52
def initialize(model, method_name)
  @model           = model
  @name            = method_name.to_s
  @attribute_names = @name.match(self.class.pattern)[1].split("_and_")
  @attribute_names.map! { |name| @model.attribute_aliases[name] || name }
end
Source code GitHub
# File activerecord/lib/active_record/dynamic_matchers.rb, line 37
def pattern
  @pattern ||= /\A#{prefix}_([_a-zA-Z]\w*)#{suffix}\Z/
end
Source code GitHub
# File activerecord/lib/active_record/dynamic_matchers.rb, line 41
def prefix
  raise NotImplementedError
end
Source code GitHub
# File activerecord/lib/active_record/dynamic_matchers.rb, line 45
def suffix
  ""
end

Public instance methods

Source code GitHub
# File activerecord/lib/active_record/dynamic_matchers.rb, line 63
        def define
          model.class_eval <<-CODE, __FILE__, __LINE__ + 1
            def self.#{name}(#{signature})
              #{body}
            end
          CODE
        end
Source code GitHub
# File activerecord/lib/active_record/dynamic_matchers.rb, line 59
def valid?
  attribute_names.all? { |name| model.columns_hash[name] || model.reflect_on_aggregation(name.to_sym) }
end

Definition files