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