Class: ActiveRecord::DynamicMatchers::Method

Inherits:
Object
  • Object
show all
Defined in:
activerecord/lib/active_record/dynamic_matchers.rb

Direct Known Subclasses

FindBy, FindByBang

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model, method_name) ⇒ Method

Returns a new instance of Method.

[View source]

52
53
54
55
56
57
# 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

Class Attribute Details

.matchersObject (readonly)

Returns the value of attribute matchers


30
31
32
# File 'activerecord/lib/active_record/dynamic_matchers.rb', line 30

def matchers
  @matchers
end

Instance Attribute Details

#attribute_namesObject (readonly)

Returns the value of attribute attribute_names


50
51
52
# File 'activerecord/lib/active_record/dynamic_matchers.rb', line 50

def attribute_names
  @attribute_names
end

#modelObject (readonly)

Returns the value of attribute model


50
51
52
# File 'activerecord/lib/active_record/dynamic_matchers.rb', line 50

def model
  @model
end

#nameObject (readonly)

Returns the value of attribute name


50
51
52
# File 'activerecord/lib/active_record/dynamic_matchers.rb', line 50

def name
  @name
end

Class Method Details

.match(model, name) ⇒ Object

[View source]

32
33
34
35
# 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

.patternObject

[View source]

37
38
39
# File 'activerecord/lib/active_record/dynamic_matchers.rb', line 37

def pattern
  @pattern ||= /\A#{prefix}_([_a-zA-Z]\w*)#{suffix}\Z/
end

.prefixObject

Raises:

  • (NotImplementedError)
[View source]

41
42
43
# File 'activerecord/lib/active_record/dynamic_matchers.rb', line 41

def prefix
  raise NotImplementedError
end

.suffixObject

[View source]

45
46
47
# File 'activerecord/lib/active_record/dynamic_matchers.rb', line 45

def suffix
  ""
end

Instance Method Details

#defineObject

[View source]

63
64
65
66
67
68
69
# File 'activerecord/lib/active_record/dynamic_matchers.rb', line 63

def define
  model.class_eval "    def self.\#{name}(\#{signature})\n      \#{body}\n    end\n  CODE\nend\n", __FILE__, __LINE__ + 1

#valid?Boolean

Returns:

  • (Boolean)
[View source]

59
60
61
# 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