Module: ModernSearchlogic::ColumnConditions::ClassMethods

Defined in:
lib/modern_searchlogic/column_conditions.rb

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object (private)



203
204
205
206
207
208
# File 'lib/modern_searchlogic/column_conditions.rb', line 203

def method_missing(method, *args, &block)
  return super if abstract_class? || !searchlogic_schema_ready?
  return super unless dynamically_define_searchlogic_method(method)

  __send__(method, *args, &block)
end

Instance Method Details

#dynamically_define_searchlogic_method(method) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/modern_searchlogic/column_conditions.rb', line 20

def dynamically_define_searchlogic_method(method)
  return true if searchlogic_scope_dynamically_defined?(method)
  return false unless (searchlogic_scope = searchlogic_column_condition_method_block(method.to_s))
  singleton_class.__send__(:define_method, method, &searchlogic_scope[:block])
  self._dynamically_defined_searchlogic_scopes = self._dynamically_defined_searchlogic_scopes.merge(method => searchlogic_scope)
  true
end

#respond_to_missing?(method) ⇒ Boolean

Returns:

  • (Boolean)


8
9
10
# File 'lib/modern_searchlogic/column_conditions.rb', line 8

def respond_to_missing?(method, *)
  super || valid_searchlogic_scope?(method)
end

#searchlogic_method_arity(method) ⇒ Object

Raises:

  • (ArgumentError)


28
29
30
31
32
33
34
35
36
# File 'lib/modern_searchlogic/column_conditions.rb', line 28

def searchlogic_method_arity(method)
  method = method.to_sym
  raise ArgumentError, "Not a searchlogic scope" unless valid_searchlogic_scope?(method)
  dynamically_define_searchlogic_method(method)

  searchlogic_scope_dynamically_defined?(method) ?
    _dynamically_defined_searchlogic_scopes[method][:arity] :
    self.method(method).arity
end

#valid_searchlogic_scope?(method) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
15
16
17
18
# File 'lib/modern_searchlogic/column_conditions.rb', line 12

def valid_searchlogic_scope?(method)
  return false if abstract_class? || method =~ /^define_method_/ || !searchlogic_schema_ready?

  searchlogic_scope_dynamically_defined?(method) ||
    !!searchlogic_column_condition_method_block(method.to_s) ||
    _defined_scopes.include?(method.to_sym)
end