diff --git a/Gemfile b/Gemfile index 2dffe56..0e9cee0 100644 --- a/Gemfile +++ b/Gemfile @@ -2,6 +2,7 @@ source 'https://rubygems.org' # Specify your gem's dependencies in active_record-observers.gemspec gemspec +gem "minitest", "~> 5.8.4" gem 'rails', github: 'rails/rails', branch: '5-1-stable' gem 'activeresource', github: 'rails/activeresource' diff --git a/gemfiles/rails_4_2.gemfile b/gemfiles/rails_4_2.gemfile index f26e524..cc1e6e5 100644 --- a/gemfiles/rails_4_2.gemfile +++ b/gemfiles/rails_4_2.gemfile @@ -1,6 +1,7 @@ source "https://rubygems.org" gem "mocha", require: false +gem "minitest", "~> 5.8.4" gem "rails", "~> 4.2.0" gemspec path: "../" diff --git a/gemfiles/rails_5_0.gemfile b/gemfiles/rails_5_0.gemfile index 5ce3aad..9e820ae 100644 --- a/gemfiles/rails_5_0.gemfile +++ b/gemfiles/rails_5_0.gemfile @@ -2,6 +2,7 @@ source "https://rubygems.org" # Specify your gem"s dependencies in active_record-observers.gemspec gem "rails", github: "rails/rails", branch: "5-0-stable" +gem "minitest", "~> 5.8.4" gem "activeresource", github: "rails/activeresource" gem "mocha", require: false diff --git a/gemfiles/rails_master.gemfile b/gemfiles/rails_master.gemfile index c177dd9..e350aae 100644 --- a/gemfiles/rails_master.gemfile +++ b/gemfiles/rails_master.gemfile @@ -2,6 +2,7 @@ source "https://rubygems.org" # Specify your gem"s dependencies in active_record-observers.gemspec gem "rails", github: "rails/rails" +gem "minitest", "~> 5.8.4" gem "activeresource", github: "rails/activeresource" gem "mocha", require: false diff --git a/lib/rails/observers/action_controller/caching/sweeper.rb b/lib/rails/observers/action_controller/caching/sweeper.rb index f6bf1ba..e81c120 100644 --- a/lib/rails/observers/action_controller/caching/sweeper.rb +++ b/lib/rails/observers/action_controller/caching/sweeper.rb @@ -1,11 +1,17 @@ module ActionController #:nodoc: module Caching class Sweeper < ActiveRecord::Observer #:nodoc: - attr_accessor :controller - def initialize(*args) super - @controller = nil + self.controller = nil + end + + def controller + Thread.current["observer:#{self.class.name}_controller"] + end + + def controller=(controller) + Thread.current["observer:#{self.class.name}_controller"] = controller end def before(controller) @@ -53,8 +59,12 @@ def callback(timing) end def method_missing(method, *arguments, &block) - return super unless @controller - @controller.__send__(method, *arguments, &block) + return super if controller.nil? + controller.__send__(method, *arguments, &block) + end + + def respond_to_missing?(method, include_private = false) + (controller.present? && controller.respond_to?(method)) || super end end end diff --git a/test/helper.rb b/test/helper.rb index 62ca506..f16637c 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -1,5 +1,5 @@ require 'minitest/autorun' -require 'mocha/mini_test' +require 'mocha/minitest' require 'active_record' require 'rails' require 'rails/observers/activerecord/active_record'