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
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