module UnscopedAssociations::ClassMethods

Public Instance Methods

belongs_to_with_unscoped(name, scope = nil, options = {}) click to toggle source
# File lib/unscoped_associations.rb, line 14
def belongs_to_with_unscoped(name, scope = nil, options = {})
  build_unscoped(:belongs_to, name, scope, options)
end
has_many_with_unscoped(name, scope = nil, options = {}, &extension) click to toggle source
# File lib/unscoped_associations.rb, line 18
def has_many_with_unscoped(name, scope = nil, options = {}, &extension)
  build_unscoped(:has_many, name, scope, options, &extension)
end
has_one_with_unscoped(name, scope = nil, options = {}) click to toggle source
# File lib/unscoped_associations.rb, line 22
def has_one_with_unscoped(name, scope = nil, options = {})
  build_unscoped(:has_one, name, scope, options)
end

Private Instance Methods

add_unscoped_association(association_name) click to toggle source
Calls superclass method
# File lib/unscoped_associations.rb, line 45
def add_unscoped_association(association_name)
  define_method(association_name) do |*args|
    force_reload = args[0]
    if !force_reload && instance_variable_get("@_cache_#{association_name}")
      instance_variable_get("@_cache_#{association_name}")
    else
      instance_variable_set("@_cache_#{association_name}",
        association(association_name).klass.unscoped { super(true) }
      )
    end
  end
end
build_unscoped(assoc_type, assoc_name, scope = nil, options = {}, &extension) click to toggle source
# File lib/unscoped_associations.rb, line 28
def build_unscoped(assoc_type, assoc_name, scope = nil, options = {}, &extension)
  if scope.is_a?(Hash)
    options = scope
    scope   = nil
  end

  if options.delete(:unscoped)
    add_unscoped_association(assoc_name)
  end

  if scope
    send("#{assoc_type}_without_unscoped", assoc_name, scope, options, &extension)
  else
    send("#{assoc_type}_without_unscoped", assoc_name, options, &extension)
  end
end