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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c932cc042b383d96a46b23e5408bfa3e7d5fc0335697b07ef820877ec63f609
4
- data.tar.gz: 1fbc66539da99ffe84df7c9d0848f4b7e9b630e3c0363048e743f1ce7235153d
3
+ metadata.gz: d0b6a9e60ce38ea15b2fa51b01682f765fde14870e4a7df8bd117e2854e450d5
4
+ data.tar.gz: b2ae55f1231cd2b4c5906ed4a93031df8ee60e116c6f81e703de903823fe71d4
5
5
  SHA512:
6
- metadata.gz: 9fe734ca6e18f71dc08c776220b6d4ccaf6812e110903393d58ecb1f5bc21c8c6a84ba11fc47ba0c7d15f9708625de7eb3654330aa2cdd4208129b2722ca87ca
7
- data.tar.gz: b8ab8eb40ec6a8d85be5d6768a562e10a6a2a9746b8d44a515394a82a3d42473b4b4cf3c1ab0cd80e7311479abed0b28d7a4cb6dd8fe9aa67d42473f4122e401
6
+ metadata.gz: dfb0c073879c4e8d0a48e7999716fe74315b7194c29b2789b10d84fcde52c3d774a1b5fb510ec608a0d196e0cee906df1c3db643e422e7a8df84d318d903379f
7
+ data.tar.gz: 1f4ae1c4e83c11804ab6ed44fe09e1de0376f097282239dfca733d814d0c6cc361643a4236328b4082bf48f1303cefa88c1dc7f9242b688425d5e42cb4883eb7
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- async-tools (0.1.2)
4
+ async-tools (0.1.4)
5
5
  async (~> 2.3)
6
6
  zeitwerk (~> 2.6)
7
7
 
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
- def_delegators :@queue, :count, :empty?, :length, :size, :full?
21
- def_delegator :self, :enqueue, :<<
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
- def_delegators :@items, :count, :empty?, :length, :size
23
+ def count = @items.count
24
+ def size = @items.size
25
+ def length = @items.length
24
26
 
25
- def_delegator :self, :enqueue, :<<
26
- def_delegator :self, :full?, :limited?
27
- def_delegator :self, :resize, :scale
27
+ def full? = size >= @limit
28
+ def empty? = @items.empty?
28
29
 
29
- def full?
30
- size >= @limit
31
- end
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
- def_delegator :@channel, :dequeue, :wait
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
- def_delegator :@task, :stop
22
- def_delegator :@block, :call, :execute
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 schedule
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
- schedule
43
+ call
51
44
  break unless @repeat
52
45
  rescue Async::Stop, Async::TimeoutError
53
46
  break
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Async # rubocop:disable Style/ClassAndModuleChildren
4
4
  module Tools
5
- VERSION = "0.1.2"
5
+ VERSION = "0.1.4"
6
6
  end
7
7
  end
@@ -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
- def_delegator :@semaphore, :limit, :workers
31
- def_delegator :@semaphore, :count, :busy
32
-
33
- def_delegator :@task, :wait
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
- def_delegator :@channel, :close, :stop
36
- def_delegator :@channel, :open?, :running?
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 self
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.2
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-04 00:00:00.000000000 Z
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.1
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.