async-tools 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c932cc042b383d96a46b23e5408bfa3e7d5fc0335697b07ef820877ec63f609
4
- data.tar.gz: 1fbc66539da99ffe84df7c9d0848f4b7e9b630e3c0363048e743f1ce7235153d
3
+ metadata.gz: a05bbd8284edda00d7140ae6588172eab1f48bd332f97a9d756998eb90a00e17
4
+ data.tar.gz: 901bca393e34574da6ea8174faf41840b75b8608e98567c84678ca5d610e3056
5
5
  SHA512:
6
- metadata.gz: 9fe734ca6e18f71dc08c776220b6d4ccaf6812e110903393d58ecb1f5bc21c8c6a84ba11fc47ba0c7d15f9708625de7eb3654330aa2cdd4208129b2722ca87ca
7
- data.tar.gz: b8ab8eb40ec6a8d85be5d6768a562e10a6a2a9746b8d44a515394a82a3d42473b4b4cf3c1ab0cd80e7311479abed0b28d7a4cb6dd8fe9aa67d42473f4122e401
6
+ metadata.gz: 45fbc58b2cb4a21b01432aa05c5815cf2b7b6bf96ae7aef9938a6f6f75d79a9678b97f9cc5df84ec04612738cf443ba66686cdf06479953ca29c0a3d258d8d72
7
+ data.tar.gz: 30017b77fcfaa7c497aa913ddf0798d573e8c89f36f32775bc11c8ac1fbf3066a8ac3b9387c5fcaab2b5f956c6b770855a18476fd0afd22ba6c94959c1a4bc19
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.3)
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,19 @@ 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
 
36
+ run_on_start = @run_on_start || run
37
+
45
38
  @active = true
46
39
 
40
+ call if run_on_start
41
+
47
42
  @task = @parent.async do
48
43
  loop do
49
44
  @parent.sleep(@delay)
50
- schedule
45
+ call
51
46
  break unless @repeat
52
47
  rescue Async::Stop, Async::TimeoutError
53
48
  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.3"
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.3
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-15 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.