class AdvancedSearch::Adapters::PG::Visitor
Public Class Methods
new(placeholder_style)
click to toggle source
# File lib/advanced_search/adapters/pg/visitor.rb, line 7 def initialize(placeholder_style) @placeholder_style = placeholder_style @sql = [] @binds = [] end
Public Instance Methods
result()
click to toggle source
# File lib/advanced_search/adapters/pg/visitor.rb, line 13 def result Query.new(@sql.join(' '), @binds) end
visit_and(node)
click to toggle source
# File lib/advanced_search/adapters/pg/visitor.rb, line 17 def visit_and(node) @sql << '(' node.edges.each_with_index do |child, i| unless i.zero? @sql << 'and' end child.accept(self) end @sql << ')' end
visit_eq(node)
click to toggle source
# File lib/advanced_search/adapters/pg/visitor.rb, line 28 def visit_eq(node) node.edges[0].accept(self) @sql << '=' node.edges[1].accept(self) end
visit_id(node)
click to toggle source
# File lib/advanced_search/adapters/pg/visitor.rb, line 34 def visit_id(node) @sql << node.id end
visit_lt(node)
click to toggle source
# File lib/advanced_search/adapters/pg/visitor.rb, line 38 def visit_lt(node) node.edges[0].accept(self) @sql << '<' node.edges[1].accept(self) end
visit_or(node)
click to toggle source
# File lib/advanced_search/adapters/pg/visitor.rb, line 44 def visit_or(node) @sql << '(' node.edges.each_with_index do |child, i| unless i.zero? @sql << 'or' end child.accept(self) end @sql << ')' end
visit_value(node)
click to toggle source
# File lib/advanced_search/adapters/pg/visitor.rb, line 55 def visit_value(node) @sql << placeholder(@binds.length + 1) @binds << node.value end
Private Instance Methods
placeholder(ordinal_number)
click to toggle source
# File lib/advanced_search/adapters/pg/visitor.rb, line 62 def placeholder(ordinal_number) case @placeholder_style when :question_marks '?' when :dollars format('$%d', ordinal_number) else raise 'Invalid placeholder style' end end