@@ -15,7 +15,7 @@ def initialize(router, command_builder, watch)
15
15
@watch = watch
16
16
@retryable = true
17
17
@pipeline = ::RedisClient ::Pipeline . new ( @command_builder )
18
- @buffer = [ ]
18
+ @pending_commands = [ ]
19
19
@node = nil
20
20
end
21
21
@@ -24,7 +24,7 @@ def call(*command, **kwargs, &block)
24
24
if prepare ( command )
25
25
@pipeline . call_v ( command , &block )
26
26
else
27
- @buffer << -> { @pipeline . call_v ( command , &block ) }
27
+ defer { @pipeline . call_v ( command , &block ) }
28
28
end
29
29
end
30
30
@@ -33,7 +33,7 @@ def call_v(command, &block)
33
33
if prepare ( command )
34
34
@pipeline . call_v ( command , &block )
35
35
else
36
- @buffer << -> { @pipeline . call_v ( command , &block ) }
36
+ defer { @pipeline . call_v ( command , &block ) }
37
37
end
38
38
end
39
39
@@ -43,7 +43,7 @@ def call_once(*command, **kwargs, &block)
43
43
if prepare ( command )
44
44
@pipeline . call_once_v ( command , &block )
45
45
else
46
- @buffer << -> { @pipeline . call_once_v ( command , &block ) }
46
+ defer { @pipeline . call_once_v ( command , &block ) }
47
47
end
48
48
end
49
49
@@ -53,12 +53,12 @@ def call_once_v(command, &block)
53
53
if prepare ( command )
54
54
@pipeline . call_once_v ( command , &block )
55
55
else
56
- @buffer << -> { @pipeline . call_once_v ( command , &block ) }
56
+ defer { @pipeline . call_once_v ( command , &block ) }
57
57
end
58
58
end
59
59
60
60
def execute
61
- @buffer . each ( &:call )
61
+ @pending_commands . each ( &:call )
62
62
63
63
raise ArgumentError , 'empty transaction' if @pipeline . _empty?
64
64
raise ConsistencyError , "couldn't determine the node: #{ @pipeline . _commands } " if @node . nil?
@@ -69,6 +69,11 @@ def execute
69
69
70
70
private
71
71
72
+ def defer ( &block )
73
+ @pending_commands << block
74
+ nil
75
+ end
76
+
72
77
def watch?
73
78
!@watch . nil? && !@watch . empty?
74
79
end
@@ -97,8 +102,8 @@ def prepare(command)
97
102
@node = @router . find_node ( node_key )
98
103
@pipeline . call ( 'WATCH' , *@watch ) if watch?
99
104
@pipeline . call ( 'MULTI' )
100
- @buffer . each ( &:call )
101
- @buffer . clear
105
+ @pending_commands . each ( &:call )
106
+ @pending_commands . clear
102
107
true
103
108
end
104
109
0 commit comments