async-job-adapter-active_job 0.8.0 → 0.9.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 +22 -22
- data/lib/async/job/adapter/active_job/railtie.rb +15 -14
- data/lib/async/job/adapter/active_job/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +3 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fc827732ecf5a8411767537e45e6dfe818ca807cd5a5bafadf258bbbccebe01
|
4
|
+
data.tar.gz: 295799259e5dd60f48b70203a6051386349e23248961a960526167b00ed5fb98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfc8bead67d201f1ead504441be4d313bafdbde78a7987501edbee194dabdc77feeaae02b34dc3a407c9c16509f26eea0c1e9d43a2495d42dae47d4e6f17364d
|
7
|
+
data.tar.gz: c3edbf51797ac06519dcb93cb1ba25ec351a85703b6e90c1632b77614c8ac1f5fb190954ce8e92fe54301b6c5aa65cc887f2f09783cb3f896a33d02a150ed3e0
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
@@ -14,30 +14,30 @@ module Async
|
|
14
14
|
module Job
|
15
15
|
module Adapter
|
16
16
|
module ActiveJob
|
17
|
-
# A dispatcher for managing multiple
|
17
|
+
# A dispatcher for managing multiple definitions.
|
18
18
|
class Dispatcher
|
19
|
-
# Prepare the dispacher with the given
|
20
|
-
# @parameter
|
21
|
-
# @parameter aliases [Hash(String, Proc)] The aliases for the
|
22
|
-
def initialize(
|
23
|
-
@
|
19
|
+
# Prepare the dispacher with the given definitions and aliases.
|
20
|
+
# @parameter definitions [Hash(String, Proc)] The definitions to use constructing queues.
|
21
|
+
# @parameter aliases [Hash(String, Proc)] The aliases for the definitions.
|
22
|
+
def initialize(definitions, aliases = {})
|
23
|
+
@definitions = definitions
|
24
24
|
@aliases = aliases
|
25
25
|
|
26
|
-
@
|
26
|
+
@queues = {}
|
27
27
|
end
|
28
28
|
|
29
|
-
# @attribute [Hash(String, Proc)] The
|
30
|
-
attr :
|
29
|
+
# @attribute [Hash(String, Proc)] The definitions to use for processing jobs.
|
30
|
+
attr :definitions
|
31
31
|
|
32
|
-
# @attribute [Hash(String, String)] The aliases for the
|
32
|
+
# @attribute [Hash(String, String)] The aliases for the definitions.
|
33
33
|
attr :aliases
|
34
34
|
|
35
35
|
# Lookup a pipeline by name, constructing it if necessary using the given backend.
|
36
36
|
# @parameter name [String] The name of the pipeline/backend.
|
37
37
|
def [](name)
|
38
|
-
@
|
39
|
-
|
40
|
-
@
|
38
|
+
@queues.fetch(name) do
|
39
|
+
definition = @definitions.fetch(name)
|
40
|
+
@queues[name] = build(definition)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
@@ -45,30 +45,30 @@ module Async
|
|
45
45
|
def enqueue(job)
|
46
46
|
name = @aliases.fetch(job.queue_name, job.queue_name)
|
47
47
|
|
48
|
-
self[name].
|
48
|
+
self[name].client.enqueue(job)
|
49
49
|
end
|
50
50
|
|
51
51
|
# Enqueue a job for processing at a specific time.
|
52
52
|
def enqueue_at(job, timestamp)
|
53
53
|
name = @aliases.fetch(job.queue_name, job.queue_name)
|
54
54
|
|
55
|
-
self[name].
|
55
|
+
self[name].client.enqueue_at(job, timestamp)
|
56
56
|
end
|
57
57
|
|
58
58
|
# Start processing jobs in the given pipeline.
|
59
59
|
def start(name)
|
60
|
-
self[name].
|
60
|
+
self[name].server.start
|
61
61
|
end
|
62
62
|
|
63
|
-
private def build(
|
63
|
+
private def build(definition)
|
64
64
|
builder = Builder.new(Executor::DEFAULT)
|
65
65
|
|
66
|
-
builder.instance_eval(&
|
66
|
+
builder.instance_eval(&definition)
|
67
67
|
|
68
|
-
builder.build do |
|
69
|
-
# Ensure that the
|
70
|
-
unless
|
71
|
-
Interface.new(
|
68
|
+
builder.build do |client|
|
69
|
+
# Ensure that the client is an interface:
|
70
|
+
unless client.is_a?(Interface)
|
71
|
+
Interface.new(client)
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# Copyright, 2024, by Samuel Williams.
|
5
5
|
|
6
6
|
require 'async/job'
|
7
|
-
require 'async/job/
|
7
|
+
require 'async/job/processor/inline'
|
8
8
|
|
9
9
|
require 'thread/local'
|
10
10
|
|
@@ -19,27 +19,27 @@ module Async
|
|
19
19
|
# A Rails-specific adapter for `ActiveJob` that allows you to use `Async::Job` as the backend.
|
20
20
|
class Railtie < ::Rails::Railtie
|
21
21
|
# The default pipeline for processing jobs, using the `Inline` backend.
|
22
|
-
|
23
|
-
|
22
|
+
DEFAULT_QUEUE_DEFINITION = proc do
|
23
|
+
dequeue Processor::Inline
|
24
24
|
end
|
25
25
|
|
26
26
|
def initialize
|
27
|
-
@
|
27
|
+
@definitions = {"default" => DEFAULT_QUEUE_DEFINITION}
|
28
28
|
@aliases = {}
|
29
29
|
end
|
30
30
|
|
31
|
-
# The
|
32
|
-
attr :
|
31
|
+
# The queues that are available for processing jobs.
|
32
|
+
attr :definitions
|
33
33
|
|
34
|
-
# The aliases for the
|
34
|
+
# The aliases for the definitions, if any.
|
35
35
|
attr :aliases
|
36
36
|
|
37
37
|
# Define a new backend for processing jobs.
|
38
38
|
# @parameter name [String] The name of the backend.
|
39
39
|
# @parameter aliases [Array(String)] The aliases for the backend.
|
40
40
|
# @parameter block [Proc] The block that defines the backend.
|
41
|
-
def
|
42
|
-
@
|
41
|
+
def queue_for(name, *aliases, &block)
|
42
|
+
@definitions[name] = block
|
43
43
|
|
44
44
|
if aliases.any?
|
45
45
|
alias_for(name, *aliases)
|
@@ -55,14 +55,14 @@ module Async
|
|
55
55
|
|
56
56
|
# Used for dispatching jobs to a thread-local backend to avoid thread-safety issues.
|
57
57
|
class ThreadLocalDispatcher
|
58
|
-
def initialize(
|
59
|
-
@
|
58
|
+
def initialize(definitions, aliases)
|
59
|
+
@definitions = definitions
|
60
60
|
@aliases = aliases
|
61
61
|
end
|
62
62
|
|
63
63
|
# The dispatcher for the current thread.
|
64
64
|
def dispatcher
|
65
|
-
Thread.current.async_job_adapter_active_job_dispatcher ||= Dispatcher.new(@
|
65
|
+
Thread.current.async_job_adapter_active_job_dispatcher ||= Dispatcher.new(@definitions, @aliases)
|
66
66
|
end
|
67
67
|
|
68
68
|
# Enqueue a job to be processed at a specific time.
|
@@ -87,10 +87,11 @@ module Async
|
|
87
87
|
config.active_job.queue_adapter.start(name)
|
88
88
|
end
|
89
89
|
|
90
|
-
|
90
|
+
DEFAULT_DISPATCHER = ThreadLocalDispatcher.new(self.definitions, self.aliases)
|
91
91
|
|
92
92
|
config.async_job = self
|
93
|
-
|
93
|
+
|
94
|
+
config.active_job.queue_adapter = DEFAULT_DISPATCHER
|
94
95
|
end
|
95
96
|
end
|
96
97
|
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-adapter-active_job
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
@@ -45,14 +45,14 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '0.
|
48
|
+
version: '0.9'
|
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: '0.
|
55
|
+
version: '0.9'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: async-service
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
metadata.gz.sig
CHANGED
Binary file
|