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