class ActiveRecord::NamedScope::Scope

Public Class Methods

new(proxy_scope, options = {}, &block) click to toggle source
# File lib/fake_arel/extensions.rb, line 37
def initialize(proxy_scope, options = {}, &block)
  options = options.unspin if options.class == ActiveRecord::NamedScope::Scope
  initialize_without_arel(proxy_scope, options, &block)
end
Also aliased as: initialize_without_arel

Public Instance Methods

initialize_without_arel(proxy_scope, options = {}, &block)
Alias for: new
unspin() click to toggle source
# File lib/fake_arel/extensions.rb, line 42
def unspin
  # unspin the scope and generate a hash
  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]
      # this is a bit ugly, but I was getting error with using OR.
      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