Sha256: 5b5b77e3b26ed0ca2273d83d7974b9ce7a8835db9f8e83bf9966045d78ea5b19

Contents?: true

Size: 1.43 KB

Versions: 4

Compression:

Stored size: 1.43 KB

Contents

require 'daybreak'

module Moneta
  module Adapters
    # Daybreak backend
    # @api public
    class Daybreak < Adapter
      include DBMAdapter
      include IncrementSupport
      include CreateSupport
      include EachKeySupport

      # @!method initialize(options = {})
      #   @param [Hash] options
      #   @option options [String] :file Database file
      #   @option options [::Daybreak] :backend Use existing backend instance
      backend { |file:| ::Daybreak::DB.new(file, serializer: ::Daybreak::Serializer::None) }

      # (see Proxy#load)
      def load(key, options = {})
        backend.load if options[:sync]
        backend[key]
      end

      # (see Proxy#store)
      def store(key, value, options = {})
        backend[key] = value
        backend.flush if options[:sync]
        value
      end

      # (see Proxy#increment)
      def increment(key, amount = 1, options = {})
        backend.lock { super }
      end

      # (see Proxy#create)
      def create(key, value, options = {})
        backend.lock { super }
      end

      # (see Proxy#merge!)
      def merge!(pairs, options = {})
        if block_given?
          backend.lock do
            backend.update(pairs.map do |key, new_value|
              new_value = yield(key, load(key), new_value) if key?(key)
              [key, new_value]
            end)
          end
        else
          backend.update(pairs)
        end

        self
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
moneta-1.6.0 lib/moneta/adapters/daybreak.rb
moneta-1.5.2 lib/moneta/adapters/daybreak.rb
moneta-1.5.1 lib/moneta/adapters/daybreak.rb
moneta-1.5.0 lib/moneta/adapters/daybreak.rb