iron_cache 1.4.0 → 1.4.1
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 +7 -0
- data/.gitignore +2 -0
- data/Gemfile.lock +9 -9
- data/lib/iron_cache/caches.rb +1 -1
- data/lib/iron_cache/items.rb +1 -1
- data/lib/iron_cache/version.rb +1 -1
- data/test/load_er_up.rb +1 -1
- data/test/quick_run.rb +1 -1
- data/test/test_base.rb +23 -14
- data/test/test_errors.rb +23 -0
- data/test/test_iron_cache.rb +30 -5
- data/test/test_memcached.rb +1 -1
- data/test/test_performance.rb +1 -1
- data/test/tmp.rb +1 -19
- metadata +21 -35
- data/lib/action_dispatch/session/iron_cache.rb +0 -93
- data/lib/active_support/cache/iron_cache_store.rb +0 -102
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0c8dd8df9e783faf82960cf94653ea10753b5b9d
|
4
|
+
data.tar.gz: 80af4020ad491ffd0ae3c5dfc088ec0bed62e6ac
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5e9075944819698e6e33b9a3a6e5c0044ed8f83f24d09b12357049bb6da49e8658c3ba2affa1160bffb6190a95defbcf422b450bb891522f425222a68c1beb7b
|
7
|
+
data.tar.gz: 46990545a9c707d19c9020ed6796841a35b3307f1caa5e36a14fb2ddead9699ba279285e4c9c0e7604b2aa66d314b8d27db847bfe2cb55d2dbb89962248d51e1
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -7,20 +7,20 @@ PATH
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
iron_core (0.
|
11
|
-
rest (>= 2.
|
10
|
+
iron_core (1.0.2)
|
11
|
+
rest (>= 2.6.4)
|
12
12
|
memcache-client (1.8.5)
|
13
|
-
mime-types (
|
14
|
-
minitest (
|
15
|
-
net-http-persistent (2.
|
16
|
-
rake (10.0
|
17
|
-
rest (2.
|
13
|
+
mime-types (2.0)
|
14
|
+
minitest (5.2.0)
|
15
|
+
net-http-persistent (2.9)
|
16
|
+
rake (10.1.0)
|
17
|
+
rest (2.6.5)
|
18
18
|
net-http-persistent
|
19
19
|
rest-client (>= 0.3.0)
|
20
20
|
rest-client (1.6.7)
|
21
21
|
mime-types (>= 1.16)
|
22
|
-
test-unit (2.5.
|
23
|
-
uber_config (1.0
|
22
|
+
test-unit (2.5.5)
|
23
|
+
uber_config (1.1.0)
|
24
24
|
|
25
25
|
PLATFORMS
|
26
26
|
ruby
|
data/lib/iron_cache/caches.rb
CHANGED
data/lib/iron_cache/items.rb
CHANGED
@@ -10,7 +10,7 @@ module IronCache
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def path(key, options={})
|
13
|
-
path = "projects/#{@client.project_id}/caches/#{CGI::escape(options[:cache_name] || @client.cache_name)}/items/#{CGI::escape(key)}#{'/increment' if options[:increment] == true}"
|
13
|
+
path = "projects/#{@client.project_id}/caches/#{CGI::escape(options[:cache_name] || @client.cache_name).gsub('+', '%20')}/items/#{CGI::escape(key).gsub('+', '%20')}#{'/increment' if options[:increment] == true}"
|
14
14
|
end
|
15
15
|
|
16
16
|
# options:
|
data/lib/iron_cache/version.rb
CHANGED
data/test/load_er_up.rb
CHANGED
data/test/quick_run.rb
CHANGED
data/test/test_base.rb
CHANGED
@@ -22,32 +22,41 @@ class TestBase < Test::Unit::TestCase
|
|
22
22
|
def setup
|
23
23
|
puts 'setup'
|
24
24
|
# check multiple config locations
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
begin
|
26
|
+
@config = UberConfig.load
|
27
|
+
puts "config=" + @config.inspect
|
28
|
+
@client = IronCache::Client.new(@config['iron'])
|
29
|
+
rescue => ex
|
30
|
+
puts "UberConfig couldn't find file, trying normal Iron.io config..."
|
31
|
+
@client = IronCache::Client.new
|
32
|
+
end
|
33
|
+
|
28
34
|
@client.logger.level = Logger::DEBUG
|
29
35
|
@client.cache_name = 'iron_cache_ruby_tests'
|
30
36
|
|
31
37
|
end
|
32
38
|
|
33
|
-
def
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
def clear_cache(cache_name=nil)
|
40
|
+
cache_name ||= @client.cache_name
|
41
|
+
puts "clearing cache #{cache_name}"
|
42
|
+
cache = @client.cache(cache_name)
|
43
|
+
begin
|
44
|
+
cache.clear
|
45
|
+
puts 'cleared.'
|
46
|
+
rescue Rest::HttpError => ex
|
47
|
+
unless ex.code == 404
|
48
|
+
raise ex
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
42
52
|
end
|
43
53
|
|
44
54
|
def assert_performance(time)
|
45
55
|
start_time = Time.now
|
46
56
|
yield
|
47
|
-
execution_time =
|
57
|
+
execution_time = Time.now - start_time
|
48
58
|
assert execution_time < time, "Execution time too big #{execution_time.round(2)}, should be #{time}"
|
49
59
|
end
|
50
60
|
|
51
61
|
|
52
|
-
|
53
62
|
end
|
data/test/test_errors.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'yaml'
|
3
|
+
require File.expand_path('test_base.rb', File.dirname(__FILE__))
|
4
|
+
|
5
|
+
class IronCacheTests < TestBase
|
6
|
+
def setup
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_basics
|
11
|
+
@client.cache_name = 'test_errors'
|
12
|
+
clear_cache
|
13
|
+
|
14
|
+
k = "key1"
|
15
|
+
v = "hello world!"
|
16
|
+
|
17
|
+
res = @client.items.get(k)
|
18
|
+
p res
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
data/test/test_iron_cache.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test/unit'
|
2
2
|
require 'yaml'
|
3
|
-
require 'test_base'
|
3
|
+
require File.expand_path('test_base.rb', File.dirname(__FILE__))
|
4
4
|
|
5
5
|
class IronCacheTests < TestBase
|
6
6
|
def setup
|
@@ -9,7 +9,7 @@ class IronCacheTests < TestBase
|
|
9
9
|
|
10
10
|
def test_basics
|
11
11
|
@client.cache_name = 'test_basics'
|
12
|
-
|
12
|
+
clear_cache
|
13
13
|
|
14
14
|
k = "key1"
|
15
15
|
v = "hello world!"
|
@@ -104,7 +104,7 @@ class IronCacheTests < TestBase
|
|
104
104
|
|
105
105
|
def test_expiry
|
106
106
|
@client.cache_name = 'test_basics'
|
107
|
-
|
107
|
+
clear_cache
|
108
108
|
k = "key1"
|
109
109
|
v = "hello world!"
|
110
110
|
res = @client.items.put(k, v, :expires_in => 10)
|
@@ -121,7 +121,7 @@ class IronCacheTests < TestBase
|
|
121
121
|
|
122
122
|
def test_incrementors
|
123
123
|
@client.cache_name = 'test_incrementors'
|
124
|
-
|
124
|
+
clear_cache
|
125
125
|
k = "incr1"
|
126
126
|
v = 1
|
127
127
|
res = @client.items.put(k, v)
|
@@ -178,7 +178,7 @@ class IronCacheTests < TestBase
|
|
178
178
|
|
179
179
|
def test_keys
|
180
180
|
@client.cache_name = 'test_keys'
|
181
|
-
|
181
|
+
clear_cache
|
182
182
|
|
183
183
|
k = "word_count_[EBook"
|
184
184
|
v = "hello world!"
|
@@ -193,6 +193,8 @@ class IronCacheTests < TestBase
|
|
193
193
|
|
194
194
|
def test_clear
|
195
195
|
cache = @client.cache("test_clear_3")
|
196
|
+
clear_cache(cache.name)
|
197
|
+
|
196
198
|
num_items = 50
|
197
199
|
|
198
200
|
num_items.times do |i|
|
@@ -201,6 +203,8 @@ class IronCacheTests < TestBase
|
|
201
203
|
|
202
204
|
tkey = "key-0"
|
203
205
|
assert_equal "value", cache.get(tkey).value
|
206
|
+
|
207
|
+
cache.reload
|
204
208
|
puts "cache.size: #{cache.size}"
|
205
209
|
assert_equal num_items, cache.size
|
206
210
|
|
@@ -210,5 +214,26 @@ class IronCacheTests < TestBase
|
|
210
214
|
assert_equal 0, cache.reload.size
|
211
215
|
end
|
212
216
|
|
217
|
+
def test_add
|
218
|
+
cache = @client.cache("test_add")
|
219
|
+
cache.clear rescue ""
|
220
|
+
udq_expires = 60 # 1 min
|
221
|
+
k = 'mykey'
|
222
|
+
r = cache.put(k, 0, :expires_in => udq_expires)
|
223
|
+
r = cache.increment(k)
|
224
|
+
p r
|
225
|
+
assert_equal 1, r.value
|
226
|
+
cache.put(k, 0, :add => true, :expires_in => udq_expires)
|
227
|
+
p r
|
228
|
+
r = cache.increment(k)
|
229
|
+
p r
|
230
|
+
assert_equal 2, r.value
|
231
|
+
cache.put(k, 0, :add => true, :expires_in => udq_expires)
|
232
|
+
r = cache.increment(k)
|
233
|
+
p r
|
234
|
+
assert_equal 3, r.value, "value is #{r.value}, expected 3"
|
235
|
+
end
|
236
|
+
|
237
|
+
|
213
238
|
end
|
214
239
|
|
data/test/test_memcached.rb
CHANGED
data/test/test_performance.rb
CHANGED
data/test/tmp.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test/unit'
|
2
2
|
require 'yaml'
|
3
|
-
require 'test_base'
|
3
|
+
require File.expand_path('test_base.rb', File.dirname(__FILE__))
|
4
4
|
|
5
5
|
class IronCacheTests < TestBase
|
6
6
|
def setup
|
@@ -8,23 +8,5 @@ class IronCacheTests < TestBase
|
|
8
8
|
end
|
9
9
|
|
10
10
|
|
11
|
-
def test_clear
|
12
|
-
cache = @client.cache("test_clear")
|
13
|
-
num_items = 50
|
14
|
-
|
15
|
-
num_items.times do |i|
|
16
|
-
res = cache.put("key-#{i}", "value")
|
17
|
-
end
|
18
|
-
|
19
|
-
tkey = "key-0"
|
20
|
-
assert_equal "value", cache.get(tkey).value
|
21
|
-
puts "cache.size: #{cache.size}"
|
22
|
-
assert_equal num_items, cache.size
|
23
|
-
|
24
|
-
p cache.clear
|
25
|
-
assert_nil cache.get(tkey)
|
26
|
-
assert_equal 0, cache.reload.size
|
27
|
-
end
|
28
|
-
|
29
11
|
end
|
30
12
|
|
metadata
CHANGED
@@ -1,110 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iron_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
5
|
-
prerelease:
|
4
|
+
version: 1.4.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Travis Reeder
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-02-04 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: iron_core
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 0.5.1
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 0.5.1
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: test-unit
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: minitest
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rake
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: memcache-client
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: uber_config
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - '>='
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - '>='
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
description: Ruby client for IronCache by www.iron.io
|
@@ -120,8 +107,6 @@ files:
|
|
120
107
|
- README.md
|
121
108
|
- Rakefile
|
122
109
|
- iron_cache.gemspec
|
123
|
-
- lib/action_dispatch/session/iron_cache.rb
|
124
|
-
- lib/active_support/cache/iron_cache_store.rb
|
125
110
|
- lib/iron_cache.rb
|
126
111
|
- lib/iron_cache/caches.rb
|
127
112
|
- lib/iron_cache/client.rb
|
@@ -130,38 +115,39 @@ files:
|
|
130
115
|
- test/load_er_up.rb
|
131
116
|
- test/quick_run.rb
|
132
117
|
- test/test_base.rb
|
118
|
+
- test/test_errors.rb
|
133
119
|
- test/test_iron_cache.rb
|
134
120
|
- test/test_memcached.rb
|
135
121
|
- test/test_performance.rb
|
136
122
|
- test/tmp.rb
|
137
123
|
homepage: https://github.com/iron-io/iron_cache_ruby
|
138
124
|
licenses: []
|
125
|
+
metadata: {}
|
139
126
|
post_install_message:
|
140
127
|
rdoc_options: []
|
141
128
|
require_paths:
|
142
129
|
- lib
|
143
130
|
required_ruby_version: !ruby/object:Gem::Requirement
|
144
|
-
none: false
|
145
131
|
requirements:
|
146
|
-
- -
|
132
|
+
- - '>='
|
147
133
|
- !ruby/object:Gem::Version
|
148
134
|
version: '1.8'
|
149
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
|
-
none: false
|
151
136
|
requirements:
|
152
|
-
- -
|
137
|
+
- - '>='
|
153
138
|
- !ruby/object:Gem::Version
|
154
139
|
version: 1.3.6
|
155
140
|
requirements: []
|
156
141
|
rubyforge_project:
|
157
|
-
rubygems_version:
|
142
|
+
rubygems_version: 2.0.3
|
158
143
|
signing_key:
|
159
|
-
specification_version:
|
144
|
+
specification_version: 4
|
160
145
|
summary: Ruby client for IronCache by www.iron.io
|
161
146
|
test_files:
|
162
147
|
- test/load_er_up.rb
|
163
148
|
- test/quick_run.rb
|
164
149
|
- test/test_base.rb
|
150
|
+
- test/test_errors.rb
|
165
151
|
- test/test_iron_cache.rb
|
166
152
|
- test/test_memcached.rb
|
167
153
|
- test/test_performance.rb
|
@@ -1,93 +0,0 @@
|
|
1
|
-
require 'iron_cache'
|
2
|
-
require 'base64'
|
3
|
-
require 'action_dispatch/middleware/session/abstract_store'
|
4
|
-
|
5
|
-
module ActionDispatch
|
6
|
-
module Session
|
7
|
-
class IronCache < ActionDispatch::Session::AbstractStore
|
8
|
-
|
9
|
-
def initialize(app, options = {})
|
10
|
-
@options = options
|
11
|
-
super
|
12
|
-
|
13
|
-
@client = ::IronCache::Client.new(options)
|
14
|
-
end
|
15
|
-
|
16
|
-
def options
|
17
|
-
@options
|
18
|
-
end
|
19
|
-
|
20
|
-
def get_session(env, session_id)
|
21
|
-
item = nil
|
22
|
-
session_id ||= generate_sid
|
23
|
-
|
24
|
-
with_namespace(session_id, options) do |cache, k|
|
25
|
-
item = cache.get(k)
|
26
|
-
item = item.value unless item.nil?
|
27
|
-
end
|
28
|
-
|
29
|
-
session_data = deserialize_entry(item) rescue {}
|
30
|
-
|
31
|
-
[session_id, session_data]
|
32
|
-
end
|
33
|
-
|
34
|
-
def set_session(env, session_id, session, options)
|
35
|
-
with_namespace(session_id, options) do |cache, k|
|
36
|
-
cache.put(k, serialize_entry(session, options), options)
|
37
|
-
end
|
38
|
-
|
39
|
-
session_id
|
40
|
-
end
|
41
|
-
|
42
|
-
def destroy_session(env, session_id, options)
|
43
|
-
with_namespace(session_id, options) do |cache, k|
|
44
|
-
cache.delete(k)
|
45
|
-
end
|
46
|
-
|
47
|
-
generate_sid
|
48
|
-
end
|
49
|
-
|
50
|
-
private
|
51
|
-
|
52
|
-
def with_namespace(key, options)
|
53
|
-
options[:namespace] ||= 'rails_cache'
|
54
|
-
|
55
|
-
cache_name = options[:namespace]
|
56
|
-
|
57
|
-
yield(@client.cache(cache_name), escape_key(key))
|
58
|
-
end
|
59
|
-
|
60
|
-
def escape_key(key)
|
61
|
-
ekey = ::Base64.encode64(key)
|
62
|
-
|
63
|
-
if ekey.size > 250
|
64
|
-
ekey = "#{key[0, 213]}:md5:#{Digest::MD5.hexdigest(key)}"
|
65
|
-
end
|
66
|
-
|
67
|
-
ekey
|
68
|
-
end
|
69
|
-
|
70
|
-
def deserialize_entry(raw_value)
|
71
|
-
if raw_value
|
72
|
-
raw_value = ::Base64.decode64(raw_value) rescue raw_value
|
73
|
-
Marshal.load(raw_value) rescue raw_value
|
74
|
-
else
|
75
|
-
nil
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def serialize_entry(entry, options)
|
80
|
-
if options[:raw]
|
81
|
-
if entry.respond_to?(:value)
|
82
|
-
entry.value.to_s
|
83
|
-
else
|
84
|
-
entry.to_s
|
85
|
-
end
|
86
|
-
else
|
87
|
-
::Base64.encode64 Marshal.dump(entry)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
@@ -1,102 +0,0 @@
|
|
1
|
-
require 'iron_cache'
|
2
|
-
require 'base64'
|
3
|
-
|
4
|
-
module ActiveSupport
|
5
|
-
module Cache
|
6
|
-
class IronCacheStore < ActiveSupport::Cache::Store
|
7
|
-
|
8
|
-
def initialize(options = nil)
|
9
|
-
super(options)
|
10
|
-
|
11
|
-
@client = IronCache::Client.new(@options)
|
12
|
-
|
13
|
-
extend ActiveSupport::Cache::Strategy::LocalCache
|
14
|
-
end
|
15
|
-
|
16
|
-
def increment(key, amount = 1, options = nil)
|
17
|
-
with_namespace(key, options) do |cache, k|
|
18
|
-
cache.increment(k, amount)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def decrement(key, amount = 1, options = nil)
|
23
|
-
with_namespace(key, options) do |cache, k|
|
24
|
-
cache.increment(k, -amount)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
protected
|
29
|
-
|
30
|
-
def read_entry(key, options)
|
31
|
-
item = nil
|
32
|
-
|
33
|
-
with_namespace(key, options) do |cache, k|
|
34
|
-
item = cache.get(k)
|
35
|
-
item = item.value unless item.nil?
|
36
|
-
end
|
37
|
-
|
38
|
-
deserialize_entry(item)
|
39
|
-
end
|
40
|
-
|
41
|
-
def write_entry(key, entry, options)
|
42
|
-
with_namespace(key, options) do |cache, k|
|
43
|
-
cache.put(k, serialize_entry(entry, options), options)
|
44
|
-
end
|
45
|
-
|
46
|
-
true
|
47
|
-
end
|
48
|
-
|
49
|
-
def delete_entry(key, options)
|
50
|
-
with_namespace(key, options) do |cache, k|
|
51
|
-
cache.delete(k)
|
52
|
-
end
|
53
|
-
|
54
|
-
true
|
55
|
-
end
|
56
|
-
|
57
|
-
private
|
58
|
-
|
59
|
-
def with_namespace(key, options)
|
60
|
-
options[:namespace] ||= 'rails_cache'
|
61
|
-
|
62
|
-
cache_name, key_name = namespaced_key(key, options).split(':', 2)
|
63
|
-
|
64
|
-
yield(@client.cache(cache_name), escape_key(key_name))
|
65
|
-
end
|
66
|
-
|
67
|
-
def escape_key(key)
|
68
|
-
ekey = ::Base64.encode64(key)
|
69
|
-
|
70
|
-
if ekey.size > 250
|
71
|
-
ekey = "#{key[0, 213]}:md5:#{Digest::MD5.hexdigest(key)}"
|
72
|
-
end
|
73
|
-
|
74
|
-
ekey
|
75
|
-
end
|
76
|
-
|
77
|
-
def deserialize_entry(raw_value)
|
78
|
-
if raw_value
|
79
|
-
raw_value = ::Base64.decode64(raw_value) rescue raw_value
|
80
|
-
entry = Marshal.load(raw_value) rescue raw_value
|
81
|
-
entry.is_a?(ActiveSupport::Cache::Entry) ? entry : ActiveSupport::Cache::Entry.new(entry)
|
82
|
-
else
|
83
|
-
nil
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def serialize_entry(entry, options)
|
88
|
-
value = nil
|
89
|
-
|
90
|
-
if options[:raw]
|
91
|
-
if entry.respond_to?(:value)
|
92
|
-
value = entry.value.to_s
|
93
|
-
else
|
94
|
-
value = entry.to_s
|
95
|
-
end
|
96
|
-
else
|
97
|
-
value = ::Base64.encode64 Marshal.dump(entry)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|