Module: LogicalQueryParser

Defined in:
lib/logical_query_parser.rb,
lib/logical_query_parser/assoc.rb,
lib/logical_query_parser/version.rb,
lib/logical_query_parser/nodes/base.rb,
lib/logical_query_parser/assoc_resolver.rb,
lib/logical_query_parser/nodes/active_record.rb

Defined Under Namespace

Modules: AndNode, ExpNode, LParenNode, LiteralExpNode, LiteralNode, LogicExpNode, NotNode, OrNode, ParenExpNode, RParenNode, WordNode Classes: Assoc, AssocResolver

Constant Summary collapse

VERSION =
"0.3.4"

Class Method Summary collapse

Class Method Details

.newObject



11
12
13
# File 'lib/logical_query_parser.rb', line 11

def new
  LogicalQueryParserParser.new
end

.resolve_assocs(klass, *options) ⇒ Object



22
23
24
# File 'lib/logical_query_parser.rb', line 22

def resolve_assocs(klass, *options)
  AssocResolver.new(klass).run(*options)
end

.search(query, relations, *options) ⇒ Object



15
16
17
18
19
20
# File 'lib/logical_query_parser.rb', line 15

def search(query, relations, *options)
  relations = relations.all if relations.respond_to?(:all)
  assoc = resolve_assocs(relations.klass, *options)
  sql = new.parse(query).to_sql(model: relations.klass, columns: assoc.column_mapping)
  relations.joins(assoc.structure).where(sql)
end

.unquote(str) ⇒ Object



111
112
113
114
# File 'lib/logical_query_parser/nodes/active_record.rb', line 111

def unquote(str)
  str = str[1..-2].to_s.gsub(/\\(.)/, '\1') if str[0] == '"' && str[-1] == '"'
  str
end

.walk_tree(node) {|node| ... } ⇒ Object

Yields:

  • (node)


26
27
28
29
30
31
32
33
# File 'lib/logical_query_parser.rb', line 26

def walk_tree(node, &block)
  yield node
  unless node.elements.nil?
    node.elements.each do |element|
      walk_tree(element, &block)
    end
  end
end