module Redis::Objects::Sets::ClassMethods

Class methods that appear in your class when you include Redis::Objects.

Public Instance Methods

set(name, options={}) click to toggle source

Define a new list. It will function like a regular instance method, so it can be used alongside ActiveRecord, DataMapper, etc.

# File lib/redis/objects/sets.rb, line 16
def set(name, options={})
  redis_objects[name.to_sym] = options.merge(:type => :set)
  ivar_name = :"@#{name}"

  mod = Module.new do
    define_method(name) do
      instance_variable_get(ivar_name) or
        instance_variable_set(ivar_name,
          Redis::Set.new(
            redis_field_key(name), redis_field_redis(name), redis_options(name)
          )
        )
    end

    define_method(:"#{name}=") do |values|
      set = public_send(name)

      redis.pipelined do
        set.clear
        set.merge(*values)
      end
    end
  end

  if options[:global]
    extend mod

    # dispatch to class methods
    define_method(name) do
      self.class.public_send(name)
    end
  else
    include mod
  end
end