Sha256: 4ba62b3716b3a1620190c4ea6836b96d5a0984bbdf11cfecbc5961c6afc872cb

Contents?: true

Size: 1.16 KB

Versions: 3

Compression:

Stored size: 1.16 KB

Contents

module Blendris

  # RedisSet is a wrapper to the Redis SET data type.

  class RedisSet < RedisNode

    include Enumerable

    def initialize(key, options = {})
      @key = key.to_s
      @options = options
      @on_change = options[:on_change]
    end

    def each
      redis.smembers(key).each do |value|
        yield value
      end

      self
    end

    def set(*values)
      self.clear

      values.flatten.compact.each do |v|
        redis.sadd key, v
      end

      self
    ensure
      notify_changed
    end

    def <<(value)
      [ value ].flatten.compact.each do |v|
        redis.sadd key, v
      end

      self
    ensure
      notify_changed
    end

    def get
      self
    end

    def delete(value)
      redis.srem key, value
    ensure
      notify_changed
    end

    # Set this set's members to the intersection of this set and the given set.
    def intersect!(other)
      redis.sinterstore key, key, other.key
    ensure
      notify_changed
    end

    # Set this set's members to the union of this set and the given set.
    def union!(other)
      redis.sunionstore key, key, other.key
    ensure
      notify_changed
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
blendris-1.1 lib/blendris/set.rb
blendris-1.0 lib/blendris/set.rb
blendris-0.6 lib/blendris/set.rb