async-job 0.6.0 → 0.7.0

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: 6aa1dbd39e225aaa055f15ffb7976669c500ce4e6a803262356f47ad026a826b
4
- data.tar.gz: c594059b63317a346fac7b7780ea99f633ab2f94c9bd20ede9bdd80c2b310f47
3
+ metadata.gz: 75714ead23077e752af18aead579e3590187f0119a564024e0dbafe1f8c0ed82
4
+ data.tar.gz: bb3d48e293245743b6f9316f250a52f274c9c27928ba869551344ee1b83390f5
5
5
  SHA512:
6
- metadata.gz: 73f4fe066ea17811d637a00592b34dc51c350287e1ffe7f73e7ae98dd3413800685804ec70b1038eca718ee353d36c41afcaf77752ed237c726aadff60545a2d
7
- data.tar.gz: b9e0dc1720b5f4bc8eb920a265e41a8a95bcdcf3db2694fdfd358fe9a62d3752b371c680acefebf1bfb12012e50440e216139725888391580180b4dc79de059e
6
+ metadata.gz: a28a7f19901b8376570e47963bd0aa3d10ba7c16440058d6da0dd74136ee7937448e4c3175ada2aad0a313540b963d6c7a17354c457c81960ade593570d35439
7
+ data.tar.gz: 82048073802bd9cfa18c29142e979e57af45f4916a62d41e327f688dbfce6be2f8ca7293db5df087458c2fff8212c878dd35611ea13730f885e8557351760e02
checksums.yaml.gz.sig CHANGED
Binary file
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2024, by Samuel Williams.
5
+
6
+ require 'console/event/failure'
7
+
8
+ module Async
9
+ module Job
10
+ module Backend
11
+ module Aggregate
12
+ class Server
13
+ def initialize(delegate, parent: nil)
14
+ @delegate = delegate
15
+
16
+ @task = nil
17
+ @ready = Async::Condition.new
18
+
19
+ @pending = Array.new
20
+ @processing = Array.new
21
+ end
22
+
23
+ def flush(jobs)
24
+ while job = jobs.shift
25
+ @delegate.call(job)
26
+ end
27
+ rescue => error
28
+ Console::Event::Failure.for(error).emit(self, "Could not flush #{jobs.size} jobs.")
29
+ end
30
+
31
+ def run
32
+ while true
33
+ while @pending.empty?
34
+ @ready.wait
35
+ end
36
+
37
+ # Swap the buffers:
38
+ @pending, @processing = @processing, @pending
39
+
40
+ flush(@processing)
41
+ end
42
+ end
43
+
44
+ def start!(parent: Async::Task.current)
45
+ @task ||= parent.async(transient: true) do
46
+ run
47
+ ensure
48
+ # Ensure that all jobs are flushed before we exit:
49
+ flush(@pending)
50
+ flush(@processing)
51
+ end
52
+ end
53
+
54
+ def call(job)
55
+ start!
56
+
57
+ @pending << job
58
+ @ready.signal
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2024, by Samuel Williams.
5
+
6
+ require_relative 'aggregate/server'
7
+
8
+ module Async
9
+ module Job
10
+ module Backend
11
+ module Aggregate
12
+ def self.new(delegate)
13
+ return Server.new(delegate)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -5,6 +5,6 @@
5
5
 
6
6
  module Async
7
7
  module Job
8
- VERSION = "0.6.0"
8
+ VERSION = "0.7.0"
9
9
  end
10
10
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-job
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -38,7 +38,7 @@ cert_chain:
38
38
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
39
39
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
40
40
  -----END CERTIFICATE-----
41
- date: 2024-08-02 00:00:00.000000000 Z
41
+ date: 2024-08-03 00:00:00.000000000 Z
42
42
  dependencies:
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: async
@@ -76,6 +76,8 @@ extra_rdoc_files: []
76
76
  files:
77
77
  - lib/async/job.rb
78
78
  - lib/async/job/backend.rb
79
+ - lib/async/job/backend/aggregate.rb
80
+ - lib/async/job/backend/aggregate/server.rb
79
81
  - lib/async/job/backend/inline.rb
80
82
  - lib/async/job/backend/inline/server.rb
81
83
  - lib/async/job/backend/redis.rb
metadata.gz.sig CHANGED
Binary file