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 +4 -4
- data/.travis.yml +7 -3
- data/Gemfile +2 -2
- data/README.md +25 -9
- data/lib/active_support/cache/memcached_snappy_store.rb +12 -17
- data/lib/active_support/cache/memcached_store.rb +6 -1
- data/lib/memcached_store/version.rb +1 -1
- data/memcached_store.gemspec +2 -2
- data/test/test_memcached_snappy_store.rb +2 -2
- data/test/test_memcached_store.rb +9 -0
- metadata +18 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0004cd75061b888d9a2f577b814ebbebb6641e0c
|
4
|
+
data.tar.gz: 1094e612fcbbacea703db393fb4aa1d5188675a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
9
|
-
- "AS_VERSION=4.0.
|
10
|
-
- "AS_VERSION=4.1.0
|
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"] || "
|
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.
|
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
|
-
#
|
1
|
+
# ActiveSupport MemcachedStore
|
2
2
|
|
3
|
-
|
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
|
-
|
17
|
+
```
|
18
|
+
gem 'memcached_store'
|
19
|
+
```
|
10
20
|
|
11
21
|
And then execute:
|
12
22
|
|
13
|
-
|
23
|
+
```bash
|
24
|
+
$ bundle
|
25
|
+
```
|
14
26
|
|
15
27
|
Or install it yourself as:
|
16
28
|
|
17
|
-
|
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
|
-
|
26
|
-
|
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
|
-
[](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
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
data/memcached_store.gemspec
CHANGED
@@ -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 "
|
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
|
23
|
-
|
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.
|
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-
|
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:
|
30
|
+
name: memcached
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- -
|
33
|
+
- - "~>"
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
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:
|
42
|
+
version: 1.8.0
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
|
-
name:
|
44
|
+
name: rake
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- - "
|
47
|
+
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version:
|
50
|
-
type: :
|
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:
|
56
|
+
version: '0'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
|
-
name:
|
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:
|
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:
|
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:
|
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.
|
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)
|