class Moneta::Adapters::PStore

PStore backend @api public

Public Class Methods

new(options = {}) click to toggle source

@param [Hash] options @option options [String] :file PStore file @option options [Boolean] :threadsafe Makes the PStore thread-safe @option options [::PStore] :backend Use existing backend instance

Calls superclass method Moneta::Adapter::new
# File lib/moneta/adapters/pstore.rb, line 22
def initialize(options = {})
  super
  @id = "Moneta::Adapters::PStore(#{object_id})"
end

Public Instance Methods

clear(options = {}) click to toggle source

(see Proxy#clear)

# File lib/moneta/adapters/pstore.rb, line 80
def clear(options = {})
  transaction do
    backend.roots.each do |key|
      backend.delete(key)
    end
  end
  self
end
create(key, value, options = {}) click to toggle source

(see Proxy#create)

# File lib/moneta/adapters/pstore.rb, line 68
def create(key, value, options = {})
  transaction do
    if backend.root?(key)
      false
    else
      backend[key] = value
      true
    end
  end
end
delete(key, options = {}) click to toggle source

(see Proxy#delete)

# File lib/moneta/adapters/pstore.rb, line 53
def delete(key, options = {})
  transaction { backend.delete(key) }
end
each_key() { |k| ... } click to toggle source

(see Proxy#each_key)

# File lib/moneta/adapters/pstore.rb, line 33
def each_key(&block)
  return enum_for(:each_key) { transaction(true) { backend.roots.size } } unless block_given?

  transaction(true) do
    backend.roots.each { |k| yield(k) }
  end
  self
end
fetch_values(*keys, **options) click to toggle source
Calls superclass method Moneta::NilValues#fetch_values
# File lib/moneta/adapters/pstore.rb, line 94
def fetch_values(*keys, **options)
  transaction(true) { super }
end
increment(key, amount = 1, options = {}) click to toggle source

(see Proxy#increment)

# File lib/moneta/adapters/pstore.rb, line 58
def increment(key, amount = 1, options = {})
  transaction do
    existing = backend[key]
    value = (existing == nil ? 0 : Integer(existing)) + amount
    backend[key] = value.to_s
    value
  end
end
key?(key, options = {}) click to toggle source

(see Proxy#key?)

# File lib/moneta/adapters/pstore.rb, line 28
def key?(key, options = {})
  transaction(true) { backend.root?(key) }
end
load(key, options = {}) click to toggle source

(see Proxy#load)

# File lib/moneta/adapters/pstore.rb, line 43
def load(key, options = {})
  transaction(true) { backend[key] }
end
merge!(pairs, options = {}) click to toggle source
Calls superclass method Moneta::NilValues#merge!
# File lib/moneta/adapters/pstore.rb, line 102
def merge!(pairs, options = {})
  transaction { super }
end
slice(*keys, **options) click to toggle source
Calls superclass method Moneta::NilValues#slice
# File lib/moneta/adapters/pstore.rb, line 98
def slice(*keys, **options)
  transaction(true) { super }
end
store(key, value, options = {}) click to toggle source

(see Proxy#store)

# File lib/moneta/adapters/pstore.rb, line 48
def store(key, value, options = {})
  transaction { backend[key] = value }
end
values_at(*keys, **options) click to toggle source

(see Proxy#values_at)

Calls superclass method Moneta::Defaults#values_at
# File lib/moneta/adapters/pstore.rb, line 90
def values_at(*keys, **options)
  transaction(true) { super }
end

Protected Instance Methods

transaction(read_only = false) { || ... } click to toggle source
# File lib/moneta/adapters/pstore.rb, line 110
def transaction(read_only = false)
  case Thread.current[@id]
  when read_only, false
    yield
  when true
    raise TransactionError, "Attempt to start read-write transaction inside a read-only transaction"
  else
    begin
      Thread.current[@id] = read_only
      backend.transaction(read_only) { yield }
    ensure
      Thread.current[@id] = nil
    end
  end
end