class MockRedis::MultiDbWrapper

Public Class Methods

new(db) click to toggle source
# File lib/mock_redis/multi_db_wrapper.rb, line 7
def initialize(db)
  @db_index = 0

  @prototype_db = db.clone

  @databases = Hash.new { |h, k| h[k] = @prototype_db.clone }
  @databases[@db_index] = db
end

Public Instance Methods

flushall() click to toggle source

Redis commands

# File lib/mock_redis/multi_db_wrapper.rb, line 33
def flushall
  @databases.each_value(&:flushdb)
  'OK'
end
initialize_copy(source) click to toggle source
Calls superclass method
# File lib/mock_redis/multi_db_wrapper.rb, line 24
def initialize_copy(source)
  super
  @databases = @databases.clone
  @databases.each_key do |k|
    @databases[k] = @databases[k].clone
  end
end
method_missing(method, *args, &block) click to toggle source
# File lib/mock_redis/multi_db_wrapper.rb, line 20
               def method_missing(method, *args, &block)
  current_db.send(method, *args, &block)
end
move(key, db_index) click to toggle source
# File lib/mock_redis/multi_db_wrapper.rb, line 38
def move(key, db_index)
  src = current_db
  dest = db(db_index)

  if !src.exists?(key) || dest.exists?(key)
    false
  else
    case current_db.type(key)
    when 'hash'
      dest.hmset(key, *src.hgetall(key).map { |k, v| [k, v] }.flatten)
    when 'list'
      while value = src.rpop(key)
        dest.lpush(key, value)
      end
    when 'set'
      while value = src.spop(key)
        dest.sadd(key, value)
      end
    when 'string'
      dest.set(key, src.get(key))
    when 'zset'
      src.zrange(key, 0, -1, :with_scores => true).each do |(m, s)|
        dest.zadd(key, s, m)
      end
    else
      raise ArgumentError,
      "Can't move a key of type #{current_db.type(key).inspect}"
    end

    src.del(key)
    true
  end
end
respond_to?(method, include_private = false) click to toggle source
Calls superclass method
# File lib/mock_redis/multi_db_wrapper.rb, line 16
def respond_to?(method, include_private = false)
  super || current_db.respond_to?(method, include_private)
end
select(db_index) click to toggle source
# File lib/mock_redis/multi_db_wrapper.rb, line 72
def select(db_index)
  @db_index = db_index.to_i
  'OK'
end

Private Instance Methods

current_db() click to toggle source
# File lib/mock_redis/multi_db_wrapper.rb, line 79
def current_db
  @databases[@db_index]
end
db(index) click to toggle source
# File lib/mock_redis/multi_db_wrapper.rb, line 83
def db(index)
  @databases[index]
end