Module: Typus::Orm::ActiveRecord::Search

Includes:
Base::Search
Defined in:
lib/typus/orm/active_record/search.rb

Instance Method Summary collapse

Methods included from Base::Search

#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