async-tools 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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.
|