Class: MockRedis::TransactionWrapper
- Inherits:
-
Object
- Object
- MockRedis::TransactionWrapper
- Includes:
- UndefRedisMethods
- Defined in:
- lib/mock_redis/transaction_wrapper.rb
Instance Method Summary collapse
- #discard ⇒ Object
- #exec ⇒ Object
- #in_multi? ⇒ Boolean
-
#initialize(db) ⇒ TransactionWrapper
constructor
A new instance of TransactionWrapper.
- #initialize_copy(source) ⇒ Object
- #multi ⇒ Object
- #pipelined {|_self| ... } ⇒ Object
- #pop_multi ⇒ Object
- #push_multi ⇒ Object
- #respond_to?(method, include_private = false) ⇒ Boolean
- #unwatch ⇒ Object
- #watch(*_) ⇒ Object
Methods included from UndefRedisMethods
Constructor Details
#initialize(db) ⇒ TransactionWrapper
Returns a new instance of TransactionWrapper.
11 12 13 14 15 16 |
# File 'lib/mock_redis/transaction_wrapper.rb', line 11 def initialize(db) @db = db @transaction_futures = [] @multi_stack = [] @multi_block_given = false end |
Instance Method Details
#discard ⇒ Object
41 42 43 44 45 46 47 48 49 |
# File 'lib/mock_redis/transaction_wrapper.rb', line 41 def discard unless in_multi? raise Redis::CommandError, 'ERR DISCARD without MULTI' end pop_multi @transaction_futures = [] 'OK' end |
#exec ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/mock_redis/transaction_wrapper.rb', line 51 def exec unless in_multi? raise Redis::CommandError, 'ERR EXEC without MULTI' end pop_multi return if in_multi? @multi_block_given = false responses = @transaction_futures.map do |future| result = send(*future.command) future.store_result(result) future.value rescue StandardError => e e end @transaction_futures = [] responses end |
#in_multi? ⇒ Boolean
71 72 73 |
# File 'lib/mock_redis/transaction_wrapper.rb', line 71 def in_multi? @multi_stack.any? end |
#initialize_copy(source) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/mock_redis/transaction_wrapper.rb', line 34 def initialize_copy(source) super @db = @db.clone @transaction_futures = @transaction_futures.clone @multi_stack = @multi_stack.clone end |
#multi ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/mock_redis/transaction_wrapper.rb', line 83 def multi if block_given? push_multi @multi_block_given = true begin yield(self) exec rescue StandardError => e discard raise e end else raise Redis::CommandError, 'ERR MULTI calls can not be nested' if in_multi? push_multi 'OK' end end |
#pipelined {|_self| ... } ⇒ Object
101 102 103 |
# File 'lib/mock_redis/transaction_wrapper.rb', line 101 def pipelined yield(self) if block_given? end |
#pop_multi ⇒ Object
79 80 81 |
# File 'lib/mock_redis/transaction_wrapper.rb', line 79 def pop_multi @multi_stack.pop end |
#push_multi ⇒ Object
75 76 77 |
# File 'lib/mock_redis/transaction_wrapper.rb', line 75 def push_multi @multi_stack.push(@multi_stack.size + 1) end |
#respond_to?(method, include_private = false) ⇒ Boolean
7 8 9 |
# File 'lib/mock_redis/transaction_wrapper.rb', line 7 def respond_to?(method, include_private = false) super || @db.respond_to?(method) end |
#unwatch ⇒ Object
105 106 107 |
# File 'lib/mock_redis/transaction_wrapper.rb', line 105 def unwatch 'OK' end |
#watch(*_) ⇒ Object
109 110 111 112 113 114 115 |
# File 'lib/mock_redis/transaction_wrapper.rb', line 109 def watch(*_) if block_given? yield self else 'OK' end end |