Sha256: dedfbeb139da0af0ed714ebb64f696d78396651e993fe01cec048ffefe53a25d

Contents?: true

Size: 1.44 KB

Versions: 1

Compression:

Stored size: 1.44 KB

Contents

require 'dalli'

module Prefatory
  module Storage
    class MemcachedProvider
      DEFAULT_SERVER = '127.0.0.1:11211'.freeze
      DEFAULT_OPTIONS = {namespace: Prefatory.config.keys.prefix, compress: true, cache_nils: true}

      def initialize(options = nil, ttl = nil,
                     key_generator: Prefatory.config.keys.generator.new,
                     marshaler: Prefatory.config.storage.marshaler)
        @ttl = ttl
        @key_generator = key_generator
        @marshaler = marshaler
        @client = Dalli::Client.new(default_servers(options), default_options(options))
      end

      def set(key, value, ttl = nil)
        @client.set(prefix(key), @marshaler.dump(value), ttl || @ttl)
      end

      def get(key)
        value = @client.get(prefix(key))
        value ? @marshaler.load(value) : value
      end

      def delete(key)
        @client.delete(prefix(key))
      end

      def key?(key)
        v = @client.fetch(prefix(key)) {:does_not_exists}
        v != :does_not_exists
      end

      def next_key(obj = nil)
        @key_generator.key(obj)
      end

      private

      def prefix(key)
        @key_generator.prefix(key)
      end


      def default_servers(options)
        return options[:servers] if options&.fetch(:servers) {false}
        DEFAULT_SERVER
      end

      def default_options(options)
        return options.select {|key| key != :servers} if options
        DEFAULT_OPTIONS
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
prefatory-0.1.2 lib/prefatory/storage/memcached_provider.rb