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)
  binds = []

  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!

    attributes, binds = predicate_builder.create_binds(attributes)

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

  WhereClause.new(parts, binds)
end