Module: Typus::Orm::ActiveRecord::Search
- Includes:
- Base::Search
- Defined in:
- lib/typus/orm/active_record/search.rb
Instance Method Summary
collapse
#build_boolean_conditions, #build_conditions, #build_date_conditions, #build_datetime_conditions, #build_has_many_conditions, #build_string_conditions
Instance Method Details
#build_filter_interval(interval, key) ⇒ Object
30
31
32
|
# File 'lib/typus/orm/active_record/search.rb', line 30
def build_filter_interval(interval, key)
["#{table_name}.#{key} BETWEEN ? AND ?", interval.first.to_s(:db), interval.last.to_s(:db)]
end
|
#build_my_joins(params) ⇒ Object
34
35
36
37
38
|
# File 'lib/typus/orm/active_record/search.rb', line 34
def build_my_joins(params)
query_params = params.dup
query_params.reject! { |k, v| !model_relationships.keys.include?(k.to_sym) }
query_params.compact.map { |k, v| k.to_sym }
end
|
#build_search_conditions(key, value) ⇒ Object
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/typus/orm/active_record/search.rb', line 8
def build_search_conditions(key, value)
Array.new.tap do |search|
query = ::ActiveRecord::Base.connection.quote_string(value.downcase)
search_fields = typus_search_fields
search_fields = search_fields.empty? ? { "name" => "@" } : search_fields
search_fields.each do |key, value|
_query = case value
when "=" then query
when "^" then "#{query}%"
when "@" then "%#{query}%"
end
column_name = (key.match('\.') ? key : "#{table_name}.#{key}")
table_key = (adapter == 'postgresql') ? "LOWER(TEXT(#{column_name}))" : "#{column_name}"
search << "#{table_key} LIKE '#{_query}'"
end
end.join(" OR ")
end
|