Sha256: f4c7a9850c2b2431722048d61cbc5d67d4b3b4c7eb63cbb5e58705e818b46d38

Contents?: true

Size: 955 Bytes

Versions: 1

Compression:

Stored size: 955 Bytes

Contents

require "suggest/version"

module Suggest
  def suggest params
    column_types = self.column_types.values.map(&:type)
    column_names = self.column_names
    columns = column_names.zip(column_types).to_h
    where_clauses = []
    params.each do |key, value|
      next if !columns.keys.include? key or value.nil?
      where_clauses << comp_exp(value,columns[key],key)
    end
    where_query = where_clauses.join(' AND ')
    where(where_query)
  end

  private

  def comp_exp value, type, name
    case type.to_s
    when 'string'
      comp_exp_str(value, name)
    when 'integer'
      comp_exp_num(value, name)
    when 'float'
      comp_exp_num(value, name)
    else
      ""
    end
  end

  def comp_exp_str value, name
    "#{name} ilike '%#{value.downcase.gsub(/[\s,]+/,'%')}%'"
  end

  def comp_exp_num value, name
    if /^[^\d]{1,2}/.match(value.to_s).nil?
      "#{name} = #{value}"
    else
      "#{name} #{value}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
suggest-0.1.0 lib/suggest.rb