libuv 3.3.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/libuv.rb +6 -2
- data/lib/libuv/async.rb +3 -4
- data/lib/libuv/check.rb +3 -4
- data/lib/libuv/coroutines.rb +5 -6
- data/lib/libuv/dns.rb +1 -1
- data/lib/libuv/file.rb +15 -22
- data/lib/libuv/idle.rb +3 -4
- data/lib/libuv/mixins/fs_checks.rb +2 -2
- data/lib/libuv/mixins/stream.rb +5 -5
- data/lib/libuv/pipe.rb +19 -17
- data/lib/libuv/prepare.rb +3 -4
- data/lib/libuv/q.rb +36 -40
- data/lib/libuv/reactor.rb +48 -41
- data/lib/libuv/tcp.rb +22 -20
- data/lib/libuv/timer.rb +3 -5
- data/lib/libuv/udp.rb +3 -3
- data/lib/libuv/version.rb +1 -1
- data/lib/libuv/work.rb +1 -1
- data/spec/async_spec.rb +2 -2
- data/spec/coroutines_spec.rb +10 -11
- data/spec/defer_spec.rb +33 -33
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b07182db4afe88a245218f486d7f29091a6facf5
|
4
|
+
data.tar.gz: b90adcd03a747e4af99e02befa38901befea1351
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e1a90d594b27b9d198781340e7ed1478e40fa41bf2e0b83e4bda195b5791445c12726df0d5e76f8318f6b1117ea145692fe9bd034b735004e866163a921186f7
|
7
|
+
data.tar.gz: 68c23d23198477dee0f5b31c04c8b2589b3af3adc79383a2e8a97a05c0fa3b859990e64147e2445ef6cb6d225ec03151fe5458111accc63f75aa7583584d5234
|
data/lib/libuv.rb
CHANGED
data/lib/libuv/async.rb
CHANGED
@@ -8,9 +8,8 @@ module Libuv
|
|
8
8
|
|
9
9
|
|
10
10
|
# @param reactor [::Libuv::Reactor] reactor this async callback will be associated
|
11
|
-
def initialize(reactor
|
11
|
+
def initialize(reactor)
|
12
12
|
@reactor = reactor
|
13
|
-
@callback = callback || blk
|
14
13
|
|
15
14
|
async_ptr = ::Libuv::Ext.allocate_handle_async
|
16
15
|
on_async = callback(:on_async, async_ptr.address)
|
@@ -30,8 +29,8 @@ module Libuv
|
|
30
29
|
# Used to update the callback that will be triggered when async is called
|
31
30
|
#
|
32
31
|
# @param callback [Proc] the callback to be called on reactor prepare
|
33
|
-
def progress(callback
|
34
|
-
@callback = callback
|
32
|
+
def progress(&callback)
|
33
|
+
@callback = callback
|
35
34
|
self
|
36
35
|
end
|
37
36
|
|
data/lib/libuv/check.rb
CHANGED
@@ -9,9 +9,8 @@ module Libuv
|
|
9
9
|
|
10
10
|
# @param reactor [::Libuv::Reactor] reactor this check will be associated
|
11
11
|
# @param callback [Proc] callback to be called on reactor check
|
12
|
-
def initialize(reactor
|
12
|
+
def initialize(reactor)
|
13
13
|
@reactor = reactor
|
14
|
-
@callback = callback || blk
|
15
14
|
|
16
15
|
check_ptr = ::Libuv::Ext.allocate_handle_check
|
17
16
|
error = check_result(::Libuv::Ext.check_init(reactor.handle, check_ptr))
|
@@ -38,8 +37,8 @@ module Libuv
|
|
38
37
|
# Used to update the callback that will be triggered on reactor check
|
39
38
|
#
|
40
39
|
# @param callback [Proc] the callback to be called on reactor check
|
41
|
-
def progress(callback
|
42
|
-
@callback = callback
|
40
|
+
def progress(&callback)
|
41
|
+
@callback = callback
|
43
42
|
self
|
44
43
|
end
|
45
44
|
|
data/lib/libuv/coroutines.rb
CHANGED
@@ -6,17 +6,14 @@ class CoroutineRejection < RuntimeError
|
|
6
6
|
attr_accessor :value
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
private
|
11
|
-
|
12
|
-
|
9
|
+
module Libuv
|
13
10
|
# Takes a Promise response and turns it into a co-routine
|
14
11
|
# for code execution without using callbacks
|
15
12
|
#
|
16
13
|
# @param *promises [::Libuv::Q::Promise] a number of promises that will be combined into a single promise
|
17
14
|
# @return [Object] Returns the result of a single promise or an array of results if provided multiple promises
|
18
15
|
# @raise [Exception] if the promise is rejected
|
19
|
-
def co(*yieldable
|
16
|
+
def co(*yieldable)
|
20
17
|
on_reactor = Libuv::Reactor.current
|
21
18
|
raise 'must be running on a reactor thread to use coroutines' unless on_reactor
|
22
19
|
|
@@ -27,7 +24,7 @@ class Object
|
|
27
24
|
if yieldable.length == 1
|
28
25
|
promise = yieldable[0]
|
29
26
|
# Passed independently as this is often overwritten for performance
|
30
|
-
promise.progress
|
27
|
+
promise.progress &Proc.new if block_given?
|
31
28
|
else
|
32
29
|
promise = on_reactor.all(*yieldable)
|
33
30
|
end
|
@@ -77,4 +74,6 @@ class Object
|
|
77
74
|
end
|
78
75
|
result
|
79
76
|
end
|
77
|
+
|
78
|
+
module_function :co
|
80
79
|
end
|
data/lib/libuv/dns.rb
CHANGED
data/lib/libuv/file.rb
CHANGED
@@ -29,7 +29,7 @@ module Libuv
|
|
29
29
|
attr_reader :fileno, :closed
|
30
30
|
|
31
31
|
|
32
|
-
def initialize(thread, path, flags = 0, mode: 0
|
32
|
+
def initialize(thread, path, flags = 0, mode: 0)
|
33
33
|
super(thread, thread.defer)
|
34
34
|
|
35
35
|
@fileno = -1
|
@@ -41,10 +41,10 @@ module Libuv
|
|
41
41
|
pre_check @defer, request, ::Libuv::Ext.fs_open(@reactor, request, @path, @flags, @mode, callback(:on_open, request.address))
|
42
42
|
|
43
43
|
if block_given?
|
44
|
-
self.progress
|
45
|
-
|
44
|
+
self.progress &Proc.new
|
45
|
+
else
|
46
46
|
@coroutine = @reactor.defer
|
47
|
-
|
47
|
+
@coroutine.promise.value
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
@@ -67,7 +67,7 @@ module Libuv
|
|
67
67
|
@request_refs[request.address] = [deferred, buffer1]
|
68
68
|
|
69
69
|
promise = pre_check(deferred, request, ::Libuv::Ext.fs_read(@reactor.handle, request, @fileno, buffer, 1, offset, callback(:on_read, request.address)))
|
70
|
-
wait ?
|
70
|
+
wait ? promise.value : promise
|
71
71
|
end
|
72
72
|
|
73
73
|
def write(data, offset = 0, wait: true)
|
@@ -123,7 +123,7 @@ module Libuv
|
|
123
123
|
@request_refs[request.address] = deferred
|
124
124
|
|
125
125
|
promise = pre_check deferred, request, ::Libuv::Ext.fs_futime(@reactor.handle, request, @fileno, atime, mtime, callback(:on_utime, request.address))
|
126
|
-
wait ?
|
126
|
+
wait ? promise.value : promise
|
127
127
|
end
|
128
128
|
|
129
129
|
def chmod(mode, wait: true)
|
@@ -148,10 +148,12 @@ module Libuv
|
|
148
148
|
end
|
149
149
|
|
150
150
|
def send_file(stream, using: :raw, chunk_size: 4096, wait: true)
|
151
|
-
@transmit_failure ||=
|
152
|
-
@
|
153
|
-
|
154
|
-
|
151
|
+
@transmit_failure ||= proc { |reason| @sending_file.reject(reason) }
|
152
|
+
@start_transmit ||= proc { |stats|
|
153
|
+
@file_stream_total = stats[:st_size]
|
154
|
+
next_chunk
|
155
|
+
}
|
156
|
+
@transmit_data ||= proc { |data| transmit_data(data) }
|
155
157
|
|
156
158
|
@sending_file = @reactor.defer
|
157
159
|
@file_stream = stream
|
@@ -162,7 +164,7 @@ module Libuv
|
|
162
164
|
stat(wait: false).then @start_transmit, @transmit_failure
|
163
165
|
|
164
166
|
promise = @sending_file.promise
|
165
|
-
promise.finally
|
167
|
+
promise.finally { clean_up_send }
|
166
168
|
respond wait, promise
|
167
169
|
end
|
168
170
|
|
@@ -172,11 +174,6 @@ module Libuv
|
|
172
174
|
|
173
175
|
##
|
174
176
|
# File transmit functions -------------
|
175
|
-
def start_transmit(stats)
|
176
|
-
@file_stream_total = stats[:st_size]
|
177
|
-
next_chunk
|
178
|
-
end
|
179
|
-
|
180
177
|
def transmit_data(data)
|
181
178
|
@file_chunk_count += 1
|
182
179
|
if @file_stream_type == :http
|
@@ -186,11 +183,11 @@ module Libuv
|
|
186
183
|
resp << CRLF
|
187
184
|
data = resp
|
188
185
|
end
|
189
|
-
@file_stream.write(data, wait: :promise).then
|
186
|
+
@file_stream.write(data, wait: :promise).then(proc { next_chunk }, @transmit_failure)
|
190
187
|
nil
|
191
188
|
end
|
192
189
|
|
193
|
-
def next_chunk
|
190
|
+
def next_chunk
|
194
191
|
next_size = @file_chunk_size
|
195
192
|
next_offset = @file_chunk_size * @file_chunk_count
|
196
193
|
|
@@ -211,10 +208,6 @@ module Libuv
|
|
211
208
|
nil
|
212
209
|
end
|
213
210
|
|
214
|
-
def transmit_failure(reason)
|
215
|
-
@sending_file.reject(reason)
|
216
|
-
end
|
217
|
-
|
218
211
|
def clean_up_send
|
219
212
|
@sending_file = nil
|
220
213
|
@file_stream = nil
|
data/lib/libuv/idle.rb
CHANGED
@@ -9,9 +9,8 @@ module Libuv
|
|
9
9
|
|
10
10
|
# @param reactor [::Libuv::Reactor] reactor this idle handler will be associated
|
11
11
|
# @param callback [Proc] callback to be called when the reactor is idle
|
12
|
-
def initialize(reactor
|
12
|
+
def initialize(reactor)
|
13
13
|
@reactor = reactor
|
14
|
-
@callback = callback || blk
|
15
14
|
|
16
15
|
idle_ptr = ::Libuv::Ext.allocate_handle_idle
|
17
16
|
error = check_result(::Libuv::Ext.idle_init(reactor.handle, idle_ptr))
|
@@ -38,8 +37,8 @@ module Libuv
|
|
38
37
|
# Used to update the callback that will be triggered on idle
|
39
38
|
#
|
40
39
|
# @param callback [Proc] the callback to be called on idle trigger
|
41
|
-
def progress(callback
|
42
|
-
@callback = callback
|
40
|
+
def progress(&callback)
|
41
|
+
@callback = callback
|
43
42
|
self
|
44
43
|
end
|
45
44
|
|
@@ -22,7 +22,7 @@ module Libuv
|
|
22
22
|
pre_check @stat_deferred, request, ::Libuv::Ext.fs_fstat(@reactor.handle, request, @fileno, callback(:on_stat, request.address))
|
23
23
|
promise = @stat_deferred.promise
|
24
24
|
|
25
|
-
wait ?
|
25
|
+
wait ? promise.value : promise
|
26
26
|
end
|
27
27
|
|
28
28
|
|
@@ -31,7 +31,7 @@ module Libuv
|
|
31
31
|
|
32
32
|
def respond(wait, promise)
|
33
33
|
if wait
|
34
|
-
|
34
|
+
promise.value
|
35
35
|
self
|
36
36
|
else
|
37
37
|
promise
|
data/lib/libuv/mixins/stream.rb
CHANGED
@@ -104,7 +104,7 @@ module Libuv
|
|
104
104
|
|
105
105
|
if wait
|
106
106
|
return deferred.promise if wait == :promise
|
107
|
-
|
107
|
+
deferred.promise.value
|
108
108
|
end
|
109
109
|
|
110
110
|
self
|
@@ -122,8 +122,8 @@ module Libuv
|
|
122
122
|
::Libuv::Ext.is_writable(handle) > 0
|
123
123
|
end
|
124
124
|
|
125
|
-
def progress(
|
126
|
-
@progress =
|
125
|
+
def progress(&blk)
|
126
|
+
@progress = blk
|
127
127
|
self
|
128
128
|
end
|
129
129
|
|
@@ -147,7 +147,7 @@ module Libuv
|
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
150
|
-
|
150
|
+
@read_defer.promise.value
|
151
151
|
end
|
152
152
|
alias_method :read_nonblock, :read
|
153
153
|
|
@@ -158,7 +158,7 @@ module Libuv
|
|
158
158
|
|
159
159
|
@flush_defer = @reactor.defer
|
160
160
|
check_flush_buffer
|
161
|
-
|
161
|
+
@flush_defer.promise.value
|
162
162
|
end
|
163
163
|
|
164
164
|
|
data/lib/libuv/pipe.rb
CHANGED
@@ -22,10 +22,10 @@ module Libuv
|
|
22
22
|
super(pipe_ptr, error)
|
23
23
|
end
|
24
24
|
|
25
|
-
def bind(name, callback
|
25
|
+
def bind(name, &callback)
|
26
26
|
return if @closed
|
27
|
-
@on_accept = callback
|
28
|
-
@on_listen =
|
27
|
+
@on_accept = callback
|
28
|
+
@on_listen = proc { accept }
|
29
29
|
|
30
30
|
assert_type(String, name, "name must be a String")
|
31
31
|
name = windows_path name if FFI::Platform.windows?
|
@@ -36,8 +36,7 @@ module Libuv
|
|
36
36
|
self
|
37
37
|
end
|
38
38
|
|
39
|
-
def open(fileno
|
40
|
-
@callback = callback || blk
|
39
|
+
def open(fileno)
|
41
40
|
assert_type(Integer, fileno, 'fileno must be an integer file descriptor')
|
42
41
|
|
43
42
|
begin
|
@@ -45,24 +44,25 @@ module Libuv
|
|
45
44
|
check_result! ::Libuv::Ext.pipe_open(handle, fileno)
|
46
45
|
|
47
46
|
# Emulate on_connect behavior
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
47
|
+
if block_given?
|
48
|
+
begin
|
49
|
+
yield(self)
|
50
|
+
rescue Exception => e
|
51
|
+
@reactor.log e, 'performing pipe connect callback'
|
52
|
+
end
|
53
53
|
end
|
54
54
|
rescue Exception => e
|
55
55
|
reject(e)
|
56
|
-
raise e unless
|
56
|
+
raise e unless block_given?
|
57
57
|
end
|
58
58
|
|
59
59
|
self
|
60
60
|
end
|
61
61
|
|
62
|
-
def connect(name
|
62
|
+
def connect(name)
|
63
63
|
return if @closed
|
64
|
-
@callback = callback || blk
|
65
64
|
assert_type(String, name, "name must be a String")
|
65
|
+
|
66
66
|
begin
|
67
67
|
name = windows_path name if FFI::Platform.windows?
|
68
68
|
req = ::Libuv::Ext.allocate_request_connect
|
@@ -71,9 +71,11 @@ module Libuv
|
|
71
71
|
reject(e)
|
72
72
|
end
|
73
73
|
|
74
|
-
if
|
74
|
+
if block_given?
|
75
|
+
@callback = Proc.new
|
76
|
+
else
|
75
77
|
@coroutine = @reactor.defer
|
76
|
-
|
78
|
+
@coroutine.promise.value
|
77
79
|
end
|
78
80
|
|
79
81
|
self
|
@@ -111,7 +113,7 @@ module Libuv
|
|
111
113
|
|
112
114
|
if wait
|
113
115
|
return deferred.promise if wait == :promise
|
114
|
-
|
116
|
+
deferred.promise.value
|
115
117
|
end
|
116
118
|
|
117
119
|
self
|
@@ -156,7 +158,7 @@ module Libuv
|
|
156
158
|
private
|
157
159
|
|
158
160
|
|
159
|
-
def accept
|
161
|
+
def accept
|
160
162
|
pipe = nil
|
161
163
|
begin
|
162
164
|
raise RuntimeError, CLOSED_HANDLE_ERROR if @closed
|
data/lib/libuv/prepare.rb
CHANGED
@@ -9,9 +9,8 @@ module Libuv
|
|
9
9
|
|
10
10
|
# @param reactor [::Libuv::Reactor] reactor this prepare handle will be associated
|
11
11
|
# @param callback [Proc] callback to be called on reactor preparation
|
12
|
-
def initialize(reactor
|
12
|
+
def initialize(reactor)
|
13
13
|
@reactor = reactor
|
14
|
-
@callback = callback || blk
|
15
14
|
|
16
15
|
prepare_ptr = ::Libuv::Ext.allocate_handle_prepare
|
17
16
|
error = check_result(::Libuv::Ext.prepare_init(reactor.handle, prepare_ptr))
|
@@ -38,8 +37,8 @@ module Libuv
|
|
38
37
|
# Used to update the callback that will be triggered on reactor prepare
|
39
38
|
#
|
40
39
|
# @param callback [Proc] the callback to be called on reactor prepare
|
41
|
-
def progress(callback
|
42
|
-
@callback = callback
|
40
|
+
def progress(&callback)
|
41
|
+
@callback = callback
|
43
42
|
self
|
44
43
|
end
|
45
44
|
|
data/lib/libuv/q.rb
CHANGED
@@ -13,36 +13,24 @@ module Libuv
|
|
13
13
|
# Allows a backtrace to be included in any errors
|
14
14
|
attr_accessor :trace
|
15
15
|
|
16
|
-
# Used by finally method
|
17
|
-
MAKE_PROMISE = proc { |value, resolved, reactor|
|
18
|
-
result = Q.defer(reactor)
|
19
|
-
if (resolved)
|
20
|
-
result.resolve(value)
|
21
|
-
else
|
22
|
-
result.reject(value)
|
23
|
-
end
|
24
|
-
result.promise
|
25
|
-
}.freeze
|
26
|
-
|
27
|
-
|
28
16
|
#
|
29
17
|
# regardless of when the promise was or will be resolved / rejected, calls
|
30
18
|
# the error callback asynchronously if the promise is rejected.
|
31
19
|
#
|
32
20
|
# @param [Proc, &blk] callbacks error, error_block
|
33
21
|
# @return [Promise] Returns an unresolved promise for chaining
|
34
|
-
def catch(
|
35
|
-
self.then(nil,
|
22
|
+
def catch(&blk)
|
23
|
+
self.then(nil, blk)
|
36
24
|
end
|
37
25
|
|
38
26
|
|
39
|
-
def progress(
|
40
|
-
self.then(nil, nil,
|
27
|
+
def progress(&blk)
|
28
|
+
self.then(nil, nil, blk)
|
41
29
|
end
|
42
30
|
|
43
31
|
# A future that provides the value or raises an error if a rejection occurs
|
44
32
|
def value
|
45
|
-
co
|
33
|
+
::Libuv.co(self)
|
46
34
|
end
|
47
35
|
|
48
36
|
#
|
@@ -52,26 +40,24 @@ module Libuv
|
|
52
40
|
#
|
53
41
|
# @param [Proc, &blk] callbacks finally, finally_block
|
54
42
|
# @return [Promise] Returns an unresolved promise for chaining
|
55
|
-
def finally
|
56
|
-
|
57
|
-
|
58
|
-
handleCallback = lambda {|value, isResolved|
|
43
|
+
def finally
|
44
|
+
handleCallback = lambda { |value, isResolved|
|
59
45
|
callbackOutput = nil
|
60
46
|
begin
|
61
|
-
callbackOutput =
|
47
|
+
callbackOutput = yield
|
62
48
|
rescue Exception => e
|
63
49
|
@reactor.log e, 'performing promise finally callback', @trace
|
64
|
-
return
|
50
|
+
return make_promise(e, false, @reactor)
|
65
51
|
end
|
66
52
|
|
67
53
|
if callbackOutput.is_a?(Promise)
|
68
54
|
return callbackOutput.then(proc {
|
69
|
-
|
55
|
+
make_promise(value, isResolved, @reactor)
|
70
56
|
}, proc { |err|
|
71
|
-
|
57
|
+
make_promise(err, false, @reactor)
|
72
58
|
})
|
73
59
|
else
|
74
|
-
return
|
60
|
+
return make_promise(value, isResolved, @reactor)
|
75
61
|
end
|
76
62
|
}
|
77
63
|
|
@@ -81,6 +67,18 @@ module Libuv
|
|
81
67
|
handleCallback.call(err, false)
|
82
68
|
})
|
83
69
|
end
|
70
|
+
|
71
|
+
protected
|
72
|
+
|
73
|
+
def make_promise(value, resolved, reactor)
|
74
|
+
result = Q.defer(reactor)
|
75
|
+
if (resolved)
|
76
|
+
result.resolve(value)
|
77
|
+
else
|
78
|
+
result.reject(value)
|
79
|
+
end
|
80
|
+
result.promise
|
81
|
+
end
|
84
82
|
end
|
85
83
|
|
86
84
|
|
@@ -94,7 +92,7 @@ module Libuv
|
|
94
92
|
def initialize(reactor, defer)
|
95
93
|
raise ArgumentError unless defer.is_a?(Deferred)
|
96
94
|
super()
|
97
|
-
|
95
|
+
|
98
96
|
@reactor = reactor
|
99
97
|
@defer = defer
|
100
98
|
end
|
@@ -106,14 +104,13 @@ module Libuv
|
|
106
104
|
#
|
107
105
|
# @param [Proc, Proc, Proc, &blk] callbacks error, success, progress, success_block
|
108
106
|
# @return [Promise] Returns an unresolved promise for chaining
|
109
|
-
def then(callback = nil, errback = nil, progback = nil
|
107
|
+
def then(callback = nil, errback = nil, progback = nil)
|
110
108
|
result = Q.defer(@reactor)
|
111
|
-
|
112
|
-
callback ||= blk
|
109
|
+
callback = Proc.new if block_given?
|
113
110
|
|
114
111
|
wrappedCallback = proc { |val|
|
115
112
|
begin
|
116
|
-
result.resolve(callback
|
113
|
+
result.resolve(callback ? callback.call(val) : val)
|
117
114
|
rescue Exception => e
|
118
115
|
result.reject(e)
|
119
116
|
@reactor.log e, 'performing promise resolution callback', @trace
|
@@ -122,7 +119,7 @@ module Libuv
|
|
122
119
|
|
123
120
|
wrappedErrback = proc { |reason|
|
124
121
|
begin
|
125
|
-
result.resolve(errback
|
122
|
+
result.resolve(errback ? errback.call(reason) : Q.reject(@reactor, reason))
|
126
123
|
rescue Exception => e
|
127
124
|
result.reject(e)
|
128
125
|
@reactor.log e, 'performing promise rejection callback', @trace
|
@@ -131,7 +128,7 @@ module Libuv
|
|
131
128
|
|
132
129
|
wrappedProgback = proc { |*progress|
|
133
130
|
begin
|
134
|
-
result.notify(progback
|
131
|
+
result.notify(progback ? progback.call(*progress) : progress)
|
135
132
|
rescue Exception => e
|
136
133
|
@reactor.log e, 'performing promise progress callback', @trace
|
137
134
|
end
|
@@ -150,7 +147,7 @@ module Libuv
|
|
150
147
|
pending_array << [wrappedCallback, wrappedErrback, wrappedProgback]
|
151
148
|
end
|
152
149
|
end
|
153
|
-
|
150
|
+
|
154
151
|
result.promise
|
155
152
|
end
|
156
153
|
|
@@ -185,22 +182,21 @@ module Libuv
|
|
185
182
|
@response = response
|
186
183
|
end
|
187
184
|
|
188
|
-
def then(callback = nil, errback = nil, progback = nil
|
185
|
+
def then(callback = nil, errback = nil, progback = nil)
|
189
186
|
result = Q.defer(@reactor)
|
190
|
-
|
191
|
-
callback ||= blk
|
187
|
+
callback = Proc.new if block_given?
|
192
188
|
|
193
189
|
@reactor.next_tick {
|
194
190
|
if @error
|
195
191
|
begin
|
196
|
-
result.resolve(errback
|
192
|
+
result.resolve(errback ? errback.call(@response) : Q.reject(@reactor, @response))
|
197
193
|
rescue Exception => e
|
198
194
|
result.reject(e)
|
199
195
|
@reactor.log e, 'performing promise rejection callback', @trace
|
200
196
|
end
|
201
197
|
else
|
202
198
|
begin
|
203
|
-
result.resolve(callback
|
199
|
+
result.resolve(callback ? callback.call(@response) : @response)
|
204
200
|
rescue Exception => e
|
205
201
|
result.reject(e)
|
206
202
|
@reactor.log e, 'performing promise resolution callback', @trace
|
@@ -296,7 +292,7 @@ module Libuv
|
|
296
292
|
end
|
297
293
|
|
298
294
|
def value
|
299
|
-
co
|
295
|
+
::Libuv.co(self.promise)
|
300
296
|
end
|
301
297
|
|
302
298
|
# Overwrite to prevent inspecting errors hanging the VM
|
data/lib/libuv/reactor.rb
CHANGED
@@ -62,30 +62,30 @@ module Libuv
|
|
62
62
|
|
63
63
|
# Create an async call for scheduling work from other threads
|
64
64
|
@run_queue = Queue.new
|
65
|
-
@process_queue = @reactor.async
|
65
|
+
@process_queue = @reactor.async { process_queue_cb }
|
66
66
|
@process_queue.unref
|
67
67
|
|
68
68
|
# Create a next tick timer
|
69
|
-
@next_tick = @reactor.timer
|
69
|
+
@next_tick = @reactor.timer { next_tick_cb }
|
70
70
|
@next_tick.unref
|
71
71
|
|
72
72
|
# Create an async call for ending the reactor
|
73
|
-
@stop_reactor = @reactor.async
|
73
|
+
@stop_reactor = @reactor.async { stop_cb }
|
74
74
|
@stop_reactor.unref
|
75
75
|
|
76
76
|
# Libuv can prevent the application shutting down once the main thread has ended
|
77
77
|
# The addition of a prepare function prevents this from happening.
|
78
|
-
@reactor_prep =
|
78
|
+
@reactor_prep = prepare {}
|
79
79
|
@reactor_prep.unref
|
80
80
|
@reactor_prep.start
|
81
81
|
|
82
82
|
# LibUV ingnores program interrupt by default.
|
83
83
|
# We provide normal behaviour and allow this to be overriden
|
84
84
|
@on_signal = []
|
85
|
-
sig_callback =
|
86
|
-
self.signal(:INT, sig_callback).unref
|
87
|
-
self.signal(:HUP, sig_callback).unref
|
88
|
-
self.signal(:TERM, sig_callback).unref
|
85
|
+
sig_callback = proc { signal_cb }
|
86
|
+
self.signal(:INT, &sig_callback).unref
|
87
|
+
self.signal(:HUP, &sig_callback).unref
|
88
|
+
self.signal(:TERM, &sig_callback).unref
|
89
89
|
|
90
90
|
# Notify of errors
|
91
91
|
@throw_on_exit = nil
|
@@ -101,8 +101,6 @@ module Libuv
|
|
101
101
|
protected
|
102
102
|
|
103
103
|
|
104
|
-
def noop; end
|
105
|
-
|
106
104
|
def stop_cb
|
107
105
|
Thread.current.thread_variable_set(:reactor, nil)
|
108
106
|
@reactor_running = false
|
@@ -110,7 +108,7 @@ module Libuv
|
|
110
108
|
::Libuv::Ext.stop(@pointer)
|
111
109
|
end
|
112
110
|
|
113
|
-
def signal_cb
|
111
|
+
def signal_cb
|
114
112
|
if @on_signal.empty?
|
115
113
|
stop_cb
|
116
114
|
else
|
@@ -226,8 +224,12 @@ module Libuv
|
|
226
224
|
# Provides a promise notifier for receiving un-handled exceptions
|
227
225
|
#
|
228
226
|
# @return [::Libuv::Q::Promise]
|
229
|
-
def notifier
|
230
|
-
@reactor_notify =
|
227
|
+
def notifier
|
228
|
+
@reactor_notify = if block_given?
|
229
|
+
Proc.new
|
230
|
+
else
|
231
|
+
@reactor_notify_default
|
232
|
+
end
|
231
233
|
self
|
232
234
|
end
|
233
235
|
|
@@ -325,15 +327,15 @@ module Libuv
|
|
325
327
|
# Get a new TCP instance
|
326
328
|
#
|
327
329
|
# @return [::Libuv::TCP]
|
328
|
-
def tcp(
|
329
|
-
TCP.new(@reactor, progress: callback
|
330
|
+
def tcp(**opts, &callback)
|
331
|
+
TCP.new(@reactor, progress: callback, **opts)
|
330
332
|
end
|
331
333
|
|
332
334
|
# Get a new UDP instance
|
333
335
|
#
|
334
336
|
# @return [::Libuv::UDP]
|
335
|
-
def udp(
|
336
|
-
UDP.new(@reactor, progress: callback
|
337
|
+
def udp(**opts, &callback)
|
338
|
+
UDP.new(@reactor, progress: callback, **opts)
|
337
339
|
end
|
338
340
|
|
339
341
|
# Get a new TTY instance
|
@@ -359,56 +361,62 @@ module Libuv
|
|
359
361
|
#
|
360
362
|
# @param callback [Proc] the callback to be called on timer trigger
|
361
363
|
# @return [::Libuv::Timer]
|
362
|
-
def timer
|
363
|
-
Timer.new(@reactor
|
364
|
+
def timer
|
365
|
+
handle = Timer.new(@reactor)
|
366
|
+
handle.progress &Proc.new if block_given?
|
367
|
+
handle
|
364
368
|
end
|
365
369
|
|
366
370
|
# Get a new Prepare handle
|
367
371
|
#
|
368
372
|
# @return [::Libuv::Prepare]
|
369
|
-
def prepare
|
370
|
-
Prepare.new(@reactor
|
373
|
+
def prepare
|
374
|
+
handle = Prepare.new(@reactor)
|
375
|
+
handle.progress &Proc.new if block_given?
|
376
|
+
handle
|
371
377
|
end
|
372
378
|
|
373
379
|
# Get a new Check handle
|
374
380
|
#
|
375
381
|
# @return [::Libuv::Check]
|
376
|
-
def check
|
377
|
-
Check.new(@reactor
|
382
|
+
def check
|
383
|
+
handle = Check.new(@reactor)
|
384
|
+
handle.progress &Proc.new if block_given?
|
385
|
+
handle
|
378
386
|
end
|
379
387
|
|
380
388
|
# Get a new Idle handle
|
381
389
|
#
|
382
390
|
# @param callback [Proc] the callback to be called on idle trigger
|
383
391
|
# @return [::Libuv::Idle]
|
384
|
-
def idle
|
385
|
-
Idle.new(@reactor
|
392
|
+
def idle
|
393
|
+
handle = Idle.new(@reactor)
|
394
|
+
handle.progress &Proc.new if block_given?
|
395
|
+
handle
|
386
396
|
end
|
387
397
|
|
388
398
|
# Get a new Async handle
|
389
399
|
#
|
390
400
|
# @return [::Libuv::Async]
|
391
|
-
def async
|
392
|
-
callback ||= block
|
401
|
+
def async
|
393
402
|
handle = Async.new(@reactor)
|
394
|
-
handle.progress
|
403
|
+
handle.progress &Proc.new if block_given?
|
395
404
|
handle
|
396
405
|
end
|
397
406
|
|
398
407
|
# Get a new signal handler
|
399
408
|
#
|
400
409
|
# @return [::Libuv::Signal]
|
401
|
-
def signal(signum = nil
|
402
|
-
callback ||= block
|
410
|
+
def signal(signum = nil)
|
403
411
|
handle = Signal.new(@reactor)
|
404
|
-
handle.progress
|
412
|
+
handle.progress &Proc.new if block_given?
|
405
413
|
handle.start(signum) if signum
|
406
414
|
handle
|
407
415
|
end
|
408
416
|
|
409
417
|
# Allows user defined behaviour when sig int is received
|
410
|
-
def on_program_interrupt(callback
|
411
|
-
@on_signal <<
|
418
|
+
def on_program_interrupt(&callback)
|
419
|
+
@on_signal << callback
|
412
420
|
self
|
413
421
|
end
|
414
422
|
|
@@ -417,10 +425,9 @@ module Libuv
|
|
417
425
|
# @param callback [Proc] the callback to be called in the thread pool
|
418
426
|
# @return [::Libuv::Work]
|
419
427
|
# @raise [ArgumentError] if block is not given
|
420
|
-
def work(callback
|
421
|
-
callback ||= block
|
428
|
+
def work(&callback)
|
422
429
|
assert_block(callback)
|
423
|
-
Work.new(@reactor, callback)
|
430
|
+
Work.new(@reactor, &callback)
|
424
431
|
end
|
425
432
|
|
426
433
|
# Lookup a hostname
|
@@ -429,13 +436,13 @@ module Libuv
|
|
429
436
|
# @param port [Integer, String] the service being connected too
|
430
437
|
# @param callback [Proc] the callback to be called on success
|
431
438
|
# @return [::Libuv::Dns]
|
432
|
-
def lookup(hostname, hint = :IPv4, port = 9, wait: true
|
439
|
+
def lookup(hostname, hint = :IPv4, port = 9, wait: true)
|
433
440
|
dns = Dns.new(@reactor, hostname, port, hint, wait: wait) # Work is a promise object
|
434
|
-
if
|
435
|
-
dns.then block
|
436
|
-
dns
|
437
|
-
else
|
441
|
+
if wait
|
438
442
|
dns.results
|
443
|
+
else
|
444
|
+
dns.then &Proc.new if block_given?
|
445
|
+
dns
|
439
446
|
end
|
440
447
|
end
|
441
448
|
|
data/lib/libuv/tcp.rb
CHANGED
@@ -93,8 +93,8 @@ module Libuv
|
|
93
93
|
end
|
94
94
|
|
95
95
|
# Provide a callback once the TLS handshake has completed
|
96
|
-
def on_handshake(
|
97
|
-
@on_handshake =
|
96
|
+
def on_handshake(&blk)
|
97
|
+
@on_handshake = blk
|
98
98
|
self
|
99
99
|
end
|
100
100
|
|
@@ -168,8 +168,8 @@ module Libuv
|
|
168
168
|
end
|
169
169
|
|
170
170
|
# Verify peers will be called for each cert in the chain
|
171
|
-
def verify_peer(
|
172
|
-
@on_verify =
|
171
|
+
def verify_peer(&blk)
|
172
|
+
@on_verify = blk
|
173
173
|
self
|
174
174
|
end
|
175
175
|
|
@@ -187,7 +187,7 @@ module Libuv
|
|
187
187
|
|
188
188
|
if wait
|
189
189
|
return deferred.promise if wait == :promise
|
190
|
-
|
190
|
+
deferred.promise.value
|
191
191
|
end
|
192
192
|
|
193
193
|
self
|
@@ -199,7 +199,7 @@ module Libuv
|
|
199
199
|
alias_method :do_shutdown, :shutdown
|
200
200
|
def shutdown
|
201
201
|
if @pending_writes && @pending_writes.length > 0
|
202
|
-
@pending_writes[-1][0].finally
|
202
|
+
@pending_writes[-1][0].finally { do_shutdown }
|
203
203
|
else
|
204
204
|
do_shutdown
|
205
205
|
end
|
@@ -228,11 +228,11 @@ module Libuv
|
|
228
228
|
# --------------------------------------
|
229
229
|
#
|
230
230
|
|
231
|
-
def bind(ip, port,
|
231
|
+
def bind(ip, port, **tls_options, &blk)
|
232
232
|
return self if @closed
|
233
233
|
|
234
|
-
@on_accept =
|
235
|
-
@on_listen =
|
234
|
+
@on_accept = blk
|
235
|
+
@on_listen = proc { accept }
|
236
236
|
|
237
237
|
assert_type(String, ip, IP_ARGUMENT_ERROR)
|
238
238
|
assert_type(Integer, port, PORT_ARGUMENT_ERROR)
|
@@ -249,27 +249,27 @@ module Libuv
|
|
249
249
|
self
|
250
250
|
end
|
251
251
|
|
252
|
-
def open(fd, binding = true
|
252
|
+
def open(fd, binding = true)
|
253
253
|
return self if @closed
|
254
254
|
|
255
255
|
if binding
|
256
|
-
@on_listen =
|
257
|
-
@on_accept =
|
256
|
+
@on_listen = proc { accept }
|
257
|
+
@on_accept = Proc.new
|
258
|
+
elsif block_given?
|
259
|
+
@callback = Proc.new
|
258
260
|
else
|
259
|
-
@
|
260
|
-
@coroutine = @reactor.defer if @callback.nil?
|
261
|
+
@coroutine = @reactor.defer
|
261
262
|
end
|
262
263
|
error = check_result ::Libuv::Ext.tcp_open(handle, fd)
|
263
264
|
reject(error) if error
|
264
|
-
|
265
|
+
@coroutine.promise.value if @coroutine
|
265
266
|
|
266
267
|
self
|
267
268
|
end
|
268
269
|
|
269
|
-
def connect(ip, port
|
270
|
+
def connect(ip, port)
|
270
271
|
return self if @closed
|
271
272
|
|
272
|
-
@callback = callback || blk
|
273
273
|
assert_type(String, ip, IP_ARGUMENT_ERROR)
|
274
274
|
assert_type(Integer, port, PORT_ARGUMENT_ERROR)
|
275
275
|
|
@@ -280,9 +280,11 @@ module Libuv
|
|
280
280
|
reject(e)
|
281
281
|
end
|
282
282
|
|
283
|
-
if
|
283
|
+
if block_given?
|
284
|
+
@callback = Proc.new
|
285
|
+
else
|
284
286
|
@coroutine = @reactor.defer
|
285
|
-
|
287
|
+
@coroutine.promise.value
|
286
288
|
end
|
287
289
|
|
288
290
|
self
|
@@ -380,7 +382,7 @@ module Libuv
|
|
380
382
|
end
|
381
383
|
end
|
382
384
|
|
383
|
-
def accept
|
385
|
+
def accept
|
384
386
|
begin
|
385
387
|
raise RuntimeError, CLOSED_HANDLE_ERROR if @closed
|
386
388
|
tcp = TCP.new(reactor, handle, **@tls_options)
|
data/lib/libuv/timer.rb
CHANGED
@@ -9,9 +9,8 @@ module Libuv
|
|
9
9
|
|
10
10
|
# @param reactor [::Libuv::Reactor] reactor this timer will be associated
|
11
11
|
# @param callback [Proc] callback to be called when the timer is triggered
|
12
|
-
def initialize(reactor
|
12
|
+
def initialize(reactor)
|
13
13
|
@reactor = reactor
|
14
|
-
@callback = callback || blk
|
15
14
|
|
16
15
|
timer_ptr = ::Libuv::Ext.allocate_handle_timer
|
17
16
|
error = check_result(::Libuv::Ext.timer_init(reactor.handle, timer_ptr))
|
@@ -86,9 +85,8 @@ module Libuv
|
|
86
85
|
# Used to update the callback to be triggered by the timer
|
87
86
|
#
|
88
87
|
# @param callback [Proc] the callback to be called by the timer
|
89
|
-
def progress(callback
|
90
|
-
@callback = callback
|
91
|
-
|
88
|
+
def progress(&callback)
|
89
|
+
@callback = callback
|
92
90
|
self
|
93
91
|
end
|
94
92
|
|
data/lib/libuv/udp.rb
CHANGED
@@ -167,7 +167,7 @@ module Libuv
|
|
167
167
|
|
168
168
|
if wait
|
169
169
|
return deferred.promise if wait == :promise
|
170
|
-
|
170
|
+
deferred.promise.value
|
171
171
|
end
|
172
172
|
|
173
173
|
self
|
@@ -217,8 +217,8 @@ module Libuv
|
|
217
217
|
self
|
218
218
|
end
|
219
219
|
|
220
|
-
def progress(callback
|
221
|
-
@progress = callback
|
220
|
+
def progress(&callback)
|
221
|
+
@progress = callback
|
222
222
|
self
|
223
223
|
end
|
224
224
|
|
data/lib/libuv/version.rb
CHANGED
data/lib/libuv/work.rb
CHANGED
@@ -15,7 +15,7 @@ module Libuv
|
|
15
15
|
|
16
16
|
# @param thread [::Libuv::Reactor] thread this work request will be associated
|
17
17
|
# @param work [Proc] callback to be called in the thread pool
|
18
|
-
def initialize(thread, work)
|
18
|
+
def initialize(thread, &work)
|
19
19
|
super(thread, thread.defer)
|
20
20
|
|
21
21
|
@work = work
|
data/spec/async_spec.rb
CHANGED
data/spec/coroutines_spec.rb
CHANGED
@@ -31,10 +31,10 @@ if RUBY_PLATFORM != 'java'
|
|
31
31
|
it "should wait for work to complete and return the result" do
|
32
32
|
@reactor.run { |reactor|
|
33
33
|
|
34
|
-
@log <<
|
34
|
+
@log << @reactor.work {
|
35
35
|
sleep 1
|
36
36
|
'work done'
|
37
|
-
}
|
37
|
+
}.value
|
38
38
|
@log << 'after work'
|
39
39
|
|
40
40
|
@timeout.close
|
@@ -47,9 +47,9 @@ if RUBY_PLATFORM != 'java'
|
|
47
47
|
it "should raise an error if the promise is rejected" do
|
48
48
|
@reactor.run { |reactor|
|
49
49
|
begin
|
50
|
-
@log <<
|
50
|
+
@log << @reactor.work {
|
51
51
|
raise 'rejected'
|
52
|
-
}
|
52
|
+
}.value
|
53
53
|
@log << 'after work'
|
54
54
|
rescue => e
|
55
55
|
@log << e.message
|
@@ -64,18 +64,18 @@ if RUBY_PLATFORM != 'java'
|
|
64
64
|
|
65
65
|
it "should return the results of multiple promises" do
|
66
66
|
@reactor.run { |reactor|
|
67
|
-
job1 = @reactor.work
|
67
|
+
job1 = @reactor.work {
|
68
68
|
sleep 1
|
69
69
|
'job1'
|
70
|
-
}
|
70
|
+
}
|
71
71
|
|
72
|
-
job2 = @reactor.work
|
72
|
+
job2 = @reactor.work {
|
73
73
|
sleep 1
|
74
74
|
'job2'
|
75
|
-
}
|
75
|
+
}
|
76
76
|
|
77
77
|
# Job1 and Job2 are executed in parallel
|
78
|
-
result1, result2 = co(job1, job2)
|
78
|
+
result1, result2 = ::Libuv.co(job1, job2)
|
79
79
|
|
80
80
|
@log << result1
|
81
81
|
@log << result2
|
@@ -88,12 +88,11 @@ if RUBY_PLATFORM != 'java'
|
|
88
88
|
expect(@log).to eq(['job1', 'job2', 'after work'])
|
89
89
|
end
|
90
90
|
|
91
|
-
|
92
91
|
it "should provide a callback option for progress events" do
|
93
92
|
@reactor.run { |reactor|
|
94
93
|
timer = @reactor.timer
|
95
94
|
timer.start(0)
|
96
|
-
co(timer) do
|
95
|
+
::Libuv.co(timer) do
|
97
96
|
@log << 'in timer'
|
98
97
|
timer.close # close will resolve the promise
|
99
98
|
end
|
data/spec/defer_spec.rb
CHANGED
@@ -312,9 +312,9 @@ describe Libuv::Q do
|
|
312
312
|
|
313
313
|
it "should allow registration of an errback without a success callback and reject" do
|
314
314
|
@reactor.run {
|
315
|
-
@promise.catch
|
315
|
+
@promise.catch { |reason|
|
316
316
|
@log << reason
|
317
|
-
}
|
317
|
+
}
|
318
318
|
|
319
319
|
@deferred.reject(:foo)
|
320
320
|
}
|
@@ -325,9 +325,9 @@ describe Libuv::Q do
|
|
325
325
|
|
326
326
|
it "should allow registration of an errback without a success callback and resolve" do
|
327
327
|
@reactor.run {
|
328
|
-
@promise.catch
|
328
|
+
@promise.catch { |reason|
|
329
329
|
@log << reason
|
330
|
-
}
|
330
|
+
}
|
331
331
|
|
332
332
|
@deferred.resolve(:foo)
|
333
333
|
}
|
@@ -447,22 +447,22 @@ describe Libuv::Q do
|
|
447
447
|
end
|
448
448
|
|
449
449
|
|
450
|
-
@promise.progress
|
450
|
+
@promise.progress { |result|
|
451
451
|
@log << result
|
452
452
|
:bar
|
453
|
-
}
|
453
|
+
}.progress { |result|
|
454
454
|
@log << result
|
455
455
|
result
|
456
|
-
}
|
456
|
+
}.progress { |result|
|
457
457
|
@log << result
|
458
458
|
result
|
459
|
-
}
|
459
|
+
}.progress { |result|
|
460
460
|
@log << result
|
461
461
|
:done
|
462
|
-
}
|
462
|
+
}.progress { |result|
|
463
463
|
@log << result
|
464
464
|
result
|
465
|
-
}
|
465
|
+
}
|
466
466
|
|
467
467
|
|
468
468
|
@deferred.notify(:foo)
|
@@ -479,23 +479,23 @@ describe Libuv::Q do
|
|
479
479
|
end
|
480
480
|
|
481
481
|
|
482
|
-
@promise.progress
|
482
|
+
@promise.progress { |result|
|
483
483
|
@log << result
|
484
484
|
:bar
|
485
|
-
}
|
485
|
+
}.progress { |result|
|
486
486
|
@log << result
|
487
487
|
raise 'err'
|
488
488
|
result
|
489
|
-
}
|
489
|
+
}.progress {|result|
|
490
490
|
@log << result
|
491
491
|
result
|
492
|
-
}
|
492
|
+
}.progress {|result|
|
493
493
|
@log << result
|
494
494
|
:done
|
495
|
-
}
|
495
|
+
}.progress { |result|
|
496
496
|
@log << result
|
497
497
|
result
|
498
|
-
}
|
498
|
+
}
|
499
499
|
|
500
500
|
|
501
501
|
@deferred.notify(:foo)
|
@@ -509,9 +509,9 @@ describe Libuv::Q do
|
|
509
509
|
@reactor.run {
|
510
510
|
@deferred.reject(:foo)
|
511
511
|
|
512
|
-
@promise.catch
|
512
|
+
@promise.catch { |reason|
|
513
513
|
@log << reason
|
514
|
-
}
|
514
|
+
}
|
515
515
|
|
516
516
|
@reactor.next_tick do
|
517
517
|
@reactor.stop
|
@@ -543,10 +543,10 @@ describe Libuv::Q do
|
|
543
543
|
|
544
544
|
it "should fulfill with the original value" do
|
545
545
|
@reactor.run {
|
546
|
-
@promise.finally
|
546
|
+
@promise.finally {
|
547
547
|
@log << :finally
|
548
548
|
:finally
|
549
|
-
}
|
549
|
+
}.then do |result|
|
550
550
|
@log << result
|
551
551
|
end
|
552
552
|
|
@@ -559,25 +559,25 @@ describe Libuv::Q do
|
|
559
559
|
|
560
560
|
it "should fulfill with the original value (larger test)" do
|
561
561
|
@reactor.run {
|
562
|
-
@promise.then
|
562
|
+
@promise.then { |result|
|
563
563
|
@log << result
|
564
564
|
result
|
565
|
-
}
|
565
|
+
}.finally {
|
566
566
|
@log << :finally
|
567
567
|
:finally
|
568
|
-
}
|
568
|
+
}.then { |result|
|
569
569
|
@log << result
|
570
570
|
:change
|
571
|
-
}
|
571
|
+
}.then { |result|
|
572
572
|
@log << result
|
573
573
|
result
|
574
|
-
}
|
574
|
+
}.finally {
|
575
575
|
@log << :finally
|
576
576
|
:finally
|
577
|
-
}
|
577
|
+
}.then { |result|
|
578
578
|
@log << result
|
579
579
|
result
|
580
|
-
}
|
580
|
+
}
|
581
581
|
|
582
582
|
|
583
583
|
@deferred.resolve(:foo)
|
@@ -589,10 +589,10 @@ describe Libuv::Q do
|
|
589
589
|
describe "when the callback throws an exception" do
|
590
590
|
it "should reject with this new exception" do
|
591
591
|
@reactor.run {
|
592
|
-
@promise.finally
|
592
|
+
@promise.finally {
|
593
593
|
@log << :finally
|
594
594
|
raise 'error'
|
595
|
-
}
|
595
|
+
}.catch do |reason|
|
596
596
|
@log.push reason.is_a?(Exception)
|
597
597
|
end
|
598
598
|
|
@@ -608,10 +608,10 @@ describe Libuv::Q do
|
|
608
608
|
@reactor.run {
|
609
609
|
deferred2 = @reactor.defer
|
610
610
|
|
611
|
-
@promise.finally
|
611
|
+
@promise.finally {
|
612
612
|
@log << :finally
|
613
613
|
deferred2.promise
|
614
|
-
}
|
614
|
+
}.then do |result|
|
615
615
|
@log << result
|
616
616
|
end
|
617
617
|
|
@@ -637,10 +637,10 @@ describe Libuv::Q do
|
|
637
637
|
@reactor.run {
|
638
638
|
deferred2 = @reactor.defer
|
639
639
|
|
640
|
-
@promise.finally
|
640
|
+
@promise.finally {
|
641
641
|
@log << :finally
|
642
642
|
deferred2.promise
|
643
|
-
}
|
643
|
+
}.catch do |result|
|
644
644
|
@log << result
|
645
645
|
end
|
646
646
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libuv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen von Takach
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|