async-job-adapter-active_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: 37290d3cfe5fd027791f3789dd53094e0ce4cbb5923933072dd2d1b3a01f806a
4
- data.tar.gz: 7365c94254728a5be3e8c3215338f6afccd189a837349cda3835c221d42c417f
3
+ metadata.gz: 65f9e22e242a8c2d9c96fd81e52e5e4ec0d4eeddda402544f808b59d3633cbdb
4
+ data.tar.gz: e1cf84731daf4ec7d0739fce4d205544c66a111a753b4817939379d816a22a1c
5
5
  SHA512:
6
- metadata.gz: 518dd58363f88565bc7ce20625bdd3b851012af3b92b772eb236630669c11e662c0012364aeaf5afc901107cd62b4a6fe72cf10deb01984c822ab00aba6dfad9
7
- data.tar.gz: 7b8c08c2ec99ea1f2847a1fd01029870b92571c6da41cf9733ba38df489e01de4a17ca4b361976c6f08bbac3bcd67723c0e351e4b7745171509875d6addf0a48
6
+ metadata.gz: 7cbb5ac1d912f5a1e59ab1d781f8caf3d5de955722195bf407301c1a6bb49a2933d94e3315ad14aa102986be58b70b7b0260e3a8f11b6770c9d30b4b1d1f074a
7
+ data.tar.gz: 575b40692b1d57984bae97ab7308a194821733299beb0efc03d9d53ba05a9b45a30138c4412d1e0404622c12c95ac4add153118f5fe86374e7423dfc4d40ace8
checksums.yaml.gz.sig CHANGED
Binary file
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'async/service/configuration'
4
+ require 'async/service/controller'
5
+
6
+ require 'async/job/adapter/active_job/environment'
7
+
8
+ configuration = Async::Service::Configuration.build do
9
+ service "async-job-server" do
10
+ include Async::Job::Adapter::ActiveJob::Environment
11
+
12
+ root {ENV.fetch('RAILS_ROOT', Dir.pwd)}
13
+
14
+ # If you have multiple queues, you may want to run a separate server for each queue.
15
+ queue_name ENV.fetch('ASYNC_JOB_ADAPTER_ACTIVE_JOB_QUEUE_NAME', 'default')
16
+ end
17
+ end
18
+
19
+ Async::Service::Controller.run(configuration)
@@ -14,7 +14,11 @@ module Async
14
14
  module Job
15
15
  module Adapter
16
16
  module ActiveJob
17
+ # A dispatcher for managing multiple backends.
17
18
  class Dispatcher
19
+ # Prepare the dispacher with the given backends and aliases.
20
+ # @parameter backends [Hash(String, Proc)] The backends to use for processing jobs.
21
+ # @parameter aliases [Hash(String, Proc)] The aliases for the backends.
18
22
  def initialize(backends, aliases = {})
19
23
  @backends = backends
20
24
  @aliases = aliases
@@ -22,10 +26,14 @@ module Async
22
26
  @pipelines = {}
23
27
  end
24
28
 
29
+ # @attribute [Hash(String, Proc)] The backends to use for processing jobs.
25
30
  attr :backends
26
31
 
32
+ # @attribute [Hash(String, String)] The aliases for the backends.
27
33
  attr :aliases
28
34
 
35
+ # Lookup a pipeline by name, constructing it if necessary using the given backend.
36
+ # @parameter name [String] The name of the pipeline/backend.
29
37
  def [](name)
30
38
  @pipelines.fetch(name) do
31
39
  backend = @backends.fetch(name)
@@ -33,18 +41,21 @@ module Async
33
41
  end
34
42
  end
35
43
 
44
+ # Enqueue a job for processing.
36
45
  def enqueue(job)
37
46
  name = @aliases.fetch(job.queue_name, job.queue_name)
38
47
 
39
48
  self[name].producer.enqueue(job)
40
49
  end
41
50
 
51
+ # Enqueue a job for processing at a specific time.
42
52
  def enqueue_at(job, timestamp)
43
53
  name = @aliases.fetch(job.queue_name, job.queue_name)
44
54
 
45
55
  self[name].producer.enqueue_at(job, timestamp)
46
56
  end
47
57
 
58
+ # Start processing jobs in the given pipeline.
48
59
  def start(name)
49
60
  self[name].consumer.start
50
61
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2024, by Samuel Williams.
5
+
6
+ require_relative 'service'
7
+
8
+ module Async
9
+ module Job
10
+ module Adapter
11
+ module ActiveJob
12
+ # The environment for the ActiveJob server.
13
+ module Environment
14
+ # The service class to use.
15
+ def service_class
16
+ Service
17
+ end
18
+
19
+ # The name of the queue to use.
20
+ def queue_name
21
+ "default"
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -9,11 +9,13 @@ module Async
9
9
  module Job
10
10
  module Adapter
11
11
  module ActiveJob
12
+ # An executor for processing jobs using `ActiveJob`.
12
13
  class Executor
13
14
  def initialize(delegate = nil)
14
15
  @delegate = delegate
15
16
  end
16
17
 
18
+ # Execute the given job.
17
19
  def call(job)
18
20
  # Console.debug(self, "Executing job...", id: job["job_id"])
19
21
  ::ActiveJob::Base.execute(job)
@@ -7,16 +7,19 @@ 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 backend.
10
11
  class Interface
11
12
  def initialize(delegate)
12
13
  @delegate = delegate
13
14
  end
14
15
 
16
+ # Enqueue a job for processing.
15
17
  def enqueue(job)
16
18
  # Console.debug(self, "Enqueueing job...", id: job.job_id)
17
19
  @delegate.call(serialize(job))
18
20
  end
19
21
 
22
+ # Enqueue a job for processing at a specific time.
20
23
  def enqueue_at(job, timestamp)
21
24
  # We assume the given timestamp is the same as `job.scheduled_at` which is true in every case we've seen so far.
22
25
  # Console.debug(self, "Scheduling job...", id: job.job_id, scheduled_at: job.scheduled_at)
@@ -8,15 +8,15 @@ require 'thread/local'
8
8
 
9
9
  require_relative 'dispatcher'
10
10
 
11
- class Thread
12
- attr_accessor :async_job_adapter_active_job_dispatcher
13
- end
11
+ Thread.attr_accessor :async_job_adapter_active_job_dispatcher
14
12
 
15
13
  module Async
16
14
  module Job
17
15
  module Adapter
18
16
  module ActiveJob
17
+ # A Rails-specific adapter for `ActiveJob` that allows you to use `Async::Job` as the backend.
19
18
  class Railtie < ::Rails::Railtie
19
+ # The default pipeline for processing jobs, using the `Inline` backend.
20
20
  DEFAULT_PIPELINE = proc do
21
21
  queue Async::Job::Backend::Inline
22
22
  end
@@ -26,10 +26,16 @@ module Async
26
26
  @aliases = {}
27
27
  end
28
28
 
29
+ # The backends that are available for processing jobs.
29
30
  attr :backends
30
31
 
32
+ # The aliases for the backends.
31
33
  attr :aliases
32
34
 
35
+ # Define a new backend for processing jobs.
36
+ # @parameter name [String] The name of the backend.
37
+ # @parameter aliases [Array(String)] The aliases for the backend.
38
+ # @parameter block [Proc] The block that defines the backend.
33
39
  def backend_for(name, *aliases, &block)
34
40
  @backends[name] = block
35
41
 
@@ -38,6 +44,7 @@ module Async
38
44
  end
39
45
  end
40
46
 
47
+ # Define an alias for a backend.
41
48
  def alias_for(name, *aliases)
42
49
  aliases.each do |alias_name|
43
50
  @aliases[alias_name] = name
@@ -51,23 +58,29 @@ module Async
51
58
  @aliases = aliases
52
59
  end
53
60
 
61
+ # The dispatcher for the current thread.
54
62
  def dispatcher
55
63
  Thread.current.async_job_adapter_active_job_dispatcher ||= Dispatcher.new(@backends)
56
64
  end
57
65
 
66
+ # Enqueue a job to be processed at a specific time.
58
67
  def enqueue_at(job, timestamp)
59
68
  dispatcher.enqueue_at(job, timestamp)
60
69
  end
61
70
 
71
+ # Enqueue a job to be processed as soon as possible.
62
72
  def enqueue(job)
63
73
  dispatcher.enqueue(job)
64
74
  end
65
75
 
76
+ # Start processing jobs in the queue with the given name.
77
+ # @parameter name [String] The name of the backend.
66
78
  def start(name)
67
79
  dispatcher.start(name)
68
80
  end
69
81
  end
70
82
 
83
+ # Start the job server with the given name.
71
84
  def start(name = "default")
72
85
  config.active_job.queue_adapter.start(name)
73
86
  end
@@ -9,21 +9,9 @@ module Async
9
9
  module Job
10
10
  module Adapter
11
11
  module ActiveJob
12
+ # A job server that can be run as a service.
12
13
  class Service < Async::Service::Generic
13
- module Environment
14
- def service_class
15
- Service
16
- end
17
-
18
- def queue_name
19
- "default"
20
- end
21
- end
22
-
23
- def self.included(base)
24
- base.include(Environment)
25
- end
26
-
14
+ # Load the Rails environment and start the job server.
27
15
  def setup(container)
28
16
  container.run(name: self.name, restart: true) do |instance|
29
17
  evaluator = @environment.evaluator
@@ -7,7 +7,7 @@ module Async
7
7
  module Job
8
8
  module Adapter
9
9
  module ActiveJob
10
- VERSION = "0.6.0"
10
+ VERSION = "0.7.0"
11
11
  end
12
12
  end
13
13
  end
data/readme.md CHANGED
@@ -6,45 +6,9 @@ Provides an adapter for ActiveJob on top of `Async::Job`.
6
6
 
7
7
  ## Usage
8
8
 
9
- Basically, just add this gem to your gemfile:
9
+ Please see the [project documentation](https://socketry.github.io/async-job-adapter-active_job/) for more details.
10
10
 
11
- ``` shell
12
- $ bundle add async-job-adapter-active_job
13
- ```
14
-
15
- To run a server, create a service file, e.g. `job-server.rb` with the following content:
16
-
17
- ``` ruby
18
- #!/usr/bin/env async-service
19
-
20
- require 'async/job/adapter/active_job/service'
21
-
22
- service "job-server" do
23
- include Async::Job::Adapter::ActiveJob::Service
24
- end
25
- ```
26
-
27
- Then run it:
28
-
29
- ``` shell
30
- $ bundle exec ./job-server.rb
31
- ```
32
-
33
- ### Configuration
34
-
35
- ``` ruby
36
- Rails.application.configure do
37
- config.async_job.backend_for :default, :critical do
38
- queue Async::Job::Backend::Redis, endpoint: Async::IO::Endpoint.tcp('redis.local')
39
- end
40
-
41
- config.async_job.aliases_for :default, :email
42
-
43
- config.async_job.backend_for :local do
44
- queue Async::Job::Backend::Inline
45
- end
46
- end
47
- ```
11
+ - [Getting Started](https://socketry.github.io/async-job-adapter-active_job/guides/getting-started/index) - This guide explains how to get started with the `async-job-active_job-adapter` gem.
48
12
 
49
13
  ## Contributing
50
14
 
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.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -37,7 +37,7 @@ cert_chain:
37
37
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
38
38
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
39
39
  -----END CERTIFICATE-----
40
- date: 2024-03-22 00:00:00.000000000 Z
40
+ date: 2024-04-07 00:00:00.000000000 Z
41
41
  dependencies:
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: async-job
@@ -45,28 +45,28 @@ dependencies:
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: 0.4.1
48
+ version: '0.5'
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.4.1
55
+ version: '0.5'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: async-service
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: 0.8.0
62
+ version: '0.12'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: 0.8.0
69
+ version: '0.12'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: thread-local
72
72
  requirement: !ruby/object:Gem::Requirement
@@ -83,12 +83,15 @@ dependencies:
83
83
  version: '0'
84
84
  description:
85
85
  email:
86
- executables: []
86
+ executables:
87
+ - async-job-adapter-active_job-server
87
88
  extensions: []
88
89
  extra_rdoc_files: []
89
90
  files:
91
+ - bin/async-job-adapter-active_job-server
90
92
  - lib/async/job/adapter/active_job.rb
91
93
  - lib/async/job/adapter/active_job/dispatcher.rb
94
+ - lib/async/job/adapter/active_job/environment.rb
92
95
  - lib/async/job/adapter/active_job/executor.rb
93
96
  - lib/async/job/adapter/active_job/interface.rb
94
97
  - lib/async/job/adapter/active_job/railtie.rb
@@ -96,11 +99,12 @@ files:
96
99
  - lib/async/job/adapter/active_job/version.rb
97
100
  - license.md
98
101
  - readme.md
99
- homepage:
102
+ homepage: https://github.com/socketry/async-job-adapter-active_job
100
103
  licenses:
101
104
  - MIT
102
105
  metadata:
103
- documentation_uri: https://socketry.github.io/async-job-adapter-active_job
106
+ documentation_uri: https://socketry.github.io/async-job-adapter-active_job/
107
+ source_code_uri: https://github.com/socketry/async-job-adapter-active_job.git
104
108
  post_install_message:
105
109
  rdoc_options: []
106
110
  require_paths:
@@ -109,7 +113,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
113
  requirements:
110
114
  - - ">="
111
115
  - !ruby/object:Gem::Version
112
- version: '3.0'
116
+ version: '3.1'
113
117
  required_rubygems_version: !ruby/object:Gem::Requirement
114
118
  requirements:
115
119
  - - ">="
metadata.gz.sig CHANGED
Binary file