Module: LogicalQueryParser

Defined in:
lib/logical_query_parser.rb,
lib/logical_query_parser/version.rb,
lib/logical_query_parser/assoc_node.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: AssocNode, AssocResolver

Constant Summary collapse

VERSION =
"0.6.0"

Class Method Summary collapse

Class Method Details

.newObject



13
14
15
# File 'lib/logical_query_parser.rb', line 13

def new
  LogicalQueryParserParser.new
end

.resolve_assocs(relation, *options) ⇒ Object



25
26
27
# File 'lib/logical_query_parser.rb', line 25

def resolve_assocs(relation, *options)
  AssocResolver.new(relation, *options).call
end

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



17
18
19
20
21
22
23
# File 'lib/logical_query_parser.rb', line 17

def search(query, relations, *options)
  relations = relations.all if relations.respond_to?(:all)
  root = resolve_assocs(relations, *options)
  sql = new.parse(query).to_sql(root: root)
  relations = relations.left_joins(root.join_structure) unless root.join_structure.empty?
  relations.where(sql)
end

.unquote(str) ⇒ Object



104
105
106
107
# File 'lib/logical_query_parser/nodes/active_record.rb', line 104

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)


29
30
31
32
33
34
35
36
# File 'lib/logical_query_parser.rb', line 29

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