ngmoco-cache-money 0.2.23 → 0.2.24.2
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.
- data/README +30 -34
- data/README.markdown +30 -34
- data/config/environment.rb +0 -8
- data/config/memcached.yml +0 -2
- data/init.rb +1 -1
- data/lib/cache_money.rb +55 -36
- data/lib/cash/adapter/memcache_client.rb +36 -0
- data/lib/cash/adapter/memcached.rb +131 -0
- data/lib/cash/adapter/redis.rb +152 -0
- data/lib/cash/config.rb +7 -4
- data/lib/cash/finders.rb +15 -3
- data/lib/cash/index.rb +3 -6
- data/lib/cash/local.rb +1 -1
- data/lib/cash/lock.rb +2 -2
- data/lib/cash/mock.rb +16 -12
- data/lib/cash/query/abstract.rb +29 -3
- data/lib/cash/version.rb +3 -0
- data/lib/cash/write_through.rb +9 -5
- data/lib/mem_cached_support_store.rb +1 -1
- data/rails/init.rb +1 -40
- data/spec/cash/calculations_spec.rb +11 -0
- data/spec/cash/finders_spec.rb +4 -4
- data/spec/cash/lock_spec.rb +30 -24
- data/spec/cash/marshal_spec.rb +1 -1
- data/spec/cash/transactional_spec.rb +19 -17
- data/spec/cash/without_caching_spec.rb +32 -0
- data/spec/cash/write_through_spec.rb +7 -0
- data/spec/spec_helper.rb +32 -6
- metadata +136 -45
- data/lib/memcached_wrapper.rb +0 -263
- data/spec/memcached_wrapper_test.rb +0 -209
data/lib/memcached_wrapper.rb
DELETED
@@ -1,263 +0,0 @@
|
|
1
|
-
# require 'memcache'
|
2
|
-
# require 'memcached'
|
3
|
-
|
4
|
-
#typically MemCache/Memcached can be used via the following in rails/init.rb:
|
5
|
-
#$memcache = MemCache.new(memcache_config[:servers].gsub(' ', '').split(','), memcache_config)
|
6
|
-
#$memcache = Memcached::Rails.new(memcache_config[:servers].gsub(' ', '').split(','), memcache_config)
|
7
|
-
|
8
|
-
#this wrapper lets both work.
|
9
|
-
|
10
|
-
########## they have Memcached installed (do need the wrapper)
|
11
|
-
if defined? Memcached
|
12
|
-
Rails.logger.info("cache-money: Memcached installed") if defined? Rails
|
13
|
-
|
14
|
-
class Memcached
|
15
|
-
alias :get_multi :get #:nodoc:
|
16
|
-
end
|
17
|
-
|
18
|
-
class MemcachedWrapper < ::Memcached
|
19
|
-
DEFAULTS = { :servers => '127.0.0.1:11211' }
|
20
|
-
|
21
|
-
attr_reader :logger, :default_ttl
|
22
|
-
|
23
|
-
# See Memcached#new for details.
|
24
|
-
def initialize(*args)
|
25
|
-
opts = DEFAULTS.merge(args.last.is_a?(Hash) ? args.pop : {})
|
26
|
-
|
27
|
-
if opts.respond_to?(:symbolize_keys!)
|
28
|
-
opts.symbolize_keys!
|
29
|
-
else
|
30
|
-
opts = symbolize_keys(opts)
|
31
|
-
end
|
32
|
-
|
33
|
-
servers = Array(
|
34
|
-
args.any? ? args.unshift : opts.delete(:servers)
|
35
|
-
).flatten.compact
|
36
|
-
|
37
|
-
opts[:prefix_key] ||= "#{opts[:namespace]}:"
|
38
|
-
|
39
|
-
@logger = opts[:logger]
|
40
|
-
@debug = opts[:debug]
|
41
|
-
|
42
|
-
super(servers, opts)
|
43
|
-
end
|
44
|
-
|
45
|
-
def symbolize_keys(opts)
|
46
|
-
# Destructively convert all keys to symbols.
|
47
|
-
if opts.kind_of?(Hash) && !opts.kind_of?(HashWithIndifferentAccess)
|
48
|
-
opts.keys.each do |key|
|
49
|
-
unless key.is_a?(Symbol)
|
50
|
-
opts[key.to_sym] = opts[key]
|
51
|
-
opts.delete(key)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
opts
|
56
|
-
end
|
57
|
-
|
58
|
-
def namespace
|
59
|
-
options[:prefix_key]
|
60
|
-
end
|
61
|
-
|
62
|
-
# Wraps Memcached::Rails#add to return a text string - for cache money
|
63
|
-
def add(key, value, ttl=@default_ttl, raw=false)
|
64
|
-
logger.debug("Memcached add: #{key.inspect}") if logger && @debug
|
65
|
-
super(key, value, ttl, !raw)
|
66
|
-
logger.debug("Memcached hit: #{key.inspect}") if logger && @debug
|
67
|
-
stored
|
68
|
-
rescue Memcached::NotStored
|
69
|
-
logger.debug("Memcached miss: #{key.inspect}") if logger && @debug
|
70
|
-
not_stored
|
71
|
-
rescue Memcached::Error
|
72
|
-
log_error($!) if logger
|
73
|
-
not_stored
|
74
|
-
end
|
75
|
-
|
76
|
-
def replace(key, value, ttl = @default_ttl, raw = false)
|
77
|
-
logger.debug("Memcached replace: #{key.inspect}") if logger && @debug
|
78
|
-
super(key, value, ttl, !raw)
|
79
|
-
logger.debug("Memcached hit: #{key.inspect}") if logger && @debug
|
80
|
-
stored
|
81
|
-
rescue Memcached::NotStored
|
82
|
-
logger.debug("Memcached miss: #{key.inspect}") if logger && @debug
|
83
|
-
not_stored
|
84
|
-
rescue Memcached::Error
|
85
|
-
log_error($!) if logger
|
86
|
-
not_stored
|
87
|
-
end
|
88
|
-
|
89
|
-
# Wraps Memcached#get so that it doesn't raise. This has the side-effect of preventing you from
|
90
|
-
# storing <tt>nil</tt> values.
|
91
|
-
def get(key, raw=false)
|
92
|
-
logger.debug("Memcached get: #{key.inspect}") if logger && @debug
|
93
|
-
value = super(key, !raw)
|
94
|
-
logger.debug("Memcached hit: #{key.inspect}") if logger && @debug
|
95
|
-
value
|
96
|
-
rescue Memcached::NotFound
|
97
|
-
logger.debug("Memcached miss: #{key.inspect}") if logger && @debug
|
98
|
-
nil
|
99
|
-
rescue TypeError
|
100
|
-
log_error($!) if logger
|
101
|
-
delete(key)
|
102
|
-
logger.debug("Memcached deleted: #{key.inspect}") if logger && @debug
|
103
|
-
nil
|
104
|
-
rescue Memcached::Error
|
105
|
-
log_error($!) if logger
|
106
|
-
nil
|
107
|
-
end
|
108
|
-
|
109
|
-
def fetch(key, expiry = 0, raw = false)
|
110
|
-
value = get(key, !raw)
|
111
|
-
|
112
|
-
if value.nil? && block_given?
|
113
|
-
value = yield
|
114
|
-
add(key, value, expiry, !raw)
|
115
|
-
end
|
116
|
-
|
117
|
-
value
|
118
|
-
end
|
119
|
-
|
120
|
-
# Wraps Memcached#cas so that it doesn't raise. Doesn't set anything if no value is present.
|
121
|
-
def cas(key, ttl=@default_ttl, raw=false, &block)
|
122
|
-
logger.debug("Memcached cas: #{key.inspect}") if logger && @debug
|
123
|
-
super(key, ttl, !raw, &block)
|
124
|
-
logger.debug("Memcached hit: #{key.inspect}") if logger && @debug
|
125
|
-
stored
|
126
|
-
rescue Memcached::NotFound
|
127
|
-
logger.debug("Memcached miss: #{key.inspect}") if logger && @debug
|
128
|
-
rescue TypeError
|
129
|
-
log_error($!) if logger
|
130
|
-
delete(key)
|
131
|
-
logger.debug("Memcached deleted: #{key.inspect}") if logger && @debug
|
132
|
-
rescue Memcached::Error
|
133
|
-
if $!.is_a?(Memcached::ClientError)
|
134
|
-
raise $!
|
135
|
-
end
|
136
|
-
log_error($!) if logger
|
137
|
-
end
|
138
|
-
|
139
|
-
def get_multi(*keys)
|
140
|
-
keys.flatten!
|
141
|
-
logger.debug("Memcached get_multi: #{keys.inspect}") if logger && @debug
|
142
|
-
values = super(keys, true)
|
143
|
-
logger.debug("Memcached hit: #{keys.inspect}") if logger && @debug
|
144
|
-
values
|
145
|
-
rescue Memcached::NotFound
|
146
|
-
logger.debug("Memcached miss: #{keys.inspect}") if logger && @debug
|
147
|
-
{}
|
148
|
-
rescue TypeError
|
149
|
-
log_error($!) if logger
|
150
|
-
keys.each { |key| delete(key) }
|
151
|
-
logger.debug("Memcached deleted: #{keys.inspect}") if logger && @debug
|
152
|
-
{}
|
153
|
-
rescue Memcached::Error
|
154
|
-
log_error($!) if logger
|
155
|
-
{}
|
156
|
-
end
|
157
|
-
|
158
|
-
def set(key, value, ttl=@default_ttl, raw=false)
|
159
|
-
logger.debug("Memcached set: #{key.inspect}") if logger && @debug
|
160
|
-
super(key, value, ttl, !raw)
|
161
|
-
logger.debug("Memcached hit: #{key.inspect}") if logger && @debug
|
162
|
-
stored
|
163
|
-
rescue Memcached::Error
|
164
|
-
log_error($!) if logger
|
165
|
-
not_stored
|
166
|
-
end
|
167
|
-
|
168
|
-
def append(key, value)
|
169
|
-
logger.debug("Memcached append: #{key.inspect}") if logger && @debug
|
170
|
-
super(key, value)
|
171
|
-
logger.debug("Memcached hit: #{key.inspect}") if logger && @debug
|
172
|
-
stored
|
173
|
-
rescue Memcached::NotStored
|
174
|
-
logger.debug("Memcached miss: #{key.inspect}") if logger && @debug
|
175
|
-
not_stored
|
176
|
-
rescue Memcached::Error
|
177
|
-
log_error($!) if logger
|
178
|
-
end
|
179
|
-
|
180
|
-
def prepend(key, value)
|
181
|
-
logger.debug("Memcached prepend: #{key.inspect}") if logger && @debug
|
182
|
-
super(key, value)
|
183
|
-
logger.debug("Memcached hit: #{key.inspect}") if logger && @debug
|
184
|
-
stored
|
185
|
-
rescue Memcached::NotStored
|
186
|
-
logger.debug("Memcached miss: #{key.inspect}") if logger && @debug
|
187
|
-
not_stored
|
188
|
-
rescue Memcached::Error
|
189
|
-
log_error($!) if logger
|
190
|
-
end
|
191
|
-
|
192
|
-
def delete(key)
|
193
|
-
logger.debug("Memcached delete: #{key.inspect}") if logger && @debug
|
194
|
-
super(key)
|
195
|
-
logger.debug("Memcached hit: #{key.inspect}") if logger && @debug
|
196
|
-
deleted
|
197
|
-
rescue Memcached::NotFound
|
198
|
-
logger.debug("Memcached miss: #{key.inspect}") if logger && @debug
|
199
|
-
not_found
|
200
|
-
rescue Memcached::Error
|
201
|
-
log_error($!) if logger
|
202
|
-
end
|
203
|
-
|
204
|
-
def incr(*args)
|
205
|
-
super
|
206
|
-
rescue Memcached::NotFound
|
207
|
-
rescue Memcached::Error
|
208
|
-
log_error($!) if logger
|
209
|
-
end
|
210
|
-
|
211
|
-
def decr(*args)
|
212
|
-
super
|
213
|
-
rescue Memcached::NotFound
|
214
|
-
rescue Memcached::Error
|
215
|
-
log_error($!) if logger
|
216
|
-
end
|
217
|
-
|
218
|
-
def get_server_for_key(key, options = {})
|
219
|
-
server_by_key(key)
|
220
|
-
end
|
221
|
-
|
222
|
-
alias :reset :quit
|
223
|
-
alias :close :quit #nodoc
|
224
|
-
alias :flush_all :flush
|
225
|
-
alias :compare_and_swap :cas
|
226
|
-
alias :"[]" :get
|
227
|
-
alias :"[]=" :set
|
228
|
-
|
229
|
-
private
|
230
|
-
|
231
|
-
def stored
|
232
|
-
"STORED\r\n"
|
233
|
-
end
|
234
|
-
|
235
|
-
def deleted
|
236
|
-
"DELETED\r\n"
|
237
|
-
end
|
238
|
-
|
239
|
-
def not_stored
|
240
|
-
"NOT_STORED\r\n"
|
241
|
-
end
|
242
|
-
|
243
|
-
def not_found
|
244
|
-
"NOT_FOUND\r\n"
|
245
|
-
end
|
246
|
-
|
247
|
-
def log_error(err)
|
248
|
-
#logger.error("#{err}: \n\t#{err.backtrace.join("\n\t")}") if logger
|
249
|
-
logger.error("Memcached ERROR, #{err.class}: #{err}") if logger
|
250
|
-
end
|
251
|
-
|
252
|
-
end
|
253
|
-
####### they have MemCache installed (don't need the wrapper)
|
254
|
-
elsif defined? MemCache
|
255
|
-
|
256
|
-
Rails.logger.info("cache-money: MemCache installed") if defined? Rails
|
257
|
-
#TODO add logging?
|
258
|
-
class MemcachedWrapper < ::MemCache
|
259
|
-
end
|
260
|
-
|
261
|
-
else
|
262
|
-
Rails.logger.warn 'unable to determine memcache implementation' if defined? Rails
|
263
|
-
end #include the wraper
|
@@ -1,209 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'memcache'
|
3
|
-
|
4
|
-
class MemcachedWrapperTest < ActiveSupport::TestCase
|
5
|
-
|
6
|
-
context "with single memcached server" do
|
7
|
-
|
8
|
-
setup do
|
9
|
-
@wrapper = MemcachedWrapper.new("127.0.0.1:11211", {:namespace => "wrapper", :show_backtraces => true, :support_cas => true})
|
10
|
-
@memcache = MemCache.new("127.0.0.1:11211", {:namespace => "memcache"})
|
11
|
-
@wrapper.flush_all
|
12
|
-
@memcache.flush_all
|
13
|
-
end
|
14
|
-
|
15
|
-
teardown do
|
16
|
-
@wrapper.close
|
17
|
-
@memcache.reset
|
18
|
-
end
|
19
|
-
|
20
|
-
should "add" do
|
21
|
-
assert_equal(@wrapper.add("blah/toe", "blah"), @memcache.add("blah/toe", "blah"))
|
22
|
-
assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
|
23
|
-
assert_equal(@wrapper.add("blah/toe", "blah2"), @memcache.add("blah/toe", "blah2"))
|
24
|
-
assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
|
25
|
-
end
|
26
|
-
|
27
|
-
should "replace" do
|
28
|
-
assert_equal(@wrapper.replace("blah/toe", "blah"), @memcache.replace("blah/toe", "blah"))
|
29
|
-
assert_equal(@wrapper.add("blah/toe", "blah"), @memcache.add("blah/toe", "blah"))
|
30
|
-
assert_equal(@wrapper.replace("blah/toe", "blah2"), @memcache.replace("blah/toe", "blah2"))
|
31
|
-
assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
|
32
|
-
end
|
33
|
-
|
34
|
-
should "get" do
|
35
|
-
assert_equal(@wrapper.add("blah/toe", "blah"), @memcache.add("blah/toe", "blah"))
|
36
|
-
assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
|
37
|
-
end
|
38
|
-
|
39
|
-
should "fetch" do
|
40
|
-
assert_equal(@wrapper.fetch("blah/toe") { "blah" }, @memcache.fetch("blah/toe") { "blah" })
|
41
|
-
assert_equal(@wrapper.fetch("blah/toe") { "blah2" }, @memcache.fetch("blah/toe") { "blah2" })
|
42
|
-
end
|
43
|
-
|
44
|
-
should "compare and swap" do
|
45
|
-
assert_equal(@wrapper.cas("blah/toe") { "blah" }, @memcache.cas("blah/toe") { "blah" })
|
46
|
-
assert_equal(@wrapper.add("blah/toe", "blah"), @memcache.add("blah/toe", "blah"))
|
47
|
-
assert_equal(@wrapper.cas("blah/toe") { "blah2" }, @memcache.cas("blah/toe") { "blah2" })
|
48
|
-
assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
|
49
|
-
end
|
50
|
-
|
51
|
-
should "get multiple" do
|
52
|
-
assert_equal(@wrapper.add("blah/toe", "blah"), @memcache.add("blah/toe", "blah"))
|
53
|
-
assert_equal(@wrapper.add("blah/finger", "blah2"), @memcache.add("blah/finger", "blah2"))
|
54
|
-
assert_equal(@wrapper.get_multi(["blah/toe", "blah/finger"]), @memcache.get_multi(["blah/toe", "blah/finger"]))
|
55
|
-
end
|
56
|
-
|
57
|
-
should "set" do
|
58
|
-
assert_equal(@wrapper.set("blah/toe", "blah"), @memcache.set("blah/toe", "blah"))
|
59
|
-
assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
|
60
|
-
end
|
61
|
-
|
62
|
-
should "append" do
|
63
|
-
assert_equal(@wrapper.append("blah/toe", "blah"), @memcache.append("blah/toe", "blah"))
|
64
|
-
assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
|
65
|
-
|
66
|
-
assert_equal(@wrapper.set("blah/toe", "blah", 0, true), @memcache.set("blah/toe", "blah", 0, true))
|
67
|
-
assert_equal(@wrapper.get("blah/toe", true), @memcache.get("blah/toe", true))
|
68
|
-
assert_equal(@wrapper.append("blah/toe", "blah2"), @memcache.append("blah/toe", "blah2"))
|
69
|
-
assert_equal(@wrapper.get("blah/toe", true), @memcache.get("blah/toe", true))
|
70
|
-
end
|
71
|
-
|
72
|
-
should "prepend" do
|
73
|
-
assert_equal(@wrapper.prepend("blah/toe", "blah"), @memcache.prepend("blah/toe", "blah"))
|
74
|
-
assert_equal(@wrapper.get("blah/toe"), @memcache.get("blah/toe"))
|
75
|
-
|
76
|
-
assert_equal(@wrapper.set("blah/toe", "blah", 0, true), @memcache.set("blah/toe", "blah", 0, true))
|
77
|
-
assert_equal(@wrapper.prepend("blah/toe", "blah2"), @memcache.prepend("blah/toe", "blah2"))
|
78
|
-
assert_equal(@wrapper.get("blah/toe", true), @memcache.get("blah/toe", true))
|
79
|
-
end
|
80
|
-
|
81
|
-
should "delete" do
|
82
|
-
assert_equal(@wrapper.delete("blah/toe"), @memcache.delete("blah/toe"))
|
83
|
-
assert_equal(@wrapper.set("blah/toe", "blah"), @memcache.set("blah/toe", "blah"))
|
84
|
-
assert_equal(@wrapper.delete("blah/toe"), @memcache.delete("blah/toe"))
|
85
|
-
end
|
86
|
-
|
87
|
-
should "increment" do
|
88
|
-
assert_equal(@wrapper.incr("blah/count"), @memcache.incr("blah/count"))
|
89
|
-
assert_equal(@wrapper.set("blah/count", 0, 0, true), @memcache.set("blah/count", 0, 0, true))
|
90
|
-
assert_equal(@wrapper.incr("blah/count"), @memcache.incr("blah/count"))
|
91
|
-
end
|
92
|
-
|
93
|
-
should "decrement" do
|
94
|
-
assert_equal(@wrapper.decr("blah/count"), @memcache.decr("blah/count"))
|
95
|
-
assert_equal(@wrapper.set("blah/count", 2, 0, true), @memcache.set("blah/count", 2, 0, true))
|
96
|
-
assert_equal(@wrapper.decr("blah/count"), @memcache.decr("blah/count"))
|
97
|
-
end
|
98
|
-
|
99
|
-
# should "stats" do
|
100
|
-
# assert_equal(@wrapper.stats(), @memcache.stats())
|
101
|
-
# end
|
102
|
-
|
103
|
-
end
|
104
|
-
|
105
|
-
# context "with two memcached servers" do
|
106
|
-
#
|
107
|
-
# setup do
|
108
|
-
# @wrapper = MemcachedWrapper.new(["127.0.0.1:11211", "127.0.0.1:1111"], {:show_backtraces => true, :support_cas => true})
|
109
|
-
# # @wrapper = MemCache.new(["127.0.0.1:11211", "127.0.0.1:1111"], {:show_backtraces => true, :support_cas => true})
|
110
|
-
# @wrapper.flush_all
|
111
|
-
# end
|
112
|
-
#
|
113
|
-
# teardown do
|
114
|
-
# # @wrapper.close
|
115
|
-
# end
|
116
|
-
#
|
117
|
-
# should "add value" do
|
118
|
-
# assert_stored(@wrapper.add("blah/toe", "blah"))
|
119
|
-
# assert_equal( "blah", @wrapper.get("blah/toe"))
|
120
|
-
# assert_not_stored(@wrapper.add("blah/toe", "blah2"))
|
121
|
-
# assert_equal( "blah", @wrapper.get("blah/toe"))
|
122
|
-
# end
|
123
|
-
#
|
124
|
-
# should "get value" do
|
125
|
-
# assert_stored(@wrapper.add("blah/toe", "blah"))
|
126
|
-
# assert_equal( "blah", @wrapper.get("blah/toe"))
|
127
|
-
# end
|
128
|
-
#
|
129
|
-
# should "fetch value" do
|
130
|
-
# assert_equal( "blah", @wrapper.fetch("blah/toe") { "blah" })
|
131
|
-
# assert_equal( "blah", @wrapper.fetch("blah/toe") { "blah2" })
|
132
|
-
# end
|
133
|
-
#
|
134
|
-
# should "check and set value" do
|
135
|
-
# assert_nil( @wrapper.cas("blah/toe") { "blah" })
|
136
|
-
# assert_stored(@wrapper.add("blah/toe", "blah"))
|
137
|
-
# assert_stored(@wrapper.cas("blah/toe") { "blah2" })
|
138
|
-
# assert_equal( "blah2", @wrapper.get("blah/toe"))
|
139
|
-
# end
|
140
|
-
#
|
141
|
-
# should "get multiple values" do
|
142
|
-
# assert_stored(@wrapper.add("blah/toe", "blah"))
|
143
|
-
# assert_stored(@wrapper.add("blah/finger", "blah2"))
|
144
|
-
# assert_equal( {'blah/toe'=>'blah','blah/finger'=>'blah2'}, @wrapper.get_multi(["blah/toe", "blah/finger"]))
|
145
|
-
# end
|
146
|
-
#
|
147
|
-
# should "set value" do
|
148
|
-
# assert_stored(@wrapper.set("blah/toe", "blah"))
|
149
|
-
# assert_equal( "blah", @wrapper.get("blah/toe"))
|
150
|
-
# end
|
151
|
-
#
|
152
|
-
# should "append value" do
|
153
|
-
# assert_not_stored( @wrapper.append("blah/toe", "blah"))
|
154
|
-
# assert_nil( @wrapper.get("blah/toe"))
|
155
|
-
#
|
156
|
-
# assert_stored( @wrapper.set("blah/toe", "blah", 0, true))
|
157
|
-
# assert_equal( "blah", @wrapper.get("blah/toe", true))
|
158
|
-
# assert_stored( @wrapper.append("blah/toe", "blah2"))
|
159
|
-
# assert_equal( "blahblah2", @wrapper.get("blah/toe", true))
|
160
|
-
# end
|
161
|
-
#
|
162
|
-
# should "prepend value" do
|
163
|
-
# assert_not_stored(@wrapper.prepend("blah/toe", "blah"))
|
164
|
-
# assert_nil( @wrapper.get("blah/toe"))
|
165
|
-
#
|
166
|
-
# assert_stored( @wrapper.set("blah/toe", "blah", 0, true))
|
167
|
-
# assert_stored( @wrapper.prepend("blah/toe", "blah2"))
|
168
|
-
# assert_equal( "blah2blah", @wrapper.get("blah/toe", true))
|
169
|
-
# end
|
170
|
-
#
|
171
|
-
# should "delete value" do
|
172
|
-
# assert_not_found( @wrapper.delete("blah/toe"))
|
173
|
-
# assert_stored( @wrapper.set("blah/toe", "blah"))
|
174
|
-
# assert_deleted( @wrapper.delete("blah/toe"))
|
175
|
-
# end
|
176
|
-
#
|
177
|
-
# should "increment value" do
|
178
|
-
# assert_nil( @wrapper.incr("blah/count"))
|
179
|
-
# assert_stored(@wrapper.set("blah/count", 0, 0, true))
|
180
|
-
# assert_equal( 1, @wrapper.incr("blah/count"))
|
181
|
-
# end
|
182
|
-
#
|
183
|
-
# should "decrement value" do
|
184
|
-
# assert_nil( @wrapper.decr("blah/count"))
|
185
|
-
# assert_stored(@wrapper.set("blah/count", 2, 0, true))
|
186
|
-
# assert_equal( 1, @wrapper.decr("blah/count"))
|
187
|
-
# end
|
188
|
-
#
|
189
|
-
# end
|
190
|
-
|
191
|
-
private
|
192
|
-
|
193
|
-
def assert_stored(val)
|
194
|
-
assert_equal("STORED\r\n", val)
|
195
|
-
end
|
196
|
-
|
197
|
-
def assert_deleted(val)
|
198
|
-
assert_equal("DELETED\r\n", val)
|
199
|
-
end
|
200
|
-
|
201
|
-
def assert_not_stored(val)
|
202
|
-
assert_equal("NOT_STORED\r\n", val)
|
203
|
-
end
|
204
|
-
|
205
|
-
def assert_not_found(val)
|
206
|
-
assert_equal("NOT_FOUND\r\n", val)
|
207
|
-
end
|
208
|
-
|
209
|
-
end
|