Sha256: 0ad4af5f3626a81c5b68ae0120cf73b875392632ac4ed93651bde9b8191b4864

Contents?: true

Size: 1.4 KB

Versions: 1

Compression:

Stored size: 1.4 KB

Contents

module Abaci
  require "redis"

  # Common interface for Redis. In the future this could be
  # swapped out for an alternate datastore.
  class Store
    attr_reader :prefix, :redis

    def initialize(options)
      @redis = options[:redis] || Redis.current
      @prefix = options[:prefix] || "stats"
    end

    def decrby(key, by = 1)
      exec(:decrby, key, by)
    end

    def del(key)
      exec(:del, key)
    end

    def get(key)
      exec(:get, key)
    end

    def incrby(key, by = 1)
      exec(:incrby, key, by)
    end

    def keys(pattern = "*")
      sub = Regexp.new("^#{ prefix }:")
      exec(:keys, pattern).map { |k| k.gsub(sub, "") }
    end

    def set(key, value)
      exec(:set, key, value)
    end

    def sadd(key, member)
      exec_without_prefix(:sadd, "#{ prefix }#{ key }", member)
    end

    def smembers(key)
      exec_without_prefix(:smembers, "#{ prefix }#{ key }")
    end

    def srem(key, member)
      exec_without_prefix(:srem, "#{ prefix }#{ key }", member)
    end

    private

    def exec(command, key, *args)
      if @redis and @redis.respond_to?(command)
        @redis.send(command, prefixed_key(key), *args)
      end
    end

    def exec_without_prefix(command, key, *args)
      if @redis and @redis.respond_to?(command)
        @redis.send(command, key, *args)
      end
    end

    def prefixed_key(key)
      [ prefix, key ].compact.join(":")
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
abaci-0.3.0 lib/abaci/store.rb