module LogicalQueryParser::LiteralNode

Public Instance Methods

to_sql(params) click to toggle source
# File lib/logical_query_parser/nodes/active_record.rb, line 72
def to_sql(params)
  operator, logic = operator_and_logic
  text = LogicalQueryParser.unquote(word.text_value)
  
  sql = build_arel(params, operator, text).reduce(logic).to_sql
  sql = "(#{sql})" if sql[0] != '(' && sql[-1] != ')'
  params[:sql] << sql
end

Private Instance Methods

build_arel(params, operator, text) click to toggle source
# File lib/logical_query_parser/nodes/active_record.rb, line 91
def build_arel(params, operator, text)
  if params[:columns].is_a?(Hash)
    build_arel_from_hash(params[:model], params[:columns], operator, text)
  else
    build_arel_from_columns(params[:model], params[:columns], operator, text)
  end
end
build_arel_from_columns(klass, columns, operator, text) click to toggle source
# File lib/logical_query_parser/nodes/active_record.rb, line 99
def build_arel_from_columns(klass, columns, operator, text)
  columns.map { |column| klass.arel_table[column].send(operator, Arel.sql(klass.connection.quote("%#{text}%"))) }
end
build_arel_from_hash(klass, hash, operator, text) click to toggle source
# File lib/logical_query_parser/nodes/active_record.rb, line 103
def build_arel_from_hash(klass, hash, operator, text)
  hash.flat_map do |klass, columns|
    build_arel_from_columns(klass, columns, operator, text)
  end
end
operator_and_logic() click to toggle source
# File lib/logical_query_parser/nodes/active_record.rb, line 83
def operator_and_logic
  if negative.elements.size > 0
    return :does_not_match, :and
  else
    return :matches, :or
  end
end