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
.new ⇒ Object
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
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
|