From 56d0e33037c602e51c30a6184e64a62def6177e0 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 7 Feb 2008 22:50:49 +0000 Subject: Added support for naming concrete classes in sweeper declarations [DHH] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8819 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/caching/sweeping.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'actionpack/lib/action_controller') diff --git a/actionpack/lib/action_controller/caching/sweeping.rb b/actionpack/lib/action_controller/caching/sweeping.rb index eda4459cda..40276a118e 100644 --- a/actionpack/lib/action_controller/caching/sweeping.rb +++ b/actionpack/lib/action_controller/caching/sweeping.rb @@ -22,6 +22,13 @@ module ActionController #:nodoc: # end # # In the example above, four actions are cached and three actions are responsible for expiring those caches. + # + # You can also name an explicit class in the declaration of a sweeper, which is needed if the sweeper is in a module: + # + # class ListsController < ApplicationController + # caches_action :index, :show, :public, :feed + # cache_sweeper OpenBar::Sweeper, :only => [ :edit, :destroy, :share ] + # end module Sweeping def self.included(base) #:nodoc: base.extend(ClassMethods) @@ -31,9 +38,10 @@ module ActionController #:nodoc: def cache_sweeper(*sweepers) return unless perform_caching configuration = sweepers.extract_options! + sweepers.each do |sweeper| ActiveRecord::Base.observers << sweeper if defined?(ActiveRecord) and defined?(ActiveRecord::Base) - sweeper_instance = Object.const_get(Inflector.classify(sweeper)).instance + sweeper_instance = (sweeper.is_a?(Symbol) ? Object.const_get(Inflector.classify(sweeper)) : sweeper).instance if sweeper_instance.is_a?(Sweeper) around_filter(sweeper_instance, :only => configuration[:only]) -- cgit v1.2.3