module FakeRedis::TransactionCommands
def self.in_multi
def self.in_multi @in_multi ||= Hash.new{|h,k| h[k] = false} end
def self.included(klass)
def self.included(klass) klass.class_eval do def self.queued_commands @queued_commands ||= Hash.new {|h,k| h[k] = [] } end def self.in_multi @in_multi ||= Hash.new{|h,k| h[k] = false} end def queued_commands self.class.queued_commands[database_instance_key] end def queued_commands=(cmds) self.class.queued_commands[database_instance_key] = cmds end def in_multi self.class.in_multi[database_instance_key] end def in_multi=(multi_state) self.class.in_multi[database_instance_key] = multi_state end end end
def self.queued_commands
def self.queued_commands @queued_commands ||= Hash.new {|h,k| h[k] = [] } end
def discard
def discard unless in_multi raise Redis::CommandError, "ERR DISCARD without MULTI" end self.in_multi = false self.queued_commands = [] 'OK' end
def exec
def exec unless in_multi raise Redis::CommandError, "ERR EXEC without MULTI" end responses = queued_commands.map do |cmd| begin send(*cmd) rescue => e e end end self.queued_commands = [] # reset queued_commands self.in_multi = false # reset in_multi state responses end
def in_multi
def in_multi self.class.in_multi[database_instance_key] end
def in_multi=(multi_state)
def in_multi=(multi_state) self.class.in_multi[database_instance_key] = multi_state end
def multi
def multi if in_multi raise Redis::CommandError, "ERR MULTI calls can not be nested" end self.in_multi = true yield(self) if block_given? "OK" end
def queued_commands
def queued_commands self.class.queued_commands[database_instance_key] end
def queued_commands=(cmds)
def queued_commands=(cmds) self.class.queued_commands[database_instance_key] = cmds end
def unwatch
def unwatch "OK" end
def watch(*_)
def watch(*_) "OK" end