From be623677a3b05696e70518072576588cbeaf83cd Mon Sep 17 00:00:00 2001
From: Erich Menge <erich.menge@me.com>
Date: Sun, 11 Mar 2012 23:21:37 -0500
Subject: Allow retrieve_cache_key to work on collections such as
 ActiveRecord::Relation.

---
 activesupport/lib/active_support/cache.rb | 1 +
 activesupport/test/caching_test.rb        | 4 ++++
 2 files changed, 5 insertions(+)

diff --git a/activesupport/lib/active_support/cache.rb b/activesupport/lib/active_support/cache.rb
index d7408eff9f..b9f196d7a9 100644
--- a/activesupport/lib/active_support/cache.rb
+++ b/activesupport/lib/active_support/cache.rb
@@ -91,6 +91,7 @@ module ActiveSupport
         case
         when key.respond_to?(:cache_key) then key.cache_key
         when key.is_a?(Array)            then key.map { |element| retrieve_cache_key(element) }.to_param
+        when key.respond_to?(:to_a)      then retrieve_cache_key(key.to_a)
         else                                  key.to_param
         end.to_s
       end
diff --git a/activesupport/test/caching_test.rb b/activesupport/test/caching_test.rb
index b03865da93..ba027f1ff0 100644
--- a/activesupport/test/caching_test.rb
+++ b/activesupport/test/caching_test.rb
@@ -69,6 +69,10 @@ class CacheKeyTest < ActiveSupport::TestCase
   def test_expand_cache_key_of_true
     assert_equal 'true', ActiveSupport::Cache.expand_cache_key(true)
   end
+  
+  def test_expand_cache_key_of_array_like_object
+    assert_equal 'foo/bar/baz', ActiveSupport::Cache.expand_cache_key(%w{foo bar baz}.to_enum)
+  end
 end
 
 class CacheStoreSettingTest < ActiveSupport::TestCase
-- 
cgit v1.2.3