lib/unscoped_associations.rb in unscoped_associations-0.6.5 vs lib/unscoped_associations.rb in unscoped_associations-0.7.0
- old
+ new
@@ -1,11 +1,11 @@
require 'unscoped_associations/version'
module UnscopedAssociations
def self.included(base)
base.extend ClassMethods
- (class << base; self; end).instance_eval do
+ class << base
alias_method_chain :belongs_to, :unscoped
alias_method_chain :has_many, :unscoped
alias_method_chain :has_one, :unscoped
end
end
@@ -34,28 +34,27 @@
if options.delete(:unscoped)
add_unscoped_association(assoc_name)
end
if scope
- self.send("#{assoc_type}_without_unscoped", assoc_name, scope, options, &extension)
+ send("#{assoc_type}_without_unscoped", assoc_name, scope, options, &extension)
else
- self.send("#{assoc_type}_without_unscoped", assoc_name, options, &extension)
+ send("#{assoc_type}_without_unscoped", assoc_name, options, &extension)
end
end
def add_unscoped_association(association_name)
- define_method(association_name) do
- if self.class.reflect_on_association(association_name).options.key?(:polymorphic)
- self.association(association_name).klass.unscoped do
- super(association_name)
- end
+ 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
- self.class.reflect_on_association(association_name).klass.unscoped do
- super(association_name)
- end
+ instance_variable_set("@_cache_#{association_name}",
+ association(association_name).klass.unscoped { super(true) }
+ )
end
end
end
end
end
-ActiveRecord::Base.instance_eval { include UnscopedAssociations }
+ActiveRecord::Base.send(:include, UnscopedAssociations)