From 7423a71fc02c0ca3bf37b94e16a1322c0caaa6fd Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Thu, 3 Feb 2011 15:35:34 -0800 Subject: allow AR caches to be cleared, clear them on class reloading --- activerecord/lib/active_record/base.rb | 6 ++++++ activerecord/lib/active_record/railtie.rb | 1 + activerecord/test/cases/base_test.rb | 8 ++++++++ 3 files changed, 15 insertions(+) diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 8750e226b9..f8ae855e28 100644 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -750,6 +750,12 @@ module ActiveRecord #:nodoc: @arel_engine = @relation = nil end + def clear_cache! # :nodoc: + @@columns.clear + @@columns_hash.clear + @@arel_tables.clear + end + def reset_column_cache # :nodoc: @@columns.delete table_name @@columns_hash.delete table_name diff --git a/activerecord/lib/active_record/railtie.rb b/activerecord/lib/active_record/railtie.rb index 2accf0a48f..72687c9ca3 100644 --- a/activerecord/lib/active_record/railtie.rb +++ b/activerecord/lib/active_record/railtie.rb @@ -72,6 +72,7 @@ module ActiveRecord ActiveSupport.on_load(:active_record) do ActionDispatch::Reloader.to_cleanup do ActiveRecord::Base.clear_reloadable_connections! + ActiveRecord::Base.clear_cache! end end end diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index a255c07957..68adeff882 100644 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -1553,6 +1553,14 @@ class BasicsTest < ActiveRecord::TestCase end end + def test_clear_cache! + # preheat cache + c1 = Post.columns + ActiveRecord::Base.clear_cache! + c2 = Post.columns + assert_not_equal c1, c2 + end + def test_default_scope_is_reset Object.const_set :UnloadablePost, Class.new(ActiveRecord::Base) UnloadablePost.table_name = 'posts' -- cgit v1.2.3