Object
Sequel backend @api public
Sequel::UniqueConstraintViolation is defined since sequel 3.44.0 older versions raise a Sequel::DatabaseError.
@param [Hash] options @option options [String] :db Sequel database @option options [String/Symbol] :table (:moneta) Table name @option options All other options passed to `Sequel#connect` @option options [Sequel connection] :backend Use existing backend instance
# File lib/moneta/adapters/sequel.rb, line 22 def initialize(options = {}) table = (options.delete(:table) || :moneta).to_sym @backend = options[:backend] || begin raise ArgumentError, 'Option :db is required' unless db = options.delete(:db) ::Sequel.connect(db, options) end @backend.create_table?(table) do String :k, :null => false, :primary_key => true Blob :v end @table = @backend[table] end
(see Proxy#clear)
# File lib/moneta/adapters/sequel.rb, line 96 def clear(options = {}) @table.delete self end
(see Proxy#close)
# File lib/moneta/adapters/sequel.rb, line 102 def close @backend.disconnect nil end
(see Proxy#store)
# File lib/moneta/adapters/sequel.rb, line 61 def create(key, value, options = {}) @table.insert(:k => key, :v => value) true rescue UniqueConstraintViolation false end
(see Proxy#delete)
# File lib/moneta/adapters/sequel.rb, line 88 def delete(key, options = {}) if value = load(key, options) @table.filter(:k => key).delete value end end
(see Proxy#increment)
# File lib/moneta/adapters/sequel.rb, line 69 def increment(key, amount = 1, options = {}) @backend.transaction do locked_table = @table.for_update if record = locked_table[:k => key] value = Utils.to_int(record[:v]) + amount locked_table.where(:k => key).update(:v => value.to_s) value else locked_table.insert(:k => key, :v => amount.to_s) amount end end rescue ::Sequel::DatabaseError # Concurrent modification might throw a bunch of different errors tries ||= 0 (tries += 1) < 10 ? retry : raise end
(see Proxy#key?)
# File lib/moneta/adapters/sequel.rb, line 37 def key?(key, options = {}) @table[:k => key] != nil end
(see Proxy#load)
# File lib/moneta/adapters/sequel.rb, line 42 def load(key, options = {}) record = @table[:k => key] record && record[:v] end
(see Proxy#store)
# File lib/moneta/adapters/sequel.rb, line 48 def store(key, value, options = {}) begin @table.insert(:k => key, :v => value) rescue UniqueConstraintViolation @table.where(:k => key).update(:v => value) end value rescue ::Sequel::DatabaseError tries ||= 0 (tries += 1) < 10 ? retry : raise end
Generated with the Darkfish Rdoc Generator 2.