async-job-adapter-active_job 0.8.0 → 0.10.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 +25 -25
- data/lib/async/job/adapter/active_job/executor.rb +1 -1
- data/lib/async/job/adapter/active_job/interface.rb +1 -1
- data/lib/async/job/adapter/active_job/railtie.rb +20 -19
- 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: f9886f60d5b9890346ead69e741f0da9a280faced6208442e0008b0d7464295c
|
4
|
+
data.tar.gz: 349d465199ec1868eb2ad419a75ca5ba7c804b5b0971e141e94ff970da227f7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6475379ef3db21705f7f2c05537f676a49f6a2c0e28200dc70840126acff35fff2b0478b51c876ef17be9f7730a1fc1d7b41b33ffa793fe9d485bf886e98e520
|
7
|
+
data.tar.gz: e82114719fe5cd8b86c5eff0cb3d0966f846de8e795c5d75a604a81e839cae88de258cf56d36035046807cca6e2adb0d8e77b6679357311536bec092c6ba65de
|
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
|
-
#
|
36
|
-
# @parameter name [String] The name of the
|
35
|
+
# Look up a queue by name, constructing it if necessary using the given definition.
|
36
|
+
# @parameter name [String] The name of the queue.
|
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
|
-
# Start processing jobs in the given
|
58
|
+
# Start processing jobs in the given queue.
|
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
|
@@ -7,7 +7,7 @@ module Async
|
|
7
7
|
module Job
|
8
8
|
module Adapter
|
9
9
|
module ActiveJob
|
10
|
-
# An interface for `ActiveJob` that allows you to use `Async::Job` as the
|
10
|
+
# An interface for `ActiveJob` that allows you to use `Async::Job` as the queue.
|
11
11
|
class Interface
|
12
12
|
def initialize(delegate)
|
13
13
|
@delegate = delegate
|
@@ -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
|
|
@@ -16,53 +16,53 @@ module Async
|
|
16
16
|
module Job
|
17
17
|
module Adapter
|
18
18
|
module ActiveJob
|
19
|
-
# A Rails-specific adapter for `ActiveJob` that allows you to use `Async::Job` as the
|
19
|
+
# A Rails-specific adapter for `ActiveJob` that allows you to use `Async::Job` as the queue.
|
20
20
|
class Railtie < ::Rails::Railtie
|
21
|
-
# The default
|
22
|
-
|
23
|
-
|
21
|
+
# The default queue definition for processing jobs, using the `Inline` backend.
|
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)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
# Define an alias for a
|
49
|
+
# Define an alias for a queue.
|
50
50
|
def alias_for(name, *aliases)
|
51
51
|
aliases.each do |alias_name|
|
52
52
|
@aliases[alias_name] = name
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
# Used for dispatching jobs to a thread-local
|
56
|
+
# Used for dispatching jobs to a thread-local queue 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.
|
@@ -76,7 +76,7 @@ module Async
|
|
76
76
|
end
|
77
77
|
|
78
78
|
# Start processing jobs in the queue with the given name.
|
79
|
-
# @parameter name [String] The name of the
|
79
|
+
# @parameter name [String] The name of the queue.
|
80
80
|
def start(name)
|
81
81
|
dispatcher.start(name)
|
82
82
|
end
|
@@ -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.10.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
|