Sha256: 57d84e05fc73f565ad1766f8f3853c4f466cf7d84aa91eb442ea659746caade7

Contents?: true

Size: 1.59 KB

Versions: 2

Compression:

Stored size: 1.59 KB

Contents

require 'redis'
require 'uri'

module OptOut
  module Adapters
    # Adapter that persists data in a Redis set.
    #
    # Options
    #   :redis - redis connection object OR
    #   :url   - redis connection url OR
    #   :host
    #   :port
    #   :password
    #   :key_format - format string for redis key. list_id is interpolated into this option.
    #                 Default is "opt_out:%s"
    class RedisAdapter < AbstractAdapter
      def subscribe(list_id, user_id)
        redis.srem(key(list_id), user_id) and return
      end

      def unsubscribe(list_id, user_id)
        redis.sadd(key(list_id), user_id) and return
      end

      def unsubscribed?(list_id, user_id)
        redis.sismember(key(list_id), user_id)
      end

      def unsubscribers(list_id)
        redis.smembers(key(list_id))
      end

      def reset
        redis.flushdb
      end

      def key_format
        @key_format || @options[:key_format] || "opt_out:%s"
      end
      attr_writer :key_format

      # Private: returns redis client for this adapter
      def redis
        return @redis if @redis

        @redis = if @options[:redis]
          @options[:redis]
        elsif @options[:url]
          uri = URI.parse(@options[:url])
          Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
        else
          Redis.new(:host => @options[:host], :port => @options[:port], :password => @options[:password])
        end
      end

      private

      # Returns key to use for redis set add from `:key_format` option
      def key(list_id)
        key_format % list_id
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
opt_out-1.1.0 lib/opt_out/adapters/redis_adapter.rb
opt_out-1.0.0 lib/opt_out/adapters/redis_adapter.rb