async-job-adapter-active_job 0.3.0 → 0.5.0
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
- checksums.yaml.gz.sig +0 -0
- data/lib/async/job/adapter/active_job/dispatcher.rb +10 -3
- data/lib/async/job/adapter/active_job/{queue_handler.rb → executor.rb} +7 -5
- data/lib/async/job/adapter/active_job/interface.rb +35 -0
- data/lib/async/job/adapter/active_job/railtie.rb +3 -3
- data/lib/async/job/adapter/active_job/service.rb +4 -2
- data/lib/async/job/adapter/active_job/version.rb +1 -1
- data/lib/async/job/adapter/active_job.rb +2 -1
- data/readme.md +1 -1
- data.tar.gz.sig +0 -0
- metadata +8 -9
- metadata.gz.sig +0 -0
- data/lib/async/job/adapter/active_job/builder.rb +0 -72
- data/lib/async/job/adapter/active_job/queue_adapter.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3f95cf52e07f98e11adbedad14d9835f1ba64b6e6a9613b95b638e4d941d7f3
|
4
|
+
data.tar.gz: 56e91d6940e972e039a2f2c7b1e7087e88fda0a1d7d3843e02dd76269da05890
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8a839e220fb8275fdec36ce92d1e032d12c9d81f640f43696e616f12bbb1129137e69b3de1b1f72031edf38f7aa97111952233dbe969ba2df6ae1d71f4d3281
|
7
|
+
data.tar.gz: ed9c0bc33a45762edaf8744f62148e9d690ef769d88ae18ebac6bc5cc258f1fe6dac8bf9bbee98e4bb175e1ac39c570af6f17be4ad3ffdb28e953d847cd0b2f0
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
@@ -6,7 +6,7 @@
|
|
6
6
|
require 'async/job'
|
7
7
|
require 'thread/local'
|
8
8
|
|
9
|
-
|
9
|
+
require 'async/job/builder'
|
10
10
|
|
11
11
|
module Async
|
12
12
|
module Job
|
@@ -25,6 +25,8 @@ module Async
|
|
25
25
|
attr :aliases
|
26
26
|
|
27
27
|
def [](name)
|
28
|
+
name = name.to_sym
|
29
|
+
|
28
30
|
@pipelines.fetch(name) do
|
29
31
|
backend = @backends.fetch(name)
|
30
32
|
@pipelines[name] = build(backend)
|
@@ -48,11 +50,16 @@ module Async
|
|
48
50
|
end
|
49
51
|
|
50
52
|
private def build(backend)
|
51
|
-
builder = Builder.new
|
53
|
+
builder = Builder.new(Executor::DEFAULT)
|
52
54
|
|
53
55
|
builder.instance_eval(&backend)
|
54
56
|
|
55
|
-
builder.build
|
57
|
+
builder.build do |producer|
|
58
|
+
# Ensure that the producer is an interface:
|
59
|
+
unless producer.is_a?(Interface)
|
60
|
+
Interface.new(producer)
|
61
|
+
end
|
62
|
+
end
|
56
63
|
end
|
57
64
|
end
|
58
65
|
end
|
@@ -9,17 +9,19 @@ module Async
|
|
9
9
|
module Job
|
10
10
|
module Adapter
|
11
11
|
module ActiveJob
|
12
|
-
class
|
13
|
-
def initialize(
|
14
|
-
@
|
12
|
+
class Executor
|
13
|
+
def initialize(delegate = nil)
|
14
|
+
@delegate = delegate
|
15
15
|
end
|
16
16
|
|
17
17
|
def call(job)
|
18
|
-
job
|
19
|
-
Console.info(self, "Calling job...", id: job[:job_id])
|
18
|
+
Console.info(self, "Executing job...", id: job[:job_id])
|
20
19
|
::ActiveJob::Base.execute(job)
|
20
|
+
|
21
|
+
@delegate&.call(job)
|
21
22
|
end
|
22
23
|
|
24
|
+
# The default executor, at the end of the pipeline.
|
23
25
|
DEFAULT = self.new.freeze
|
24
26
|
end
|
25
27
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2024, by Samuel Williams.
|
5
|
+
|
6
|
+
module Async
|
7
|
+
module Job
|
8
|
+
module Adapter
|
9
|
+
module ActiveJob
|
10
|
+
class Interface
|
11
|
+
def initialize(delegate)
|
12
|
+
@delegate = delegate
|
13
|
+
end
|
14
|
+
|
15
|
+
def enqueue(job)
|
16
|
+
Console.info(self, "Enqueueing job...", id: job.job_id)
|
17
|
+
@delegate.call(serialize(job))
|
18
|
+
end
|
19
|
+
|
20
|
+
def enqueue_at(job, timestamp)
|
21
|
+
# We assume the given timestamp is the same as `job.scheduled_at` which is true in every case we've seen so far.
|
22
|
+
Console.info(self, "Scheduling job...", id: job.job_id, scheduled_at: job.scheduled_at)
|
23
|
+
@delegate.call(serialize(job))
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
def serialize(job)
|
29
|
+
job.serialize
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -17,12 +17,12 @@ module Async
|
|
17
17
|
module Adapter
|
18
18
|
module ActiveJob
|
19
19
|
class Railtie < ::Rails::Railtie
|
20
|
-
|
21
|
-
queue Async::Job::Backend::
|
20
|
+
DEFAULT_PIPELINE = proc do
|
21
|
+
queue Async::Job::Backend::Inline
|
22
22
|
end
|
23
23
|
|
24
24
|
def initialize
|
25
|
-
@backends = {default:
|
25
|
+
@backends = {default: DEFAULT_PIPELINE}
|
26
26
|
@aliases = {}
|
27
27
|
end
|
28
28
|
|
@@ -12,16 +12,18 @@ module Async
|
|
12
12
|
class Service < Async::Service::Generic
|
13
13
|
def self.each
|
14
14
|
yield :service_class, self
|
15
|
+
yield :queue_name, :default
|
15
16
|
end
|
16
17
|
|
17
18
|
def setup(container)
|
18
19
|
container.run(name: self.name, restart: true) do |instance|
|
19
|
-
|
20
|
+
evaluator = @environment.evaluator
|
21
|
+
require File.expand_path('config/environment', evaluator.root)
|
20
22
|
|
21
23
|
instance.ready!
|
22
24
|
|
23
25
|
Sync do
|
24
|
-
Railtie
|
26
|
+
Railtie.start(evaluator.queue_name)
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
@@ -4,5 +4,6 @@
|
|
4
4
|
# Copyright, 2024, by Samuel Williams.
|
5
5
|
|
6
6
|
require_relative 'active_job/version'
|
7
|
-
require_relative 'active_job/
|
7
|
+
require_relative 'active_job/interface'
|
8
|
+
require_relative 'active_job/executor'
|
8
9
|
require_relative "active_job/railtie" if defined?(Rails::Railtie)
|
data/readme.md
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: async-job-adapter-active_job
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
@@ -37,22 +37,22 @@ cert_chain:
|
|
37
37
|
Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
|
38
38
|
voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
|
39
39
|
-----END CERTIFICATE-----
|
40
|
-
date: 2024-02-
|
40
|
+
date: 2024-02-26 00:00:00.000000000 Z
|
41
41
|
dependencies:
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: async-job
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: 0.4.1
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - "
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: 0.4.1
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: thread-local
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -74,10 +74,9 @@ extensions: []
|
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
76
|
- lib/async/job/adapter/active_job.rb
|
77
|
-
- lib/async/job/adapter/active_job/builder.rb
|
78
77
|
- lib/async/job/adapter/active_job/dispatcher.rb
|
79
|
-
- lib/async/job/adapter/active_job/
|
80
|
-
- lib/async/job/adapter/active_job/
|
78
|
+
- lib/async/job/adapter/active_job/executor.rb
|
79
|
+
- lib/async/job/adapter/active_job/interface.rb
|
81
80
|
- lib/async/job/adapter/active_job/railtie.rb
|
82
81
|
- lib/async/job/adapter/active_job/service.rb
|
83
82
|
- lib/async/job/adapter/active_job/version.rb
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,72 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Released under the MIT License.
|
4
|
-
# Copyright, 2024, by Samuel Williams.
|
5
|
-
|
6
|
-
require_relative 'queue_adapter'
|
7
|
-
require_relative 'queue_handler'
|
8
|
-
|
9
|
-
module Async
|
10
|
-
module Job
|
11
|
-
module Adapter
|
12
|
-
module ActiveJob
|
13
|
-
class Builder
|
14
|
-
Pipeline = Struct.new(:adapter, :queue)
|
15
|
-
|
16
|
-
def initialize
|
17
|
-
@enqueue = []
|
18
|
-
@dequeue = []
|
19
|
-
@handler = QueueHandler::DEFAULT
|
20
|
-
|
21
|
-
@queue = nil
|
22
|
-
end
|
23
|
-
|
24
|
-
def enqueue(middleware)
|
25
|
-
@enqueue << middleware
|
26
|
-
end
|
27
|
-
|
28
|
-
def queue(queue, *arguments, **options)
|
29
|
-
# The handler is the output side of the queue, e.g. a QueueHandler or similar wrapper.
|
30
|
-
# The queue itself is instantiated with the handler.
|
31
|
-
@queue = ->(handler){queue.new(handler, *arguments, **options)}
|
32
|
-
end
|
33
|
-
|
34
|
-
def dequeue(middleware)
|
35
|
-
@dequeue << middleware
|
36
|
-
end
|
37
|
-
|
38
|
-
def handler(handler)
|
39
|
-
@handler = handler
|
40
|
-
end
|
41
|
-
|
42
|
-
def build
|
43
|
-
# To construct the queue, we need the handler.
|
44
|
-
handler = @handler
|
45
|
-
|
46
|
-
# We then wrap the handler with the middleware in reverse order:
|
47
|
-
@dequeue.reverse_each do |middleware|
|
48
|
-
handler = middleware.new(handler)
|
49
|
-
end
|
50
|
-
|
51
|
-
# We can now construct the queue with the handler:
|
52
|
-
queue = @queue.call(handler)
|
53
|
-
|
54
|
-
adapter = queue
|
55
|
-
|
56
|
-
# We now construct the queue adapter:
|
57
|
-
adapter = @enqueue.reverse_each do |middleware|
|
58
|
-
adapter = middleware.new(queue)
|
59
|
-
end
|
60
|
-
|
61
|
-
unless adapter.is_a?(QueueAdapter)
|
62
|
-
adapter = QueueAdapter.new(adapter)
|
63
|
-
end
|
64
|
-
|
65
|
-
# The adapter is the part we provide to ActiveJob, and the handler is the part that actually executes the job:
|
66
|
-
return Pipeline.new(adapter, queue)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Released under the MIT License.
|
4
|
-
# Copyright, 2024, by Samuel Williams.
|
5
|
-
|
6
|
-
module Async
|
7
|
-
module Job
|
8
|
-
module Adapter
|
9
|
-
module ActiveJob
|
10
|
-
class QueueAdapter
|
11
|
-
def initialize(server, coder = JSON)
|
12
|
-
@server = server
|
13
|
-
@coder = coder
|
14
|
-
end
|
15
|
-
|
16
|
-
def enqueue(job)
|
17
|
-
Console.info(self, "Enqueueing job...", id: job.job_id)
|
18
|
-
@server.enqueue(@coder.dump(job.serialize))
|
19
|
-
end
|
20
|
-
|
21
|
-
def enqueue_at(job, timestamp)
|
22
|
-
Console.info(self, "Enqueueing job at...", id: job.job_id, timestamp: timestamp)
|
23
|
-
@server.schedule(@coder.dump(job.serialize), timestamp)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|