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
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
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
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