diff --git a/lib/memcached.rb b/lib/memcached.rb index 54ceb22..985b748 100644 --- a/lib/memcached.rb +++ b/lib/memcached.rb @@ -1,5 +1,6 @@ require 'java' require 'memcached/version' +require 'memcached/exceptions' require 'target/spymemcached-ext-0.0.1.jar' class Memcached @@ -41,6 +42,9 @@ def set(key, value, ttl=@default_ttl, marshal=true, flags=FLAGS) def get(key, marshal=true) ret = @client.get(key, @simple_transcoder) + if ret.nil? + raise Memcached::NotFound + end flags, data = ret.flags, ret.data value = String.from_java_bytes data marshal ? Marshal.load(value) : value diff --git a/lib/memcached/exceptions.rb b/lib/memcached/exceptions.rb new file mode 100644 index 0000000..a9b9f16 --- /dev/null +++ b/lib/memcached/exceptions.rb @@ -0,0 +1 @@ +class Memcached::NotFound < Exception; end diff --git a/spec/memcached_spec.rb b/spec/memcached_spec.rb index 360b367..87923d6 100644 --- a/spec/memcached_spec.rb +++ b/spec/memcached_spec.rb @@ -22,13 +22,20 @@ end it "should set/get with plain text" do - @memcached.set("hello", "world") - @memcached.get("hello").should == "world" + @memcached.set "key", "value" + @memcached.get("key").should == "value" end it "should set/get with compressed text" do - @memcached.set("hello", "x\234c?P?*?/?I\001\000\b8\002a") - @memcached.get("hello").should == "x\234c?P?*?/?I\001\000\b8\002a" + @memcached.set "key", "x\234c?P?*?/?I\001\000\b8\002a" + @memcached.get("key").should == "x\234c?P?*?/?I\001\000\b8\002a" + end + + it "should set expiry" do + @memcached.set "key", "value", 1 + @memcached.get("key").should == "value" + sleep 1 + lambda { @memcached.get("key") }.should raise_error(Memcached::NotFound) end end end