async-tools 0.1.2 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/async/bus/bus.rb +1 -2
- data/lib/async/channel.rb +10 -12
- data/lib/async/q.rb +9 -18
- data/lib/async/result_notification.rb +1 -3
- data/lib/async/timer.rb +12 -19
- data/lib/async/tools/version.rb +1 -1
- data/lib/async/worker_pool.rb +8 -14
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0b6a9e60ce38ea15b2fa51b01682f765fde14870e4a7df8bd117e2854e450d5
|
4
|
+
data.tar.gz: b2ae55f1231cd2b4c5906ed4a93031df8ee60e116c6f81e703de903823fe71d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfb0c073879c4e8d0a48e7999716fe74315b7194c29b2789b10d84fcde52c3d774a1b5fb510ec608a0d196e0cee906df1c3db643e422e7a8df84d318d903379f
|
7
|
+
data.tar.gz: 1f4ae1c4e83c11804ab6ed44fe09e1de0376f097282239dfca733d814d0c6cc361643a4236328b4082bf48f1303cefa88c1dc7f9242b688425d5e42cb4883eb7
|
data/Gemfile.lock
CHANGED
data/lib/async/bus/bus.rb
CHANGED
@@ -44,6 +44,7 @@ class Async::Bus::Bus
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def async_subscribe(*, **, &) = Async { subscribe(*, **, &) }
|
47
|
+
def on_event(&block) = @on_event_callback = block
|
47
48
|
|
48
49
|
def close
|
49
50
|
return if @closed
|
@@ -54,8 +55,6 @@ class Async::Bus::Bus
|
|
54
55
|
@subscribers.clear
|
55
56
|
end
|
56
57
|
|
57
|
-
def on_event(&block) = @on_event_callback = block
|
58
|
-
|
59
58
|
private
|
60
59
|
|
61
60
|
def normalize(nameable, payload = nil)
|
data/lib/async/channel.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Async::Channel
|
4
|
-
extend Forwardable
|
5
|
-
|
6
4
|
attr_reader :subscribers
|
7
5
|
|
8
6
|
class Error < StandardError; end
|
@@ -17,8 +15,16 @@ class Async::Channel
|
|
17
15
|
@closed = false
|
18
16
|
end
|
19
17
|
|
20
|
-
|
21
|
-
|
18
|
+
def count = @queue.count
|
19
|
+
def length = @queue.length
|
20
|
+
def size = @queue.size
|
21
|
+
|
22
|
+
def full? = @queue.full?
|
23
|
+
def empty? = @queue.empty?
|
24
|
+
def closed? = @closed
|
25
|
+
def open? = !closed?
|
26
|
+
|
27
|
+
def <<(item) = enqueue(item)
|
22
28
|
|
23
29
|
def enqueue(message)
|
24
30
|
check_channel_writeable!
|
@@ -48,14 +54,6 @@ class Async::Channel
|
|
48
54
|
end
|
49
55
|
end
|
50
56
|
|
51
|
-
def closed?
|
52
|
-
@closed
|
53
|
-
end
|
54
|
-
|
55
|
-
def open?
|
56
|
-
!closed?
|
57
|
-
end
|
58
|
-
|
59
57
|
def dequeue
|
60
58
|
check_channel_readable!
|
61
59
|
|
data/lib/async/q.rb
CHANGED
@@ -20,15 +20,16 @@ class Async::Q
|
|
20
20
|
@free_notification = Async::Notification.new
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
def count = @items.count
|
24
|
+
def size = @items.size
|
25
|
+
def length = @items.length
|
24
26
|
|
25
|
-
|
26
|
-
|
27
|
-
def_delegator :self, :resize, :scale
|
27
|
+
def full? = size >= @limit
|
28
|
+
def empty? = @items.empty?
|
28
29
|
|
29
|
-
def
|
30
|
-
|
31
|
-
|
30
|
+
def expand(n) = resize(limit + n)
|
31
|
+
def shrink(n) = resize(limit - n)
|
32
|
+
def <<(item) = enqueue(item)
|
32
33
|
|
33
34
|
def resize(new_limit)
|
34
35
|
if new_limit > @limit
|
@@ -43,14 +44,6 @@ class Async::Q
|
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
46
|
-
def expand(n)
|
47
|
-
resize(limit + n)
|
48
|
-
end
|
49
|
-
|
50
|
-
def shrink(n)
|
51
|
-
resize(limit - n)
|
52
|
-
end
|
53
|
-
|
54
47
|
def enqueue(item)
|
55
48
|
@free_notification.wait while full?
|
56
49
|
|
@@ -58,9 +51,7 @@ class Async::Q
|
|
58
51
|
@any_notification.signal
|
59
52
|
end
|
60
53
|
|
61
|
-
def enqueue_all(items)
|
62
|
-
items.each { |item| enqueue(item) }
|
63
|
-
end
|
54
|
+
def enqueue_all(items) = items.each { |item| enqueue(item) }
|
64
55
|
|
65
56
|
def dequeue
|
66
57
|
@any_notification.wait while empty?
|
@@ -1,8 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Async::ResultNotification
|
4
|
-
extend Forwardable
|
5
|
-
|
6
4
|
def initialize
|
7
5
|
@channel = Async::Channel.new
|
8
6
|
end
|
@@ -13,5 +11,5 @@ class Async::ResultNotification
|
|
13
11
|
@channel.error(e)
|
14
12
|
end
|
15
13
|
|
16
|
-
|
14
|
+
def wait = @channel.dequeue
|
17
15
|
end
|
data/lib/async/timer.rb
CHANGED
@@ -1,29 +1,28 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Async::Timer
|
4
|
-
extend Forwardable
|
5
|
-
|
6
4
|
attr_reader :dealay, :repeat
|
7
5
|
|
8
6
|
class Error < StandardError; end
|
9
7
|
|
10
8
|
class AlreadyStarted < Error; end
|
11
9
|
|
12
|
-
def initialize(delay, repeat: true, parent: Async::Task.current, &block)
|
10
|
+
def initialize(delay, repeat: true, start: true, run_on_start: false, parent: Async::Task.current, &block)
|
11
|
+
raise ArgumentError, "Block must be given" if block.nil?
|
12
|
+
|
13
13
|
@delay = delay
|
14
14
|
@repeat = repeat
|
15
|
+
@run_on_start = run_on_start
|
15
16
|
@parent = parent
|
16
17
|
@block = block
|
17
18
|
|
18
|
-
start
|
19
|
+
self.start if start
|
19
20
|
end
|
20
21
|
|
21
|
-
|
22
|
-
|
22
|
+
def stop = @task.stop
|
23
|
+
def call = @block.call
|
23
24
|
|
24
|
-
def active?
|
25
|
-
@active
|
26
|
-
end
|
25
|
+
def active? = @active
|
27
26
|
|
28
27
|
def restart
|
29
28
|
stop
|
@@ -31,23 +30,17 @@ class Async::Timer
|
|
31
30
|
start
|
32
31
|
end
|
33
32
|
|
34
|
-
def
|
35
|
-
@parent.async do
|
36
|
-
execute
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
|
42
|
-
def start
|
33
|
+
def start(run: false)
|
43
34
|
raise AlreadyStarted, "Timer already started" if active?
|
44
35
|
|
45
36
|
@active = true
|
46
37
|
|
47
38
|
@task = @parent.async do
|
39
|
+
call if @run_on_start || run
|
40
|
+
|
48
41
|
loop do
|
49
42
|
@parent.sleep(@delay)
|
50
|
-
|
43
|
+
call
|
51
44
|
break unless @repeat
|
52
45
|
rescue Async::Stop, Async::TimeoutError
|
53
46
|
break
|
data/lib/async/tools/version.rb
CHANGED
data/lib/async/worker_pool.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Async::WorkerPool
|
4
|
-
extend Forwardable
|
5
|
-
|
6
4
|
class Error < StandardError; end
|
7
5
|
|
8
6
|
class StoppedError < Error; end
|
@@ -27,18 +25,14 @@ class Async::WorkerPool
|
|
27
25
|
@task = start
|
28
26
|
end
|
29
27
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
28
|
+
def workers = @semaphore.limit
|
29
|
+
def busy = @semaphore.count
|
30
|
+
def stop = @channel.close
|
31
|
+
def waiting = @semaphore.waiting.size
|
32
|
+
def wait = @task.wait
|
34
33
|
|
35
|
-
|
36
|
-
|
37
|
-
def_delegator :@channel, :closed?, :stopped?
|
38
|
-
|
39
|
-
def waiting
|
40
|
-
@semaphore.waiting.size
|
41
|
-
end
|
34
|
+
def stopped? = !running?
|
35
|
+
def running? = @channel.open?
|
42
36
|
|
43
37
|
def call(*args, **params, &block)
|
44
38
|
block ||= @block
|
@@ -65,7 +59,7 @@ class Async::WorkerPool
|
|
65
59
|
end
|
66
60
|
|
67
61
|
def with
|
68
|
-
yield
|
62
|
+
yield(self)
|
69
63
|
ensure
|
70
64
|
stop
|
71
65
|
wait
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: async-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gleb Sinyavskiy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-02-
|
11
|
+
date: 2023-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async
|
@@ -91,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
91
|
- !ruby/object:Gem::Version
|
92
92
|
version: '0'
|
93
93
|
requirements: []
|
94
|
-
rubygems_version: 3.4.
|
94
|
+
rubygems_version: 3.4.6
|
95
95
|
signing_key:
|
96
96
|
specification_version: 4
|
97
97
|
summary: A set of useful tools for async programming with Async.
|