Method: Effective::Resources::Relation#search

Defined in:
app/models/effective/resources/relation.rb

#search(name, value, as: nil, column: nil, operation: nil) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'app/models/effective/resources/relation.rb', line 68

def search(name, value, as: nil, column: nil, operation: nil)
  raise 'expected relation to be present' unless relation

  sql_as = (as || sql_type(name))
  sql_column = (column || sql_column(name))
  sql_operation = (operation || sql_operation(name, as: sql_as)).to_sym

  if ['SUM(', 'COUNT(', 'MAX(', 'MIN(', 'AVG('].any? { |str| sql_column.to_s.include?(str) }
    return relation.having("#{sql_column} = ?", value)
  end

  case sql_as
  when :belongs_to, :belongs_to_polymorphic, :has_and_belongs_to_many, :has_many, :has_one
    search_associated(name, value, as: sql_as, operation: sql_operation)
  else
    return relation.where(is_null(sql_column)) if value.to_s == 'nil'
    search_attribute(name, value, as: sql_as, operation: sql_operation, sql_column: sql_column)
  end
end