memcached_store 0.11.2 → 0.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 77f6ff3dcde9c204c41292c561764f19b198a552
4
- data.tar.gz: 3b784d277f5cf922082e31fc007290db685d846e
3
+ metadata.gz: 0004cd75061b888d9a2f577b814ebbebb6641e0c
4
+ data.tar.gz: 1094e612fcbbacea703db393fb4aa1d5188675a8
5
5
  SHA512:
6
- metadata.gz: eac52dea6f5850280f2ff75f5ee45628af7d9416f90de3bf81f3b6634e8f9af5a7fda438dec36ab3aa9b62f4594733aa8e297e914da1b615e628bbfadd08694a
7
- data.tar.gz: 4509b4c17cc097d654abbc461cc24394ca74f338345c379eccf808c7bafa9c184a8df0d9ab7a033d4e3ec48e9de396e4b115dfde03d5e9b07304c697f2242ea2
6
+ metadata.gz: e9fa84e1fb05038ae55dcb562c65c191f69aa716e9272cf4533414f116865254a7f3f7dd2b781bc68230b6755e6f00d51c6e617c722887728a60c28d24a0f098
7
+ data.tar.gz: f60ddc1f132a2956d3810b3295c4ed8c07bc8a21b7393e10c59cd0a253d26210d69f3af824d0428047d756910b7d797a1a9984f1b6a515e2b5cb256b49ea14be
data/.travis.yml CHANGED
@@ -4,7 +4,11 @@ rvm:
4
4
  - 1.9.3
5
5
  - 2.0.0
6
6
  - 2.1.0
7
+ - 2.1.1
7
8
  env:
8
- - "AS_VERSION=3.2.16"
9
- - "AS_VERSION=4.0.2"
10
- - "AS_VERSION=4.1.0.beta1"
9
+ - "AS_VERSION=3.2.18"
10
+ - "AS_VERSION=4.0.5"
11
+ - "AS_VERSION=4.1.0"
12
+ matrix:
13
+ allow_failures:
14
+ - env: "AS_VERSION=4.1.0"
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in rails_cache_adapters.gemspec
4
4
  gemspec
5
5
 
6
- version = ENV["AS_VERSION"] || "3.2.16"
6
+ version = ENV["AS_VERSION"] || "4.0.5"
7
7
  as_version = case version
8
8
  when "master"
9
9
  {:github => "rails/rails"}
@@ -11,5 +11,5 @@ else
11
11
  "~> #{version}"
12
12
  end
13
13
 
14
- gem 'minitest', '~> 4.0' if version == "3.2.16"
14
+ gem 'minitest', '~> 4.0' if version == "3.2.18"
15
15
  gem "activesupport", as_version
data/README.md CHANGED
@@ -1,35 +1,51 @@
1
- # MemcachedSnappyStore
1
+ # ActiveSupport MemcachedStore
2
2
 
3
- ActiveSupport cache store that adds snappy compression at the cost of making the ```incr, decr, add``` operations unavailable.
3
+ This gem includes two memcached stores.
4
+
5
+ ### MemcachedStore
6
+
7
+ ActiveSupport memcached store. This wraps the memcached gem into a ActiveSupport::Cache::Store, so it could be used inside Rails.
8
+
9
+ ### MemcachedSnappyStore
10
+
11
+ ActiveSupport cache store that adds snappy compression at the cost of making the ```incr, decr``` operations unavailable.
4
12
 
5
13
  ## Installation
6
14
 
7
15
  Add this line to your application's Gemfile:
8
16
 
9
- gem 'memcached_store'
17
+ ```
18
+ gem 'memcached_store'
19
+ ```
10
20
 
11
21
  And then execute:
12
22
 
13
- $ bundle
23
+ ```bash
24
+ $ bundle
25
+ ```
14
26
 
15
27
  Or install it yourself as:
16
28
 
17
- $ gem install memcached_store
29
+ ```bash
30
+ $ gem install memcached_store
31
+ ```
18
32
 
19
33
  ## Usage
20
34
 
21
35
  In your environment file:
22
36
 
23
37
  ```ruby
38
+ # for memcached store
39
+ config.cache_store = :memcached_store,
24
40
 
25
- config.cache_store = :memcached_snappy_store,
26
- Memcached::Rails.new(:servers => ['memcached1.foo.com', 'memcached2.foo.com'])
27
-
41
+ # for snappy store
42
+ config.cache_store = :memcached_snappy_store,
43
+ Memcached::Rails.new(:servers => ['memcached1.foo.com', 'memcached2.foo.com'])
28
44
  ```
29
45
 
30
46
  ## Code status
31
47
 
32
- [![Build Status](https://travis-ci.org/Shopify/memcached_store.png?branch=accept-list-of-servers-in-options)](https://travis-ci.org/Shopify/memcached_store)
48
+ [![Build Status](https://travis-ci.org/Shopify/memcached_store.svg?branch=master)](https://travis-ci.org/Shopify/memcached_store)
33
49
 
34
50
  ## Contributing
35
51
 
@@ -1,5 +1,11 @@
1
+ begin
2
+ require 'snappy'
3
+ rescue LoadError => e
4
+ $stderr.puts "You don't have snappy installed in your application. Please add `gem \"snappy\"` to your Gemfile and run bundle install"
5
+ raise e
6
+ end
7
+
1
8
  require 'active_support/cache/memcached_store'
2
- require 'snappy'
3
9
 
4
10
  module ActiveSupport
5
11
  module Cache
@@ -14,22 +20,11 @@ module ActiveSupport
14
20
  raise UnsupportedOperation.new("decrement is not supported by: #{self.class.name}")
15
21
  end
16
22
 
17
- protected
18
-
19
- def write_entry(key, entry, options)
20
- # normally unless_exist would make this method use add, add will not make sense on compressed entries
21
- raise UnsupportedOperation.new("unless_exist would try to use the unsupported add method") if options && options[:unless_exist]
22
-
23
- serialized_value = options[:raw] ? entry.value.to_s : Marshal.dump(entry)
24
- expires_in = options[:expires_in].to_i
25
- if expires_in > 0 && !options[:raw]
26
- # Set the memcache expire a few minutes in the future to support race condition ttls on read
27
- expires_in += 5.minutes
28
- end
29
-
30
- serialized_compressed_value = Snappy.deflate(serialized_value)
31
-
32
- @data.set(escape_key(key), serialized_compressed_value, expires_in, true)
23
+ private
24
+ def serialize_entry(entry, options)
25
+ value = options[:raw] ? entry.value.to_s : Marshal.dump(entry)
26
+ options[:raw] = true
27
+ Snappy.deflate(value)
33
28
  end
34
29
 
35
30
  def deserialize_entry(compressed_value)
@@ -106,12 +106,12 @@ module ActiveSupport
106
106
 
107
107
  def write_entry(key, entry, options) # :nodoc:
108
108
  method = options && options[:unless_exist] ? :add : :set
109
- value = options[:raw] ? entry.value.to_s : entry
110
109
  expires_in = options[:expires_in].to_i
111
110
  if expires_in > 0 && !options[:raw]
112
111
  # Set the memcache expire a few minutes in the future to support race condition ttls on read
113
112
  expires_in += 5.minutes
114
113
  end
114
+ value = serialize_entry(entry, options)
115
115
  @data.send(method, escape_key(key), value, expires_in, options[:raw])
116
116
  rescue *NONFATAL_EXCEPTIONS => e
117
117
  @data.log_exception(e)
@@ -145,6 +145,11 @@ module ActiveSupport
145
145
  end
146
146
  end
147
147
 
148
+ def serialize_entry(entry, options)
149
+ entry = entry.value.to_s if options[:raw]
150
+ entry
151
+ end
152
+
148
153
  end
149
154
  end
150
155
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module MemcachedStore
3
- VERSION = "0.11.2"
3
+ VERSION = "0.11.3"
4
4
  end
@@ -16,11 +16,11 @@ Gem::Specification.new do |gem|
16
16
  gem.require_paths = ["lib"]
17
17
  gem.version = MemcachedStore::VERSION
18
18
  gem.add_runtime_dependency "activesupport", ">= 3.2"
19
- gem.add_runtime_dependency "snappy", "0.0.4"
20
- gem.add_runtime_dependency "memcached", "~> 1.7.2"
19
+ gem.add_runtime_dependency "memcached", "~> 1.8.0"
21
20
 
22
21
  gem.add_development_dependency "rake"
23
22
  gem.add_development_dependency "minitest"
24
23
  gem.add_development_dependency "mocha"
25
24
  gem.add_development_dependency "timecop"
25
+ gem.add_development_dependency "snappy"
26
26
  end
@@ -19,8 +19,8 @@ class TestMemcachedSnappyStore < ActiveSupport::TestCase
19
19
  end
20
20
  end
21
21
 
22
- test "write should not allow the implicit add operation when unless_exist is passed to write" do
23
- assert_raise(ActiveSupport::Cache::MemcachedSnappyStore::UnsupportedOperation) do
22
+ test "write should allow the implicit add operation when unless_exist is passed to write" do
23
+ assert_nothing_raised(ActiveSupport::Cache::MemcachedSnappyStore::UnsupportedOperation) do
24
24
  @cache.write('foo', 'bar', :unless_exist => true)
25
25
  end
26
26
  end
@@ -314,6 +314,15 @@ class TestMemcachedStore < ActiveSupport::TestCase
314
314
  assert_equal [21211, 11211], cache.instance_variable_get(:@data).servers.map(&:port)
315
315
  end
316
316
 
317
+ def test_namespace_without_servers
318
+ options = {namespace: 'foo:'}
319
+ cache = ActiveSupport::Cache.lookup_store(:memcached_store, options)
320
+ client = cache.instance_variable_get(:@data)
321
+ assert_equal [11211], client.servers.map(&:port)
322
+ assert_equal "", client.prefix_key, "should not send the namespace to the client"
323
+ assert_equal "foo::key", cache.send(:namespaced_key, "key", cache.options)
324
+ end
325
+
317
326
  private
318
327
 
319
328
  def expect_not_found
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memcached_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.2
4
+ version: 0.11.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Camilo Lopez
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-01-24 00:00:00.000000000 Z
13
+ date: 2014-05-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -27,35 +27,35 @@ dependencies:
27
27
  - !ruby/object:Gem::Version
28
28
  version: '3.2'
29
29
  - !ruby/object:Gem::Dependency
30
- name: snappy
30
+ name: memcached
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - '='
33
+ - - "~>"
34
34
  - !ruby/object:Gem::Version
35
- version: 0.0.4
35
+ version: 1.8.0
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - '='
40
+ - - "~>"
41
41
  - !ruby/object:Gem::Version
42
- version: 0.0.4
42
+ version: 1.8.0
43
43
  - !ruby/object:Gem::Dependency
44
- name: memcached
44
+ name: rake
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - "~>"
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 1.7.2
50
- type: :runtime
49
+ version: '0'
50
+ type: :development
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - "~>"
54
+ - - ">="
55
55
  - !ruby/object:Gem::Version
56
- version: 1.7.2
56
+ version: '0'
57
57
  - !ruby/object:Gem::Dependency
58
- name: rake
58
+ name: minitest
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - ">="
@@ -69,7 +69,7 @@ dependencies:
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  - !ruby/object:Gem::Dependency
72
- name: minitest
72
+ name: mocha
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
75
  - - ">="
@@ -83,7 +83,7 @@ dependencies:
83
83
  - !ruby/object:Gem::Version
84
84
  version: '0'
85
85
  - !ruby/object:Gem::Dependency
86
- name: mocha
86
+ name: timecop
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
89
  - - ">="
@@ -97,7 +97,7 @@ dependencies:
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  - !ruby/object:Gem::Dependency
100
- name: timecop
100
+ name: snappy
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
103
  - - ">="
@@ -154,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
154
  version: '0'
155
155
  requirements: []
156
156
  rubyforge_project:
157
- rubygems_version: 2.2.0
157
+ rubygems_version: 2.2.2
158
158
  signing_key:
159
159
  specification_version: 4
160
160
  summary: Plugin-able Memcached adapters to add features (compression, safety)