Module: Searchlogic::NamedScopes::Associations

Defined in:
lib/searchlogic/named_scopes/associations.rb

Overview

Handles dynamically creating named scopes for associations.

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

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



33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/searchlogic/named_scopes/associations.rb', line 33

def method_missing(name, *args, &block)
  if details = association_condition_details(name)
    create_association_condition(details[:association], details[:column], details[:condition], args)
    send(name, *args)
  elsif details = association_alias_condition_details(name)
    create_association_alias_condition(details[:association], details[:column], details[:condition], args)
    send(name, *args)
  elsif details = association_ordering_condition_details(name)
    create_association_ordering_condition(details[:association], details[:order_as], details[:column], args)
    send(name, *args)
  else
    super
  end
end

Instance Method Details

#association_alias_condition?(name) ⇒ Boolean

Is the ane of the method a valie name for an association alias condition? An alias being “gt” for “greater_than”, etc.

Returns:

  • (Boolean)


28
29
30
# File 'lib/searchlogic/named_scopes/associations.rb', line 28

def association_alias_condition?(name)
  !association_alias_condition_details(name).nil?
end

#association_condition?(name) ⇒ Boolean

Is the name of the method a valid name for an association condition?

Returns:

  • (Boolean)


22
23
24
# File 'lib/searchlogic/named_scopes/associations.rb', line 22

def association_condition?(name)
  !association_condition_details(name).nil?
end

#condition?(name) ⇒ Boolean

:nodoc:

Returns:

  • (Boolean)


5
6
7
# File 'lib/searchlogic/named_scopes/associations.rb', line 5

def condition?(name) # :nodoc:
  super || association_condition?(name) || association_alias_condition?(name)
end

#primary_condition_name(name) ⇒ Object

:nodoc:



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/searchlogic/named_scopes/associations.rb', line 9

def primary_condition_name(name) # :nodoc:
  if result = super
    result
  elsif association_condition?(name)
    name.to_sym
  elsif details = association_alias_condition_details(name)
    "#{details[:association]}_#{details[:column]}_#{primary_condition(details[:condition])}".to_sym
  else
    nil
  end
end