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)