Sha256: d9a7f869e04c35f067581db154cacfa2117d5adac60fa63096e95ca56d240715

Contents?: true

Size: 1.34 KB

Versions: 5

Compression:

Stored size: 1.34 KB

Contents

module Typus
  module Orm
    module ActiveRecord
      module Search

        include Typus::Orm::Base::Search

        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

        def build_filter_interval(interval, key)
          ["#{table_name}.#{key} BETWEEN ? AND ?", interval.first.to_s(:db), interval.last.to_s(:db)]
        end

        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

      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
typus-3.1.10 lib/typus/orm/active_record/search.rb
typus-3.1.9 lib/typus/orm/active_record/search.rb
typus-3.1.8 lib/typus/orm/active_record/search.rb
typus-3.1.7 lib/typus/orm/active_record/search.rb
typus-3.1.6 lib/typus/orm/active_record/search.rb