lib/moneta/adapters/tokyotyrant.rb in moneta-0.8.0 vs lib/moneta/adapters/tokyotyrant.rb in moneta-0.8.1
- old
+ new
@@ -12,10 +12,13 @@
# @api public
class TokyoTyrant
include Defaults
include HashAdapter
+ # error code: no record found
+ ENOREC = 7
+
supports :create, :increment
attr_reader :backend
# @param [Hash] options
# @option options [String] :host ('127.0.0.1') Server host name
@@ -27,11 +30,11 @@
if options[:backend]
@backend = options[:backend]
elsif defined?(::TokyoTyrant::RDB)
# Use ruby client
@backend = ::TokyoTyrant::RDB.new
- @backend.open(options[:host], options[:port]) or raise @backend.errmsg(@backend.ecode)
+ @backend.open(options[:host], options[:port]) or error
else
# Use native client
@backend = ::TokyoTyrant::DB.new(options[:host], options[:port])
end
@native = @backend.class.name != 'TokyoTyrant::RDB'
@@ -42,31 +45,33 @@
end
# (see Proxy#load)
def load(key, options = {})
value = @backend[key]
+ # raise if there is an error and the error is not "no record"
+ error if value.nil? && @backend.ecode != ENOREC
value && unpack(value)
end
# (see Proxy#store)
def store(key, value, options = {})
- @backend[key] = pack(value)
+ @backend.put(key, pack(value)) or error
value
end
# (see Proxy#delete)
def delete(key, options = {})
value = load(key, options)
if value
- @backend.delete(key)
+ @backend.delete(key) or error
value
end
end
# (see Proxy#increment)
def increment(key, amount = 1, options = {})
- @backend.addint(key, amount) || raise('Tried to increment non integer value')
+ @backend.addint(key, amount) or error
end
# (see Proxy#create)
def create(key, value, options = {})
if @native
@@ -110,9 +115,13 @@
# Remove nul character
value[0..-2]
else
value
end
+ end
+
+ def error
+ raise "#{@backend.class.name} error: #{@backend.errmsg}"
end
end
end
end