Class: ActiveRecord::Relation::WhereClauseFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/active_record/relation/where_clause_factory.rb

Overview

:nodoc:

Instance Method Summary collapse

Constructor Details

#initialize(klass, predicate_builder) ⇒ WhereClauseFactory

Returns a new instance of WhereClauseFactory.



4
5
6
7
# File 'lib/active_record/relation/where_clause_factory.rb', line 4

def initialize(klass, predicate_builder)
  @klass = klass
  @predicate_builder = predicate_builder
end

Instance Method Details

#build(opts, other) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/active_record/relation/where_clause_factory.rb', line 9

def build(opts, other)
  case opts
  when String, Array
    parts = [klass.send(:sanitize_sql, other.empty? ? opts : ([opts] + other))]
  when Hash
    attributes = predicate_builder.resolve_column_aliases(opts)
    attributes = klass.send(:expand_hash_conditions_for_aggregates, attributes)
    attributes.stringify_keys!

    if perform_case_sensitive?(options = other.last)
      parts, binds = build_for_case_sensitive(attributes, options)
    else
      attributes, binds = predicate_builder.create_binds(attributes)
      parts = predicate_builder.build_from_hash(attributes)
    end
  when Arel::Nodes::Node
    parts = [opts]
  else
    raise ArgumentError, "Unsupported argument type: #{opts} (#{opts.class})"
  end

  WhereClause.new(parts, binds || [])
end