class ActiveRecordExtended::QueryMethods::Unionize::UnionChain

Public Class Methods

new(scope) click to toggle source
# File lib/active_record_extended/query_methods/unionize.rb, line 13
def initialize(scope)
  @scope = scope
end

Public Instance Methods

all(*args) click to toggle source
# File lib/active_record_extended/query_methods/unionize.rb, line 41
def all(*args)
  append_union_order!(:union_all, args)
  @scope
end
Also aliased as: union_all
as(from_clause_name) click to toggle source
# File lib/active_record_extended/query_methods/unionize.rb, line 17
def as(from_clause_name)
  @scope.unionized_name = from_clause_name.to_s
  @scope
end
Also aliased as: union_as
except(*args) click to toggle source
# File lib/active_record_extended/query_methods/unionize.rb, line 47
def except(*args)
  append_union_order!(:except, args)
  @scope
end
Also aliased as: union_except
intersect(*args) click to toggle source
# File lib/active_record_extended/query_methods/unionize.rb, line 53
def intersect(*args)
  append_union_order!(:intersect, args)
  @scope
end
Also aliased as: union_intersect
order(*ordering_args) click to toggle source
# File lib/active_record_extended/query_methods/unionize.rb, line 23
def order(*ordering_args)
  process_ordering_arguments!(ordering_args)
  @scope.union_ordering_values += ordering_args
  @scope
end
Also aliased as: order_union
order_union(*ordering_args)
Alias for: order
reorder(*ordering_args) click to toggle source
# File lib/active_record_extended/query_methods/unionize.rb, line 30
def reorder(*ordering_args)
  @scope.union_ordering_values.clear
  order(*ordering_args)
end
Also aliased as: reorder_union
reorder_union(*ordering_args)
Alias for: reorder
union(*args) click to toggle source
# File lib/active_record_extended/query_methods/unionize.rb, line 36
def union(*args)
  append_union_order!(:union, args)
  @scope
end
union_all(*args)
Alias for: all
union_as(from_clause_name)
Alias for: as
union_except(*args)
Alias for: except
union_intersect(*args)
Alias for: intersect

Protected Instance Methods

append_union_order!(union_type, args) click to toggle source
# File lib/active_record_extended/query_methods/unionize.rb, line 61
def append_union_order!(union_type, args)
  args.each { |arg| pipe_cte_with!(arg) }
  flatten_scopes       = flatten_to_sql(args)
  @scope.union_values += flatten_scopes
  calculate_union_operation!(union_type, flatten_scopes.size)
end
calculate_union_operation!(union_type, scope_count) click to toggle source
# File lib/active_record_extended/query_methods/unionize.rb, line 68
def calculate_union_operation!(union_type, scope_count)
  scope_count             -= 1 unless @scope.union_operations?
  scope_count              = 1 if scope_count <= 0 && @scope.union_values.size <= 1
  @scope.union_operations += [union_type] * scope_count
end