async-job-adapter-active_job 0.4.0 → 0.5.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: e85a0785c19d351e69e11d2a90c9721efaba1911d8a8d27f3f1d49c44171a71e
4
- data.tar.gz: b32e507ccee493d1c00b2369fa8e754330d312eb3ab0bf060fc1c0dc7ef1ae8e
3
+ metadata.gz: f3f95cf52e07f98e11adbedad14d9835f1ba64b6e6a9613b95b638e4d941d7f3
4
+ data.tar.gz: 56e91d6940e972e039a2f2c7b1e7087e88fda0a1d7d3843e02dd76269da05890
5
5
  SHA512:
6
- metadata.gz: 3a0460d622a76a432ea6bf92c1f7c3c7bcf6124aa2708a71d1a7ed027fc88dc2eab6a80fd3b58292ef9d5e8d371489adad0ed1354caab4aaccf6aad6648331bf
7
- data.tar.gz: 2665fe4ee80f3c638157d28297c4a3fe7cb27974ea7ff4ca11d78a8a367fc2ea7611e4dabf89f853dadcffeb7b1ca42f5fdb851775a629acb27117a35a8e497f
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
- require_relative 'builder'
9
+ require 'async/job/builder'
10
10
 
11
11
  module Async
12
12
  module Job
@@ -50,11 +50,16 @@ module Async
50
50
  end
51
51
 
52
52
  private def build(backend)
53
- builder = Builder.new
53
+ builder = Builder.new(Executor::DEFAULT)
54
54
 
55
55
  builder.instance_eval(&backend)
56
56
 
57
- 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
58
63
  end
59
64
  end
60
65
  end
@@ -9,17 +9,19 @@ module Async
9
9
  module Job
10
10
  module Adapter
11
11
  module ActiveJob
12
- class QueueHandler
13
- def initialize(coder = JSON)
14
- @coder = coder
12
+ class Executor
13
+ def initialize(delegate = nil)
14
+ @delegate = delegate
15
15
  end
16
16
 
17
17
  def call(job)
18
- job = @coder.load(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
- DEFAULT_REDIS = proc do
21
- queue Async::Job::Backend::Redis
20
+ DEFAULT_PIPELINE = proc do
21
+ queue Async::Job::Backend::Inline
22
22
  end
23
23
 
24
24
  def initialize
25
- @backends = {default: DEFAULT_REDIS}
25
+ @backends = {default: DEFAULT_PIPELINE}
26
26
  @aliases = {}
27
27
  end
28
28
 
@@ -7,7 +7,7 @@ module Async
7
7
  module Job
8
8
  module Adapter
9
9
  module ActiveJob
10
- VERSION = "0.4.0"
10
+ VERSION = "0.5.0"
11
11
  end
12
12
  end
13
13
  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/queue_adapter'
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
@@ -32,7 +32,7 @@ $ bundle exec ./job-server.rb
32
32
 
33
33
  ### Configuration
34
34
 
35
- ```ruby
35
+ ``` ruby
36
36
  Rails.application.configure do
37
37
  config.async_job.backend_for :default, :critical do
38
38
  queue Async::Job::Backend::Redis, endpoint: Async::IO::Endpoint.tcp('redis.local')
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.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-25 00:00:00.000000000 Z
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: '0'
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: '0'
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/queue_adapter.rb
80
- - lib/async/job/adapter/active_job/queue_handler.rb
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
- @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