Class: ActiveRecord::DynamicMatchers::Method
- Defined in:
- activerecord/lib/active_record/dynamic_matchers.rb
Direct Known Subclasses
Class Attribute Summary collapse
-
.matchers ⇒ Object
readonly
Returns the value of attribute matchers.
Instance Attribute Summary collapse
-
#attribute_names ⇒ Object
readonly
Returns the value of attribute attribute_names.
-
#model ⇒ Object
readonly
Returns the value of attribute model.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Class Method Summary collapse
Instance Method Summary collapse
- #define ⇒ Object
-
#initialize(model, method_name) ⇒ Method
constructor
A new instance of Method.
- #valid? ⇒ Boolean
Constructor Details
#initialize(model, method_name) ⇒ Method
Returns a new instance of Method.
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
.matchers ⇒ Object (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_names ⇒ Object (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 |
#model ⇒ Object (readonly)
Returns the value of attribute model
50 51 52 |
# File 'activerecord/lib/active_record/dynamic_matchers.rb', line 50 def model @model end |
#name ⇒ Object (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
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 |
.pattern ⇒ Object
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 |
.prefix ⇒ Object
41 42 43 |
# File 'activerecord/lib/active_record/dynamic_matchers.rb', line 41 def prefix raise NotImplementedError end |
.suffix ⇒ Object
45 46 47 |
# File 'activerecord/lib/active_record/dynamic_matchers.rb', line 45 def suffix "" end |
Instance Method Details
#define ⇒ Object
63 64 65 66 67 68 69 |
# 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 |
#valid? ⇒ Boolean
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 |