jruby-memcache-client 1.7.0 → 1.7.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'jeweler'
4
+ gem 'rake'
5
+ gem 'rspec'
6
+ gem 'pry'
7
+ gem 'pry-nav'
data/Gemfile.lock ADDED
@@ -0,0 +1,44 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ coderay (1.0.8)
5
+ diff-lcs (1.1.3)
6
+ git (1.2.5)
7
+ jeweler (1.8.4)
8
+ bundler (~> 1.0)
9
+ git (>= 1.2.5)
10
+ rake
11
+ rdoc
12
+ json (1.7.6)
13
+ json (1.7.6-java)
14
+ method_source (0.8.1)
15
+ pry (0.9.11.4-java)
16
+ coderay (~> 1.0.5)
17
+ method_source (~> 0.8)
18
+ slop (~> 3.4)
19
+ spoon (~> 0.0)
20
+ pry-nav (0.2.3)
21
+ pry (~> 0.9.10)
22
+ rake (10.0.3)
23
+ rdoc (3.12)
24
+ json (~> 1.4)
25
+ rspec (2.12.0)
26
+ rspec-core (~> 2.12.0)
27
+ rspec-expectations (~> 2.12.0)
28
+ rspec-mocks (~> 2.12.0)
29
+ rspec-core (2.12.2)
30
+ rspec-expectations (2.12.1)
31
+ diff-lcs (~> 1.1.3)
32
+ rspec-mocks (2.12.1)
33
+ slop (3.4.3)
34
+ spoon (0.0.1)
35
+
36
+ PLATFORMS
37
+ java
38
+
39
+ DEPENDENCIES
40
+ jeweler
41
+ pry
42
+ pry-nav
43
+ rake
44
+ rspec
data/README CHANGED
@@ -26,6 +26,11 @@ You will then be able to install the JRuby Memcache Client gem:
26
26
 
27
27
  jruby -S gem install jruby-memcache-client
28
28
 
29
+ Java Requirements
30
+ -----------------
31
+
32
+ The underlying library used for this project was compiled using Java 6. You will not be able to run this gem under Java 5 out of the box. You can however clone http://github.com/gwhalin/Memcached-Java-Client and attempt to build it under Java 5 if you must. (You really should consider upgrading to Java 6 since Oracle no longer supports Java 5.)
33
+
29
34
  Replacing Rail's MemCache Client
30
35
  --------------------------------
31
36
 
data/Rakefile CHANGED
@@ -15,13 +15,16 @@ end
15
15
 
16
16
  if RUBY_PLATFORM =~ /java/i
17
17
  begin
18
- require 'spec/rake/spectask'
18
+ require 'rspec/core/rake_task'
19
19
 
20
20
  task :default => :spec
21
21
 
22
22
  desc "Run the specs for the jruby-memcache-client gem"
23
- Spec::Rake::SpecTask.new
23
+ RSpec::Core::RakeTask.new(:spec)
24
24
  rescue LoadError
25
+
26
+ require 'pry'; binding.pry
27
+
25
28
  puts "You must have rspec installed in order to run the tests."
26
29
  end
27
30
  else
data/VERSION.yml CHANGED
@@ -1,4 +1,5 @@
1
- ---
1
+ ---
2
2
  :major: 1
3
3
  :minor: 7
4
- :patch: 0
4
+ :patch: 1
5
+ :build:
@@ -1,48 +1,59 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{jruby-memcache-client}
8
- s.version = "1.7.0"
7
+ s.name = "jruby-memcache-client"
8
+ s.version = "1.7.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Abhi Yerra", "Ikai Lan", "Frederic Jean", "Lennon Day-Reynolds", "slyphon", "Brayn Helmkamp", "Travis Tilley"]
12
- s.date = %q{2010-01-21}
13
- s.description = %q{A drop in replacement for Ruby's memcache-client.}
14
- s.email = %q{fred@fredjean.net}
12
+ s.date = "2013-01-25"
13
+ s.description = "A drop in replacement for Ruby's memcache-client."
14
+ s.email = "fred@fredjean.net"
15
15
  s.extra_rdoc_files = [
16
16
  "README"
17
17
  ]
18
18
  s.files = [
19
- ".gitignore",
20
- "MIT-LICENSE",
21
- "README",
22
- "Rakefile",
23
- "VERSION.yml",
24
- "jruby-memcache-client.gemspec",
25
- "lib/java/memcached-dev_2.0.2.jar",
26
- "lib/memcache.rb",
27
- "spec/jruby_memcache_spec.rb"
28
- ]
29
- s.homepage = %q{http://github.com/ikai/jruby-memcache-client}
30
- s.rdoc_options = ["--charset=UTF-8"]
31
- s.require_paths = ["lib"]
32
- s.rubygems_version = %q{1.3.5}
33
- s.summary = %q{A drop in replacement for Ruby's memcache-client.}
34
- s.test_files = [
19
+ "Gemfile",
20
+ "Gemfile.lock",
21
+ "MIT-LICENSE",
22
+ "README",
23
+ "Rakefile",
24
+ "VERSION.yml",
25
+ "jruby-memcache-client.gemspec",
26
+ "lib/java/java_memcached-release_2.5.1.jar",
27
+ "lib/memcache.rb",
35
28
  "spec/jruby_memcache_spec.rb"
36
29
  ]
30
+ s.homepage = "http://github.com/ikai/jruby-memcache-client"
31
+ s.require_paths = ["lib"]
32
+ s.rubygems_version = "1.8.24"
33
+ s.summary = "A drop in replacement for Ruby's memcache-client."
37
34
 
38
35
  if s.respond_to? :specification_version then
39
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
40
36
  s.specification_version = 3
41
37
 
42
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
38
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
39
+ s.add_runtime_dependency(%q<jeweler>, [">= 0"])
40
+ s.add_runtime_dependency(%q<rake>, [">= 0"])
41
+ s.add_runtime_dependency(%q<rspec>, [">= 0"])
42
+ s.add_runtime_dependency(%q<pry>, [">= 0"])
43
+ s.add_runtime_dependency(%q<pry-nav>, [">= 0"])
43
44
  else
45
+ s.add_dependency(%q<jeweler>, [">= 0"])
46
+ s.add_dependency(%q<rake>, [">= 0"])
47
+ s.add_dependency(%q<rspec>, [">= 0"])
48
+ s.add_dependency(%q<pry>, [">= 0"])
49
+ s.add_dependency(%q<pry-nav>, [">= 0"])
44
50
  end
45
51
  else
52
+ s.add_dependency(%q<jeweler>, [">= 0"])
53
+ s.add_dependency(%q<rake>, [">= 0"])
54
+ s.add_dependency(%q<rspec>, [">= 0"])
55
+ s.add_dependency(%q<pry>, [">= 0"])
56
+ s.add_dependency(%q<pry-nav>, [">= 0"])
46
57
  end
47
58
  end
48
59
 
data/lib/memcache.rb CHANGED
@@ -1,14 +1,14 @@
1
1
  require 'java'
2
2
  require 'base64'
3
3
 
4
- require File.dirname(__FILE__) + '/java/memcached-dev_2.0.2.jar'
4
+ require File.dirname(__FILE__) + '/java/java_memcached-release_2.5.1.jar'
5
5
 
6
6
  class MemCache
7
- include_class 'com.meetup.memcached.MemcachedClient'
8
- include_class 'com.meetup.memcached.SockIOPool'
9
- include_class 'com.meetup.memcached.Logger'
7
+ java_import 'com.danga.MemCached.MemCachedClient'
8
+ java_import 'com.danga.MemCached.SockIOPool'
9
+ java_import 'com.danga.MemCached.Logger'
10
10
 
11
- VERSION = '1.7.0'
11
+ VERSION = '1.7.1'
12
12
 
13
13
  ##
14
14
  # Default options for the cache object.
@@ -85,13 +85,22 @@ class MemCache
85
85
  raise ArgumentError, "wrong number of arguments (#{args.length} for 2)"
86
86
  end
87
87
 
88
+ # Normalizing the server(s) so they all have a port number.
89
+
90
+ @servers = @servers.map do |server|
91
+ server =~ /(.+):(\d+)/ ? server : "#{server}:#{DEFAULT_PORT}"
92
+ end
93
+
94
+ Logger.getLogger('com.meetup.memcached.MemcachedClient').setLevel(opts[:log_level])
95
+ Logger.getLogger('com.meetup.memcached.SockIOPool').setLevel(opts[:log_level])
96
+
88
97
  opts = DEFAULT_OPTIONS.merge opts
89
98
 
90
99
  @namespace = opts[:namespace] || opts["namespace"]
91
100
  @pool_name = opts[:pool_name] || opts["pool_name"]
92
101
  @readonly = opts[:readonly] || opts["readonly"]
93
102
 
94
- @client = MemcachedClient.new(@pool_name)
103
+ @client = MemCachedClient.new(@pool_name)
95
104
 
96
105
  @client.error_handler = opts[:error_handler] if opts[:error_handler]
97
106
  @client.primitiveAsString = true
@@ -119,17 +128,25 @@ class MemCache
119
128
  @pool.aliveCheck = opts[:pool_use_alive]
120
129
  @pool.nagle = opts[:pool_use_nagle]
121
130
 
131
+ # public static final int NATIVE_HASH = 0;
132
+ # // native String.hashCode();
133
+ # public static final int OLD_COMPAT_HASH = 1;
134
+ # // original compatibility hashing algorithm (works with other clients)
135
+ # public static final int NEW_COMPAT_HASH = 2;
136
+ # // new CRC32 based compatibility hashing algorithm (works with other clients)
137
+ # public static final int CONSISTENT_HASH = 3;
138
+ # // MD5 Based -- Stops thrashing when a server added or removed
139
+ @pool.hashingAlg = opts[:pool_hashing_algorithm]
140
+
122
141
  # __method methods have been removed in jruby 1.5
123
- @pool.java_send :initialize rescue @pool.initialize__method
142
+ @pool.java_send :initialize rescue @pool.initialize__method
124
143
  end
125
144
 
126
- Logger.getLogger('com.meetup.memcached.MemcachedClient').setLevel(opts[:log_level])
127
- Logger.getLogger('com.meetup.memcached.SockIOPool').setLevel(opts[:log_level])
128
145
  end
129
146
 
130
147
  def reset
131
148
  @pool.shut_down
132
- @pool.java_send :initialize rescue @pool.initialize__method
149
+ @pool.java_send :initialize rescue @pool.initialize__method
133
150
  end
134
151
 
135
152
  ##
@@ -163,9 +180,17 @@ class MemCache
163
180
  value = @client.get(make_cache_key(key))
164
181
  return nil if value.nil?
165
182
  unless raw
166
- marshal_bytes = java.lang.String.new(value).getBytes(MARSHALLING_CHARSET)
167
- decoded = Base64.decode64(String.from_java_bytes(marshal_bytes))
168
- value = Marshal.load(decoded)
183
+ begin
184
+ marshal_bytes = java.lang.String.new(value).getBytes(MARSHALLING_CHARSET)
185
+ decoded = Base64.decode64(String.from_java_bytes(marshal_bytes))
186
+ value = Marshal.load(decoded)
187
+ rescue
188
+ value = case value
189
+ when /^\d+\.\d+$/ then value.to_f
190
+ when /^\d+$/ then value.to_i
191
+ else value
192
+ end
193
+ end
169
194
  end
170
195
  value
171
196
  end
@@ -183,9 +208,17 @@ class MemCache
183
208
  k,v = kv
184
209
  next if v.nil?
185
210
  unless raw
186
- marshal_bytes = java.lang.String.new(v).getBytes(MARSHALLING_CHARSET)
187
- decoded = Base64.decode64(String.from_java_bytes(marshal_bytes))
188
- v = Marshal.load(decoded)
211
+ begin
212
+ marshal_bytes = java.lang.String.new(v).getBytes(MARSHALLING_CHARSET)
213
+ decoded = Base64.decode64(String.from_java_bytes(marshal_bytes))
214
+ v = Marshal.load(decoded)
215
+ rescue
216
+ v = case v
217
+ when /^\d+\.\d+$/ then v.to_f
218
+ when /^\d+$/ then v.to_i
219
+ else v
220
+ end
221
+ end
189
222
  end
190
223
  values[k] = v
191
224
  }
@@ -250,20 +283,18 @@ class MemCache
250
283
  # Increments the value associated with the key by a certain amount.
251
284
  def incr(key, amount = 1)
252
285
  raise MemCacheError, "Update of readonly cache" if @readonly
253
- value = get(key) || 0
254
- value += amount
255
- set key, value
256
- value
286
+ value = @client.incr(make_cache_key(key), amount)
287
+ return nil if value == "NOT_FOUND\r\n"
288
+ return value.to_i
257
289
  end
258
290
 
259
291
  ##
260
292
  # Decrements the value associated with the key by a certain amount.
261
293
  def decr(key, amount = 1)
262
294
  raise MemCacheError, "Update of readonly cache" if @readonly
263
- value = get(key) || 0
264
- value -= amount
265
- set key, value
266
- value
295
+ value = @client.decr(make_cache_key(key),amount)
296
+ return nil if value == "NOT_FOUND\r\n"
297
+ return value.to_i
267
298
  end
268
299
 
269
300
  ##
@@ -305,6 +336,7 @@ class MemCache
305
336
  end
306
337
 
307
338
  def marshal_value(value)
339
+ return value if value.kind_of?(Numeric)
308
340
  encoded = Base64.encode64(Marshal.dump(value))
309
341
  marshal_bytes = encoded.to_java_bytes
310
342
  java.lang.String.new(marshal_bytes, MARSHALLING_CHARSET)
@@ -2,266 +2,270 @@ require 'java'
2
2
  require File.dirname(__FILE__) + '/../lib/memcache'
3
3
 
4
4
  describe MemCache do
5
- before :all do
6
- @server = "127.0.0.1:11211"
7
- @client = MemCache.new @server
8
- end
9
-
10
- before :each do
11
- @client.flush_all
12
- end
13
- after :each do
14
- @client.flush_all
15
- end
16
-
17
- it "should return nil for a non-existent key" do
18
- @client.get('non-existent-key').should be_nil
19
- end
20
-
21
- describe "setting servers" do
22
- it "should work if the instance is created with a single String argument" do
23
- @client = MemCache.new @server
24
- @client.servers.should == [@server]
25
- end
26
-
27
- it "should work if the instance is created with an Array" do
28
- @client = MemCache.new [ @server ]
29
- @client.servers.should == [ @server ]
30
- end
31
-
32
- it "should work if the instance is created with a Hash" do
33
- @client = MemCache.new [ @server ], :namespace => 'test'
34
- @client.servers.should == [ @server ]
35
- end
36
-
37
- it "should work with an explicit pool name" do
38
- @client = MemCache.new([@server], :pool_name => 'new_pool')
39
- @client.pool_name.should == 'new_pool'
40
- end
41
-
42
- it "should work with an error handler" do
43
- include_class 'com.meetup.memcached.MemcachedClient'
44
- java_memcache_client = mock.as_null_object
45
- MemcachedClient.stub!(:new => java_memcache_client)
46
- error_handler = Object.new
47
- java_memcache_client.should_receive(:error_handler=).with(error_handler)
48
- @client = MemCache.new([@server], :error_handler => error_handler)
49
- end
50
- end
51
-
52
- describe "namespacing" do
53
- before(:each) do
54
- @ns = 'namespace'
55
- @nsclient = MemCache.new [ @server ] , :namespace => @ns
56
- @nsclient.flush_all
57
- @nsclient.set "test", 333, 0
58
- end
59
-
60
- it "should set and get values transparently" do
61
- @nsclient.get("test").to_i.should == 333
62
- end
63
-
64
- it "should set values to the given namespace" do
65
- @client.get("#{@ns}:test").to_i.should == 333
66
- end
67
-
68
- it "should not set a value without the given namespace" do
69
- @client.get("test").to_i.should_not == 333
70
- end
71
-
72
- it "should delete values in the given namespace" do
73
- @nsclient.delete "test"
74
- @nsclient.get("test").should be_nil
75
- end
76
-
77
- it "should increment in the given namespace" do
78
- @nsclient.incr("test").to_i.should == 334
79
- end
80
-
81
- it "should decrement values in the given namespace" do
82
- @nsclient.decr("test").should == 332
83
- end
84
- end
85
-
86
- describe "after setting a value to MemCache" do
87
- before(:each) do
88
- @client.set 'key', 'value'
89
- end
90
-
91
- it "should be able to retrieve the value" do
92
- @client.get('key').should == 'value'
93
- end
94
-
95
- it "should not be able to retrieve the value after deleting" do
96
- @client.delete('key')
97
- @client.get('key').should be_nil
98
- end
99
-
100
- it "should not be able to retrieve the value after flushing everything" do
101
- @client.flush_all
102
- @client.get("key").should be_nil
103
- end
104
-
105
- it "should work exactly the same if the []= operator were used" do
106
- @client['key'] = 'val'
107
- @client.get('key').should == 'val'
108
- end
109
- end
110
5
 
111
- describe "replacing values from the cache." do
112
- before :each do
113
- @client['key'] = 'value'
114
- end
6
+ hostname = `hostname`.strip
115
7
 
116
- it "should be able to replace the stored value." do
117
- @client.replace('key', 'new value').should be_true
118
- @client['key'].should == 'new value'
8
+ ["127.0.0.1:11211", "127.0.0.1", "localhost:11211", "localhost"].each do |server|
9
+ before :all do
10
+ @server = server
11
+ @normalized_server = @server =~ /(.+):(\d+)/ ? @server : "#{@server}:11211"
119
12
  end
120
13
 
121
- it "should not replace values that are not in the cache." do
122
- @client.replace('notthere', 'value').should be_false
123
- end
124
- end
125
-
126
- describe "using the Hash notation" do
127
14
  before :each do
128
- @client['key'] = 'value'
129
- end
130
-
131
- it "should be able to retrieve the value using []" do
132
- @client['key'].should == 'value'
133
- end
134
-
135
- it "should be able to retrieve the value using get" do
136
- @client.get('key').should == 'value'
15
+ @client = MemCache.new @server
16
+ @client.should_not be_nil
17
+ @client.flush_all
137
18
  end
138
- end
139
19
 
140
- describe "#stats" do
141
- it "should return a hash" do
142
- @client.stats.should be_instance_of(Hash)
20
+ after :each do
21
+ @client.flush_all
143
22
  end
144
23
 
145
- # it "should return 0 for curr_items" do
146
- # @client.stats[@server]['curr_items'].should == 0
147
- # end
24
+ it "should return nil for a non-existent key" do
25
+ @client.get('non-existent-key').should be_nil
26
+ end
148
27
 
149
- it "should return a float for rusage_system and rusage_user" do
150
- @client.stats[@server]['rusage_system'].should be_instance_of(Float)
151
- @client.stats[@server]['rusage_user'].should be_instance_of(Float)
152
- end
28
+ describe "setting servers" do
29
+ it "should work if the instance is created with a single String argument" do
30
+ @client = MemCache.new @server
31
+ @client.servers.should == [@normalized_server]
32
+ end
153
33
 
154
- it "should return a String for version" do
155
- @client.stats[@server]['version'].should be_instance_of(String)
156
- end
34
+ it "should work if the instance is created with an Array" do
35
+ @client = MemCache.new [ @server ]
36
+ @client.servers.should == [@normalized_server]
37
+ end
157
38
 
158
- end
39
+ it "should work if the instance is created with a Hash" do
40
+ @client = MemCache.new [ @server ], :namespace => 'test'
41
+ @client.servers.should == [@normalized_server]
42
+ end
159
43
 
160
- describe "#incr" do
44
+ it "should work with an explicit pool name" do
45
+ @client = MemCache.new([@server], :pool_name => 'new_pool')
46
+ @client.pool_name.should == 'new_pool'
47
+ end
161
48
 
162
- it "should increment a value by 1 without a second parameter" do
163
- @client.set 'incr', 100, 0
164
- @client.incr 'incr'
165
- @client.get('incr').to_i.should == 101
49
+ it "should work with an error handler" do
50
+ java_import 'com.danga.MemCached.MemCachedClient'
51
+ java_memcache_client = mock.as_null_object
52
+ MemCachedClient.stub!(:new => java_memcache_client)
53
+ error_handler = Object.new
54
+ java_memcache_client.should_receive(:error_handler=).with(error_handler)
55
+ @client = MemCache.new([@server], :error_handler => error_handler)
56
+ end
166
57
  end
167
58
 
168
- it "should increment a value by a given second parameter" do
169
- @client.set 'incr', 100, 0
170
- @client.incr 'incr', 20
171
- @client.get('incr').to_i.should == 120
172
- end
173
- end
174
-
175
- describe "#decr" do
59
+ describe "namespacing" do
60
+ before(:each) do
61
+ @ns = 'namespace'
62
+ @nsclient = MemCache.new [ @server ] , :namespace => @ns
63
+ @nsclient.flush_all
64
+ @nsclient.set "test", 333, 0
65
+ end
176
66
 
177
- it "should decrement a value by 1 without a second parameter" do
178
- @client.set 'decr', 100, 0
179
- @client.decr 'decr'
180
- @client.get('decr').to_i.should == 99
181
- end
182
-
183
- it "should decrement a value by a given second parameter" do
184
- @client.set 'decr', 100, 0
185
- @client.decr 'decr', 20
186
- @client.get('decr').to_i.should == 80
187
- end
188
- end
67
+ it "should set and get values transparently" do
68
+ @nsclient.get("test").should == 333
69
+ end
189
70
 
190
- describe "with Ruby Objects" do
191
- it "should be able to transparently set and get equivalent Ruby objects" do
192
- obj = { :test => :hi }
193
- @client.set('obj', obj)
194
- @client.get('obj').should == obj
195
- end
71
+ it "should set values to the given namespace" do
72
+ @nsclient.get("test").to_i.should == 333
73
+ end
196
74
 
197
- it %[should work with those whose marshalled stream contains invalid UTF8 byte sequences] do
198
- # this test fails w/o the Base64 encoding step
199
- obj = { :foo => 900 }
200
- @client.set('obj', obj)
201
- @client.get('obj').should == obj
202
- end
75
+ it "should not set a value without the given namespace" do
76
+ @client.get("test").to_i.should_not == 333
77
+ end
203
78
 
204
- it %[should work with binary blobs] do
205
- # this test fails w/o the Base64 encoding step
206
- blob = "\377\330\377\340\000\020JFIF\000\001\001\000\000\001\000\001\000\000\377"
207
- @client.set('blob', blob)
208
- @client.get('blob').should == blob
209
- end
210
- end
79
+ it "should delete values in the given namespace" do
80
+ @nsclient.delete "test"
81
+ @nsclient.get("test").should be_nil
82
+ end
211
83
 
212
- describe "using set with an expiration" do
213
- it "should make a value unretrievable if the expiry is set to a negative value" do
214
- @client.set('key', 'val', -1)
215
- @client.get('key').should be_nil
216
- end
84
+ it "should increment in the given namespace" do
85
+ @nsclient.incr("test").to_i.should == 334
86
+ end
217
87
 
218
- it "should make a value retrievable for only the amount of time if a value is given" do
219
- @client.set('key', 'val', 2)
220
- @client.get('key').should == 'val'
221
- sleep(3)
222
- @client.get('key').should be_nil
88
+ it "should decrement values in the given namespace" do
89
+ @nsclient.decr("test").should == 332
90
+ end
223
91
  end
224
- end
225
92
 
226
- describe "#get_multi" do
227
- it "should get 2 keys" do
228
- @client.set('key', 'val')
229
- @client.set('key2', 'val2')
230
- @client.get_multi(%w/key key2/).should == {'key' => 'val', 'key2' => 'val2'}
231
- end
93
+ describe "after setting a value to MemCache" do
94
+ before(:each) do
95
+ @client.set 'key', 'value'
96
+ end
232
97
 
233
- it "should ignore nil values" do
234
- @client.set('key', 'val')
235
- @client.set('key2', 'val2')
236
- @client.get_multi(%w/key key2 key3/).should == {'key' => 'val', 'key2' => 'val2'}
237
- end
98
+ it "should be able to retrieve the value" do
99
+ @client.get('key').should == 'value'
100
+ end
238
101
 
239
- it "should not marshall if requested" do
240
- @client.set('key', 'val', 0, true)
241
- @client.set('key2', 'val2', 0, true)
242
- @client.get_multi(%w/key key2/, true).should == {'key' => 'val', 'key2' => 'val2'}
243
- end
244
- end
102
+ it "should not be able to retrieve the value after deleting" do
103
+ @client.delete('key')
104
+ @client.get('key').should be_nil
105
+ end
245
106
 
246
- describe "aliveness of the MemCache server." do
247
- before :each do
248
- @servers = ["localhost:11211", "localhost:11212", {:pool_name => "test"}]
249
- @client = MemCache.new @servers
250
- @client.flush_all
251
- end
107
+ it "should not be able to retrieve the value after flushing everything" do
108
+ @client.flush_all
109
+ @client.get("key").should be_nil
110
+ end
252
111
 
253
- it "should report the client as being alive." do
254
- @client.should be_alive
112
+ it "should work exactly the same if the []= operator were used" do
113
+ @client['key'] = 'val'
114
+ @client.get('key').should == 'val'
115
+ end
255
116
  end
256
117
 
257
- it "should report localhost:11211 as being alive." do
258
- servers = @client.servers
259
- servers.first.should be_alive
260
- end
118
+ describe "replacing values from the cache." do
119
+ before :each do
120
+ @client['key'] = 'value'
121
+ end
261
122
 
262
- it "should report localhost:11212 as not being alive." do
263
- servers = @client.servers
264
- servers.find {|s| s.to_s == "localhost:11212"}.should be_nil
123
+ it "should be able to replace the stored value." do
124
+ @client.replace('key', 'new value').should be_true
125
+ @client['key'].should == 'new value'
126
+ end
127
+
128
+ it "should not replace values that are not in the cache." do
129
+ @client.replace('notthere', 'value').should be_false
130
+ end
131
+ end
132
+
133
+ describe "using the Hash notation" do
134
+ before :each do
135
+ @client['key'] = 'value'
136
+ end
137
+
138
+ it "should be able to retrieve the value using []" do
139
+ @client['key'].should == 'value'
140
+ end
141
+
142
+ it "should be able to retrieve the value using get" do
143
+ @client.get('key').should == 'value'
144
+ end
145
+ end
146
+
147
+ describe "#stats" do
148
+ it "should return a hash" do
149
+ @client.stats.should be_instance_of(Hash)
150
+ end
151
+
152
+ it "should return a float for rusage_system and rusage_user" do
153
+ @client.stats[@normalized_server]['rusage_system'].should be_instance_of(Float)
154
+ @client.stats[@normalized_server]['rusage_user'].should be_instance_of(Float)
155
+ end
156
+
157
+ it "should return a String for version" do
158
+ @client.stats[@normalized_server]['version'].should be_instance_of(String)
159
+ end
160
+
161
+ end
162
+
163
+ describe "#incr" do
164
+
165
+ it "should increment a value by 1 without a second parameter" do
166
+ @client.set 'incr', 100, 0
167
+ @client.incr 'incr'
168
+ @client.get('incr').to_i.should == 101
169
+ end
170
+
171
+ it "should increment a value by a given second parameter" do
172
+ @client.set 'incr', 100, 0
173
+ @client.incr 'incr', 20
174
+ @client.get('incr').to_i.should == 120
175
+ end
176
+ end
177
+
178
+ describe "#decr" do
179
+
180
+ it "should decrement a value by 1 without a second parameter" do
181
+ @client.set 'decr', 100, 0
182
+ @client.decr 'decr'
183
+ @client.get('decr').to_i.should == 99
184
+ end
185
+
186
+ it "should decrement a value by a given second parameter" do
187
+ @client.set 'decr', 100, 0
188
+ @client.decr 'decr', 20
189
+ @client.get('decr').to_i.should == 80
190
+ end
191
+ end
192
+
193
+ describe "with Ruby Objects" do
194
+ it "should be able to transparently set and get equivalent Ruby objects" do
195
+ obj = { :test => :hi }
196
+ @client.set('obj', obj)
197
+ @client.get('obj').should == obj
198
+ end
199
+
200
+ it %[should work with those whose marshalled stream contains invalid UTF8 byte sequences] do
201
+ # this test fails w/o the Base64 encoding step
202
+ obj = { :foo => 900 }
203
+ @client.set('obj', obj)
204
+ @client.get('obj').should == obj
205
+ end
206
+
207
+ it %[should work with binary blobs] do
208
+ # this test fails w/o the Base64 encoding step
209
+ blob = "\377\330\377\340\000\020JFIF\000\001\001\000\000\001\000\001\000\000\377"
210
+ @client.set('blob', blob)
211
+ @client.get('blob').should == blob
212
+ end
213
+ end
214
+
215
+ describe "using set with an expiration" do
216
+ it "should make a value unretrievable if the expiry is set to a negative value" do
217
+ @client.set('key', 'val', -1)
218
+ @client.get('key').should be_nil
219
+ end
220
+
221
+ it "should make a value retrievable for only the amount of time if a value is given" do
222
+ @client.set('key', 'val', 2)
223
+ @client.get('key').should == 'val'
224
+ sleep(3)
225
+ @client.get('key').should be_nil
226
+ end
227
+ end
228
+
229
+ describe "#get_multi" do
230
+ it "should get 2 keys" do
231
+ @client.set('key', 'val')
232
+ @client.set('key2', 'val2')
233
+ @client.get_multi(%w/key key2/).should == {'key' => 'val', 'key2' => 'val2'}
234
+ end
235
+
236
+ it "should ignore nil values" do
237
+ @client.set('key', 'val')
238
+ @client.set('key2', 'val2')
239
+ @client.get_multi(%w/key key2 key3/).should == {'key' => 'val', 'key2' => 'val2'}
240
+ end
241
+
242
+ it "should not marshall if requested" do
243
+ @client.set('key', 'val', 0, true)
244
+ @client.set('key2', 'val2', 0, true)
245
+ @client.get_multi(%w/key key2/, true).should == {'key' => 'val', 'key2' => 'val2'}
246
+ end
247
+ end
248
+
249
+ describe "aliveness of the MemCache server." do
250
+ before :each do
251
+ @servers = ["localhost:11211", "localhost:11212", {:pool_name => "test"}]
252
+ @client = MemCache.new @servers
253
+ @client.flush_all
254
+ end
255
+
256
+ it "should report the client as being alive." do
257
+ @client.should be_alive
258
+ end
259
+
260
+ it "should report localhost:11211 as being alive." do
261
+ servers = @client.servers
262
+ servers.first.should be_alive
263
+ end
264
+
265
+ it "should report localhost:11212 as not being alive." do
266
+ servers = @client.servers
267
+ servers.find {|s| s.to_s == "localhost:11212"}.should be_nil
268
+ end
265
269
  end
266
270
  end
267
271
  end
metadata CHANGED
@@ -1,9 +1,10 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: jruby-memcache-client
3
- version: !ruby/object:Gem::Version
4
- version: 1.7.0
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 1.7.1
5
6
  platform: ruby
6
- authors:
7
+ authors:
7
8
  - Abhi Yerra
8
9
  - Ikai Lan
9
10
  - Frederic Jean
@@ -11,59 +12,145 @@ authors:
11
12
  - slyphon
12
13
  - Brayn Helmkamp
13
14
  - Travis Tilley
14
- autorequire:
15
+ autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
-
18
- date: 2010-01-21 00:00:00 -07:00
19
- default_executable:
20
- dependencies: []
21
-
18
+ date: 2013-01-25 00:00:00.000000000 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: jeweler
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: !binary |-
27
+ MA==
28
+ none: false
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: !binary |-
34
+ MA==
35
+ none: false
36
+ prerelease: false
37
+ type: :runtime
38
+ - !ruby/object:Gem::Dependency
39
+ name: rake
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: !binary |-
45
+ MA==
46
+ none: false
47
+ requirement: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: !binary |-
52
+ MA==
53
+ none: false
54
+ prerelease: false
55
+ type: :runtime
56
+ - !ruby/object:Gem::Dependency
57
+ name: rspec
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: !binary |-
63
+ MA==
64
+ none: false
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: !binary |-
70
+ MA==
71
+ none: false
72
+ prerelease: false
73
+ type: :runtime
74
+ - !ruby/object:Gem::Dependency
75
+ name: pry
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: !binary |-
81
+ MA==
82
+ none: false
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: !binary |-
88
+ MA==
89
+ none: false
90
+ prerelease: false
91
+ type: :runtime
92
+ - !ruby/object:Gem::Dependency
93
+ name: pry-nav
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: !binary |-
99
+ MA==
100
+ none: false
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ! '>='
104
+ - !ruby/object:Gem::Version
105
+ version: !binary |-
106
+ MA==
107
+ none: false
108
+ prerelease: false
109
+ type: :runtime
22
110
  description: A drop in replacement for Ruby's memcache-client.
23
111
  email: fred@fredjean.net
24
112
  executables: []
25
-
26
113
  extensions: []
27
-
28
- extra_rdoc_files:
114
+ extra_rdoc_files:
29
115
  - README
30
- files:
31
- - .gitignore
116
+ files:
117
+ - Gemfile
118
+ - Gemfile.lock
32
119
  - MIT-LICENSE
33
120
  - README
34
121
  - Rakefile
35
122
  - VERSION.yml
36
123
  - jruby-memcache-client.gemspec
37
- - lib/java/memcached-dev_2.0.2.jar
124
+ - lib/java/java_memcached-release_2.5.1.jar
38
125
  - lib/memcache.rb
39
126
  - spec/jruby_memcache_spec.rb
40
- has_rdoc: true
41
127
  homepage: http://github.com/ikai/jruby-memcache-client
42
128
  licenses: []
43
-
44
- post_install_message:
45
- rdoc_options:
46
- - --charset=UTF-8
47
- require_paths:
129
+ post_install_message:
130
+ rdoc_options: []
131
+ require_paths:
48
132
  - lib
49
- required_ruby_version: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - ">="
52
- - !ruby/object:Gem::Version
53
- version: "0"
54
- version:
55
- required_rubygems_version: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- version: "0"
60
- version:
133
+ required_ruby_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ! '>='
136
+ - !ruby/object:Gem::Version
137
+ segments:
138
+ - 0
139
+ hash: 2
140
+ version: !binary |-
141
+ MA==
142
+ none: false
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: !binary |-
148
+ MA==
149
+ none: false
61
150
  requirements: []
62
-
63
- rubyforge_project:
64
- rubygems_version: 1.3.5
65
- signing_key:
151
+ rubyforge_project:
152
+ rubygems_version: 1.8.24
153
+ signing_key:
66
154
  specification_version: 3
67
155
  summary: A drop in replacement for Ruby's memcache-client.
68
- test_files:
69
- - spec/jruby_memcache_spec.rb
156
+ test_files: []
data/.gitignore DELETED
@@ -1,7 +0,0 @@
1
- .DS_Store
2
- nbproject/private
3
- *.swp
4
- *.orig
5
- pkg
6
- *.gem
7
-
Binary file