memcache-client 1.2.0 → 1.2.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.
- data/History.txt +10 -0
- data/Rakefile +6 -2
- data/lib/memcache.rb +7 -3
- data/lib/memcache_util.rb +48 -55
- data/test/test_mem_cache.rb +20 -0
- metadata +16 -8
data/History.txt
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
= 1.2.1
|
2
|
+
|
3
|
+
* Fix bug #7048, MemCache#servers= referenced changed local variable.
|
4
|
+
Submitted by Justin Dossey.
|
5
|
+
* Fix bug #7049, MemCache#initialize resets @buckets. Submitted by
|
6
|
+
Justin Dossey.
|
7
|
+
* Fix bug #6232, Make Cache::Get work with a block only when nil is
|
8
|
+
returned. Submitted by Jon Evans.
|
9
|
+
* Moved to the seattlerb project.
|
10
|
+
|
1
11
|
= 1.2.0
|
2
12
|
|
3
13
|
NOTE: This version will store keys in different places than previous
|
data/Rakefile
CHANGED
@@ -2,16 +2,20 @@
|
|
2
2
|
|
3
3
|
require 'hoe'
|
4
4
|
|
5
|
+
require './lib/memcache'
|
6
|
+
|
5
7
|
DEV_DOC_PATH = "Libraries/memcache-client"
|
6
8
|
|
7
|
-
hoe = Hoe.new 'memcache-client',
|
9
|
+
hoe = Hoe.new 'memcache-client', MemCache::VERSION do |p|
|
8
10
|
p.summary = 'A Ruby memcached client'
|
9
11
|
p.description = 'memcache-client is a pure-ruby client to Danga\'s memcached.'
|
10
12
|
p.author = ['Eric Hodel', 'Robert Cottrell']
|
11
13
|
p.email = 'eric@robotcoop.com'
|
12
14
|
p.url = "http://dev.robotcoop.com/#{DEV_DOC_PATH}"
|
15
|
+
p.changes = File.read('History.txt').scan(/\A(=.*?)^=/m).first.first
|
13
16
|
|
14
|
-
p.rubyforge_name = '
|
17
|
+
p.rubyforge_name = 'seattlerb'
|
18
|
+
p.extra_deps << ['ZenTest', '>= 3.4.2']
|
15
19
|
end
|
16
20
|
|
17
21
|
SPEC = hoe.spec
|
data/lib/memcache.rb
CHANGED
@@ -38,6 +38,11 @@ end
|
|
38
38
|
|
39
39
|
class MemCache
|
40
40
|
|
41
|
+
##
|
42
|
+
# The version of MemCache you are using.
|
43
|
+
|
44
|
+
VERSION = '1.2.1'
|
45
|
+
|
41
46
|
##
|
42
47
|
# Default options for the cache object.
|
43
48
|
|
@@ -109,8 +114,8 @@ class MemCache
|
|
109
114
|
@readonly = opts[:readonly]
|
110
115
|
@multithread = opts[:multithread]
|
111
116
|
@mutex = Mutex.new if @multithread
|
112
|
-
self.servers = servers
|
113
117
|
@buckets = []
|
118
|
+
self.servers = servers
|
114
119
|
end
|
115
120
|
|
116
121
|
##
|
@@ -155,8 +160,7 @@ class MemCache
|
|
155
160
|
end
|
156
161
|
server
|
157
162
|
else
|
158
|
-
raise TypeError, "
|
159
|
-
svr.class.name
|
163
|
+
raise TypeError, "cannot convert #{server.class} into MemCache::Server"
|
160
164
|
end
|
161
165
|
end
|
162
166
|
|
data/lib/memcache_util.rb
CHANGED
@@ -4,68 +4,61 @@
|
|
4
4
|
|
5
5
|
module Cache
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
##
|
8
|
+
# Returns the object at +key+ from the cache if successful, or nil if either
|
9
|
+
# the object is not in the cache or if there was an error attermpting to
|
10
|
+
# access the cache.
|
11
|
+
#
|
12
|
+
# If there is a cache miss and a block is given the result of the block will
|
13
|
+
# be stored in the cache with optional +expiry+.
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}"
|
24
|
-
if block_given? then
|
25
|
-
value = yield
|
26
|
-
put key, value, expiry
|
27
|
-
return value
|
28
|
-
else
|
29
|
-
return nil
|
30
|
-
end
|
15
|
+
def self.get(key, expiry = 0)
|
16
|
+
start_time = Time.now
|
17
|
+
result = CACHE.get key
|
18
|
+
elapsed = Time.now - start_time
|
19
|
+
ActiveRecord::Base.logger.debug('MemCache Get (%0.6f) %s' % [elapsed, key])
|
20
|
+
if result.nil? and block_given? then
|
21
|
+
value = yield
|
22
|
+
put key, value, expiry
|
31
23
|
end
|
24
|
+
return result
|
25
|
+
rescue MemCache::MemCacheError => err
|
26
|
+
ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}"
|
27
|
+
end
|
32
28
|
|
33
|
-
|
34
|
-
|
35
|
-
|
29
|
+
##
|
30
|
+
# Places +value+ in the cache at +key+, with an optional +expiry+ time in
|
31
|
+
# seconds.
|
36
32
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
end
|
33
|
+
def self.put(key, value, expiry = 0)
|
34
|
+
start_time = Time.now
|
35
|
+
CACHE.set key, value, expiry
|
36
|
+
elapsed = Time.now - start_time
|
37
|
+
ActiveRecord::Base.logger.debug('MemCache Set (%0.6f) %s' % [elapsed, key])
|
38
|
+
rescue MemCache::MemCacheError => err
|
39
|
+
ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}"
|
40
|
+
end
|
46
41
|
|
47
|
-
|
48
|
-
|
42
|
+
##
|
43
|
+
# Deletes +key+ from the cache in +delay+ seconds.
|
49
44
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
45
|
+
def self.delete(key, delay = nil)
|
46
|
+
start_time = Time.now
|
47
|
+
CACHE.delete key, delay
|
48
|
+
elapsed = Time.now - start_time
|
49
|
+
ActiveRecord::Base.logger.debug('MemCache Delete (%0.6f) %s' %
|
50
|
+
[elapsed, key])
|
51
|
+
rescue MemCache::MemCacheError => err
|
52
|
+
ActiveRecord::Base.logger.debug "MemCache Error: #{err.message}"
|
53
|
+
end
|
59
54
|
|
60
|
-
|
61
|
-
|
55
|
+
##
|
56
|
+
# Resets all connections to MemCache servers.
|
62
57
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
end
|
58
|
+
def self.reset
|
59
|
+
CACHE.reset
|
60
|
+
ActiveRecord::Base.logger.debug 'MemCache Connections Reset'
|
61
|
+
end
|
69
62
|
|
70
|
-
|
63
|
+
end
|
71
64
|
|
data/test/test_mem_cache.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'stringio'
|
2
2
|
require 'test/unit'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'test/zentest_assertions'
|
3
5
|
|
4
6
|
$TESTING = true
|
5
7
|
|
@@ -122,6 +124,16 @@ class TestMemCache < Test::Unit::TestCase
|
|
122
124
|
assert_equal 'first argument must be Array, Hash or String', e.message
|
123
125
|
end
|
124
126
|
|
127
|
+
def test_initialize_multiple_servers
|
128
|
+
cache = MemCache.new %w[localhost:11211 localhost:11212],
|
129
|
+
:namespace => 'my_namespace', :readonly => true
|
130
|
+
|
131
|
+
assert_equal 'my_namespace', cache.namespace
|
132
|
+
assert_equal true, cache.readonly?
|
133
|
+
assert_equal false, cache.servers.empty?
|
134
|
+
deny_empty cache.instance_variable_get(:@buckets)
|
135
|
+
end
|
136
|
+
|
125
137
|
def test_initialize_too_many_args
|
126
138
|
assert_raises ArgumentError do
|
127
139
|
MemCache.new 1, 2, 3
|
@@ -233,6 +245,14 @@ class TestMemCache < Test::Unit::TestCase
|
|
233
245
|
assert_equal 'key', @cache.make_cache_key('key')
|
234
246
|
end
|
235
247
|
|
248
|
+
def test_servers_equals_type_error
|
249
|
+
e = assert_raise TypeError do
|
250
|
+
@cache.servers = [Object.new]
|
251
|
+
end
|
252
|
+
|
253
|
+
assert_equal 'cannot convert Object into MemCache::Server', e.message
|
254
|
+
end
|
255
|
+
|
236
256
|
def test_basic_threaded_operations_should_work
|
237
257
|
cache = MemCache.new :multithread => true,
|
238
258
|
:namespace => 'my_namespace',
|
metadata
CHANGED
@@ -1,17 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.0.7
|
3
3
|
specification_version: 1
|
4
4
|
name: memcache-client
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.2.
|
7
|
-
date: 2006-
|
6
|
+
version: 1.2.1
|
7
|
+
date: 2006-12-06 00:00:00 -08:00
|
8
8
|
summary: A Ruby memcached client
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
|
-
- test
|
12
11
|
email: eric@robotcoop.com
|
13
12
|
homepage: http://dev.robotcoop.com/Libraries/memcache-client
|
14
|
-
rubyforge_project:
|
13
|
+
rubyforge_project: seattlerb
|
15
14
|
description: memcache-client is a pure-ruby client to Danga's memcached.
|
16
15
|
autorequire:
|
17
16
|
default_executable:
|
@@ -39,8 +38,8 @@ files:
|
|
39
38
|
- lib/memcache.rb
|
40
39
|
- lib/memcache_util.rb
|
41
40
|
- test/test_mem_cache.rb
|
42
|
-
test_files:
|
43
|
-
|
41
|
+
test_files:
|
42
|
+
- test/test_mem_cache.rb
|
44
43
|
rdoc_options: []
|
45
44
|
|
46
45
|
extra_rdoc_files: []
|
@@ -59,5 +58,14 @@ dependencies:
|
|
59
58
|
requirements:
|
60
59
|
- - ">="
|
61
60
|
- !ruby/object:Gem::Version
|
62
|
-
version: 1.1.
|
61
|
+
version: 1.1.5
|
62
|
+
version:
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: ZenTest
|
65
|
+
version_requirement:
|
66
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 3.4.2
|
63
71
|
version:
|