Class: ActiveRecord::Relation::Merger

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

Overview

:nodoc:

Constant Summary collapse

NORMAL_VALUES =
Relation::SINGLE_VALUE_METHODS +
Relation::MULTI_VALUE_METHODS -
[:joins, :where, :order, :bind, :reverse_order, :lock, :create_with, :reordering, :from]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(relation, other) ⇒ Merger

Returns a new instance of Merger.



44
45
46
47
48
49
50
51
52
# File 'lib/active_record/relation/merger.rb', line 44

def initialize(relation, other)
  if other.default_scoped? && other.klass != relation.klass
    other = other.with_default_scope
  end

  @relation = relation
  @values   = other.values
  @other    = other
end

Instance Attribute Details

#otherObject (readonly)

Returns the value of attribute other.



42
43
44
# File 'lib/active_record/relation/merger.rb', line 42

def other
  @other
end

#relationObject (readonly)

Returns the value of attribute relation.



42
43
44
# File 'lib/active_record/relation/merger.rb', line 42

def relation
  @relation
end

#valuesObject (readonly)

Returns the value of attribute values.



42
43
44
# File 'lib/active_record/relation/merger.rb', line 42

def values
  @values
end

Instance Method Details

#mergeObject



62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/active_record/relation/merger.rb', line 62

def merge
  normal_values.each do |name|
    value = values[name]
    relation.send("#{name}!", *value) unless value.blank?
  end

  merge_multi_values
  merge_single_values
  merge_joins

  relation
end

#normal_valuesObject



58
59
60
# File 'lib/active_record/relation/merger.rb', line 58

def normal_values
  NORMAL_VALUES
end