Sha256: 90a0d18154594864046a9a8389e45c1e534eb8049c8925effe73c7282eab7ec4

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

module Blendris

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

  class RedisSet

    include 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

1 entries across 1 versions & 1 rubygems

Version Path
blendris-0.5 lib/blendris/set.rb