class ActiveAny::Relation::Merger

Attributes

other[R]
relation[R]
values[R]

Public Class Methods

new(relation, other) click to toggle source
# File lib/active_any/relation/merger.rb, line 29
def initialize(relation, other)
  @relation = relation
  @values   = other.values
  @other    = other
end

Public Instance Methods

merge() click to toggle source
# File lib/active_any/relation/merger.rb, line 41
def merge
  normal_values.each do |name|
    value = values[name]
    relation.send("#{name}!", *value) unless value.nil? || (value.blank? && value != false)
  end

  merge_multi_values
  merge_single_values
  merge_clauses

  relation
end
normal_values() click to toggle source
# File lib/active_any/relation/merger.rb, line 35
def normal_values
  Relation::VALUE_METHODS -
    Relation::CLAUSE_METHODS -
    %i[includes preload joins order reverse_order lock create_with reordering]
end

Private Instance Methods

merge_clauses() click to toggle source
# File lib/active_any/relation/merger.rb, line 63
def merge_clauses
  CLAUSE_METHODS.each do |method|
    clause = relation.get_value(method)
    other_clause = other.get_value(method)
    relation.set_value(method, clause.merge(other_clause))
  end
end
merge_multi_values() click to toggle source
# File lib/active_any/relation/merger.rb, line 56
def merge_multi_values
  relation.order! other.order_clause unless other.order_clause.empty?
  relation.group! other.group_values if other.group_values
end
merge_single_values() click to toggle source
# File lib/active_any/relation/merger.rb, line 61
def merge_single_values; end