class WhereClause

Attributes

bind_params[R]
conditions[R]

Public Class Methods

new(options = []) click to toggle source
# File lib/activeleopard/query_clauses/where_clause.rb, line 4
def initialize(options = [])
  unless options.is_a?(Array) && options.length <= 2
    raise InvalidInput, "Where takes 1 or 2 arguments"
  end

  @conditions = parse_conditions(options)
end

Public Instance Methods

<<(options)
Alias for: append
append(options) click to toggle source
# File lib/activeleopard/query_clauses/where_clause.rb, line 21
def append(options)
  conditions.merge!(parse_conditions(options))
end
Also aliased as: <<
as_sql() click to toggle source
# File lib/activeleopard/query_clauses/where_clause.rb, line 16
def as_sql
  return "" if conditions.empty?
  " WHERE " + conditions_as_sql
end
values() click to toggle source
# File lib/activeleopard/query_clauses/where_clause.rb, line 12
def values
  conditions.values.flatten
end

Private Instance Methods

conditions_as_sql() click to toggle source
# File lib/activeleopard/query_clauses/where_clause.rb, line 30
def conditions_as_sql
  conditions.map do |condition, values|
    if condition.is_a?(String)
      format_condition(condition, values)
    elsif condition.is_a?(Symbol)
      "#{condition} = ?"
    end
  end.flatten.join(' AND ').gsub("?").with_index { |_, i| "$#{i + 1}" }
end
format_condition(condition, values) click to toggle source
# File lib/activeleopard/query_clauses/where_clause.rb, line 55
def format_condition(condition, values)
  condition.gsub('(?)') do
    "(#{values.map.with_index { |_, i| "$#{i + 1}" }})"
    # "(#{(['?'] * values.count).join(', ')})"
  end
end
parse_conditions(input) click to toggle source
# File lib/activeleopard/query_clauses/where_clause.rb, line 45
def parse_conditions(input)
  if input.first.is_a?(String)
    { input.first => parse_params(input[1]) }
  elsif input.first.is_a?(Hash)
    input.first
  else
    {}
  end
end
parse_params(params_input) click to toggle source
# File lib/activeleopard/query_clauses/where_clause.rb, line 40
def parse_params(params_input)
  return [] if params_input.nil?
  params_input.is_a?(Array) ? params_input : [params_input]
end