Sha256: d12bdbe1ecd631a2f788d7e675c515ed6d549f5ea73ecaea69d07b074a475914

Contents?: true

Size: 1.18 KB

Versions: 6

Compression:

Stored size: 1.18 KB

Contents

module Split
  module Persistence
    class RedisAdapter
      DEFAULT_CONFIG = {:namespace => 'persistence'}.freeze

      attr_reader :redis_key

      def initialize(context, key = nil)
        if key
          @redis_key = "#{self.class.config[:namespace]}:#{key}"
        elsif lookup_by = self.class.config[:lookup_by]
          if lookup_by.respond_to?(:call)
            key_frag = lookup_by.call(context)
          else
            key_frag = context.send(lookup_by)
          end
          @redis_key = "#{self.class.config[:namespace]}:#{key_frag}"
        else
          raise "Please configure lookup_by"
        end
      end

      def [](field)
        Split.redis.hget(redis_key, field)
      end

      def []=(field, value)
        Split.redis.hset(redis_key, field, value)
      end

      def delete(field)
        Split.redis.hdel(redis_key, field)
      end

      def keys
        Split.redis.hkeys(redis_key)
      end

      def self.with_config(options={})
        self.config.merge!(options)
        self
      end

      def self.config
        @config ||= DEFAULT_CONFIG.dup
      end

      def self.reset_config!
        @config = DEFAULT_CONFIG.dup
      end

    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
split-1.3.2 lib/split/persistence/redis_adapter.rb
split-1.3.1 lib/split/persistence/redis_adapter.rb
split-1.3.0 lib/split/persistence/redis_adapter.rb
split-1.2.1 lib/split/persistence/redis_adapter.rb
split-1.2.0 lib/split/persistence/redis_adapter.rb
split-1.1.0 lib/split/persistence/redis_adapter.rb