42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/fake_arel/extensions.rb', line 42
def unspin
local_scope = proxy_scope
ret = proxy_options
while local_scope.class == ActiveRecord::NamedScope::Scope
ret[:select] = local_scope.proxy_options[:select] unless local_scope.proxy_options[:select].nil?
local_conditions = merge_conditions(local_scope.proxy_options[:conditions])
if local_conditions && ret[:conditions]
if (ret[:conditions].class == Hash and !ret[:conditions].keys.include?(local_conditions)) or (ret[:conditions].class != Hash and !ret[:conditions].index(local_conditions))
ret[:conditions] = merge_conditions(ret[:conditions], local_scope.proxy_options[:conditions])
end
elsif local_conditions
ret[:conditions] = local_conditions
end
ret[:include] = merge_includes(ret[:include], local_scope.proxy_options[:include])
if ret[:joins] || local_scope.proxy_options[:joins]
begin
ret[:joins] = merge_joins(ret[:joins], local_scope.proxy_options[:joins])
rescue ActiveRecord::ConfigurationError
ret[:joins] = merge_joins((ret[:joins] || []), (local_scope.proxy_options[:joins] || []))
end
end
local_proxy_order_options = local_scope.proxy_options[:order].split(',') unless local_scope.proxy_options[:order].nil?
ret_order_options = ret[:order].split(',') unless ret[:order].nil?
ret[:order] = [local_proxy_order_options, ret_order_options].flatten.uniq.select{|o| !o.blank?}.join(',') if ret[:order] || local_scope.proxy_options[:order]
local_scope = local_scope.proxy_scope
end
ret
end
|