aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuillermo Iguaran <guilleiguaran@gmail.com>2014-01-03 13:43:16 -0800
committerGuillermo Iguaran <guilleiguaran@gmail.com>2014-01-03 13:43:16 -0800
commit88c3fd1ef1f3bbd4f8fdc15887cc382a287fbd10 (patch)
tree3af6b6433215c77247b87b64a2e2587f512484b0
parent05a81c5fe2efe08a171cd3dbef3873c1f0e5fae3 (diff)
parente7f56a7fe8fbb10e62a18b836c27aa1a0f7c5464 (diff)
downloadrails-88c3fd1ef1f3bbd4f8fdc15887cc382a287fbd10.tar.gz
rails-88c3fd1ef1f3bbd4f8fdc15887cc382a287fbd10.tar.bz2
rails-88c3fd1ef1f3bbd4f8fdc15887cc382a287fbd10.zip
Merge pull request #13583 from arthurnn/mem_cache_store_fix
mem_cache_store requires dalli, so only accept dalli/client
-rw-r--r--activesupport/CHANGELOG.md4
-rw-r--r--activesupport/lib/active_support/cache/mem_cache_store.rb10
-rw-r--r--activesupport/test/caching_test.rb8
3 files changed, 12 insertions, 10 deletions
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md
index 19db8ac873..973eaef471 100644
--- a/activesupport/CHANGELOG.md
+++ b/activesupport/CHANGELOG.md
@@ -1,3 +1,7 @@
+* MemCacheStore should only accept a Dalli::Client, or create one.
+
+ *arthurnn*
+
* Don't lazy load the `tzinfo` library as it causes problems on Windows.
Fixes #13553
diff --git a/activesupport/lib/active_support/cache/mem_cache_store.rb b/activesupport/lib/active_support/cache/mem_cache_store.rb
index 512296554f..0eacc4c078 100644
--- a/activesupport/lib/active_support/cache/mem_cache_store.rb
+++ b/activesupport/lib/active_support/cache/mem_cache_store.rb
@@ -41,17 +41,15 @@ module ActiveSupport
#
# If no addresses are specified, then MemCacheStore will connect to
# localhost port 11211 (the default memcached port).
- #
- # Instead of addresses one can pass in a MemCache-like object. For example:
- #
- # require 'memcached' # gem install memcached; uses C bindings to libmemcached
- # ActiveSupport::Cache::MemCacheStore.new(Memcached::Rails.new("localhost:11211"))
def initialize(*addresses)
addresses = addresses.flatten
options = addresses.extract_options!
super(options)
- if addresses.first.respond_to?(:get)
+ unless [String, Dalli::Client, NilClass].include?(addresses.first.class)
+ raise ArgumentError, "First argument must be an empty array, an array of hosts or a Dalli::Client instance."
+ end
+ if addresses.first.is_a?(Dalli::Client)
@data = addresses.first
else
mem_cache_options = options.dup
diff --git a/activesupport/test/caching_test.rb b/activesupport/test/caching_test.rb
index 51007402a1..7fd76ddf8b 100644
--- a/activesupport/test/caching_test.rb
+++ b/activesupport/test/caching_test.rb
@@ -110,12 +110,12 @@ class CacheStoreSettingTest < ActiveSupport::TestCase
assert_kind_of(ActiveSupport::Cache::MemCacheStore, store)
end
- def test_mem_cache_fragment_cache_store_with_given_mem_cache_like_object
+ def test_mem_cache_fragment_cache_store_with_not_dalli_client
Dalli::Client.expects(:new).never
memcache = Object.new
- def memcache.get() true end
- store = ActiveSupport::Cache.lookup_store :mem_cache_store, memcache
- assert_kind_of(ActiveSupport::Cache::MemCacheStore, store)
+ assert_raises(ArgumentError) do
+ ActiveSupport::Cache.lookup_store :mem_cache_store, memcache
+ end
end
def test_mem_cache_fragment_cache_store_with_multiple_servers