Class: ActivePStore::DynamicMatchers::Method

Inherits:
Object
  • Object
show all
Defined in:
lib/active_pstore/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, name) ⇒ Method

Returns a new instance of Method.



56
57
58
59
60
# File 'lib/active_pstore/dynamic_matchers.rb', line 56

def initialize(model, name)
  @model           = model
  @name            = name.to_s
  @attribute_names = @name.match(self.class.pattern)[1].split('_and_')
end

Class Attribute Details

.matchersObject (readonly)

Returns the value of attribute matchers.



34
35
36
# File 'lib/active_pstore/dynamic_matchers.rb', line 34

def matchers
  @matchers
end

Instance Attribute Details

#attribute_namesObject (readonly)

Returns the value of attribute attribute_names.



54
55
56
# File 'lib/active_pstore/dynamic_matchers.rb', line 54

def attribute_names
  @attribute_names
end

#modelObject (readonly)

Returns the value of attribute model.



54
55
56
# File 'lib/active_pstore/dynamic_matchers.rb', line 54

def model
  @model
end

#nameObject (readonly)

Returns the value of attribute name.



54
55
56
# File 'lib/active_pstore/dynamic_matchers.rb', line 54

def name
  @name
end

Class Method Details

.match(model, name) ⇒ Object



36
37
38
39
# File 'lib/active_pstore/dynamic_matchers.rb', line 36

def match(model, name)
  klass = matchers.find {|k| k.pattern === name }
  klass.new(model, name) if klass
end

.patternObject



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

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

.prefixObject

Raises:

  • (NotImplementedError)


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

def prefix
  raise NotImplementedError
end

.suffixObject



49
50
51
# File 'lib/active_pstore/dynamic_matchers.rb', line 49

def suffix
  ''
end

Instance Method Details

#defineObject



62
63
64
65
66
67
68
# File 'lib/active_pstore/dynamic_matchers.rb', line 62

def define
  model.class_eval <<-CODE, __FILE__, __LINE__ + 1
    def self.#{name}(#{signature})
      #{body}
    end
  CODE
end