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