Object
ActiveRecord as key/value stores @api public
# File lib/moneta/adapters/activerecord.rb, line 27 def get(options) name = 'Table_' << options.inspect.gsub(/[^\w]+/) do $&.unpack('H2' * $&.bytesize).join.upcase end @table_mutex.synchronize do table = if const_defined?(name) const_get(name) else create(name, options) end @table_refcount[table] ||= 0 @table_refcount[table] += 1 table end end
@param [Hash] options @option options [String] :table ('moneta') Table name @option options [Hash] :connection ActiveRecord connection configuration
# File lib/moneta/adapters/activerecord.rb, line 82 def initialize(options = {}) @table = self.class.get(options) end
(see Proxy#clear)
# File lib/moneta/adapters/activerecord.rb, line 161 def clear(options = {}) @table.connection_pool.with_connection do @table.delete_all end self end
(see Proxy#close)
# File lib/moneta/adapters/activerecord.rb, line 169 def close self.class.release(@table) @table = nil end
(see Proxy#create)
# File lib/moneta/adapters/activerecord.rb, line 146 def create(key, value, options = {}) @table.connection_pool.with_connection do record = @table.new record.k = key record.v = value record.save true end rescue # FIXME: This catches too many errors # it should only catch a not-unique-exception false end
(see Proxy#delete)
# File lib/moneta/adapters/activerecord.rb, line 115 def delete(key, options = {}) @table.connection_pool.with_connection do if record = @table.where(:k => key).first record.destroy record.v end end end
(see Proxy#increment)
# File lib/moneta/adapters/activerecord.rb, line 125 def increment(key, amount = 1, options = {}) @table.connection_pool.with_connection do @table.transaction do if record = @table.where(:k => key).lock.first value = Utils.to_int(record.v) + amount record.v = value.to_s record.save value elsif create(key, amount.to_s, options) amount else raise 'Concurrent modification' end end end rescue tries ||= 0 (tries += 1) < 10 ? retry : raise end
(see Proxy#key?)
# File lib/moneta/adapters/activerecord.rb, line 87 def key?(key, options = {}) @table.connection_pool.with_connection do !@table.where(:k => key).empty? end end
(see Proxy#load)
# File lib/moneta/adapters/activerecord.rb, line 94 def load(key, options = {}) @table.connection_pool.with_connection do record = @table.select(:v).where(:k => key).first record && record.v end end
(see Proxy#store)
# File lib/moneta/adapters/activerecord.rb, line 102 def store(key, value, options = {}) @table.connection_pool.with_connection do record = @table.select(:k).where(:k => key).first_or_initialize record.v = value record.save value end rescue tries ||= 0 (tries += 1) < 10 ? retry : raise end
Generated with the Darkfish Rdoc Generator 2.