Sha256: 8d74d6663f10f341468ec928fda054ccd5bb069c985c119e373a652d47779070

Contents?: true

Size: 862 Bytes

Versions: 1

Compression:

Stored size: 862 Bytes

Contents

require 'set'

module OptOut
  module Adapters
    # Adapter that stores persists data in memory in a hash.
    #
    # Options
    #   :store - optional Hash instance to store unsubscriptions
    class MemoryAdapter < AbstractAdapter
      # Subscribe `user_id` to `list_id`. Returns nothing.
      def subscribe(list_id, user_id)
        store.fetch(list_id, {}).delete(user_id) and return
      end

      def unsubscribe(list_id, user_id)
        store[list_id] ||= Set.new
        store[list_id] << user_id
        nil
      end

      def unsubscribed?(list_id, user_id)
        (store[list_id] || []).include?(user_id)
      end

      def unsubscribers(list_id)
        store[list_id].to_a
      end

      def reset
        store.clear
      end

      private

      def store
        @store ||= @options[:store] || Hash.new
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
opt_out-1.1.0 lib/opt_out/adapters/memory_adapter.rb