que-scheduler 7.2.0 → 8.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bdd3f8eb6dccc6c82cb4ce97f0a64f7acf30394cdc4d7f7f299d86680209777a
4
- data.tar.gz: ac8c0c66d2fb3def5887a6f7cc27b6577c28692b55549fd067e09ad6767fe68e
3
+ metadata.gz: 77e19a08d2c15c1f6c40f0c3b924f5f72316fcf9827e3f99bcfff7a0df759b71
4
+ data.tar.gz: 7be4dbc6187cbbe530540bc64e2f4051f12cb0fc23ca4f69275dfd70d966e828
5
5
  SHA512:
6
- metadata.gz: 384c9a75444bac91293d13f4bcfa9c79418df2b43d537a8707b1996705c27d44d44422a7af90135ec34311d872096fa06a1ac32eefbf5bf770223673019c2606
7
- data.tar.gz: 1f6e7fa846f34937010560a8905c84b56f2e67f87acafd9d0b72d83503f9ec32b36b7ad9c1d77f7396cd7e8ccfe0564a494d2992bb82430fc4ff3cfab76a6f46
6
+ metadata.gz: be271ad6ca3d25ddf106352a44933cb1400381c006d1e7c15b1467093adec05f78e57beaf2eb51cba197ccf30b800561d74eb27d7dee367eb9af2106197c129c
7
+ data.tar.gz: abedfcada9b8fc855542844b2c5325a3d518523176d4070e8e912036934d6118d65e7627cf0c29cada59ca68c3f35eb9705872525a4d349ff7cdd460ba343084
data/README.md CHANGED
@@ -5,7 +5,6 @@ que-scheduler
5
5
  [![specs workflow](https://github.com/hlascelles/que-scheduler/actions/workflows/specs.yml/badge.svg)](https://github.com/hlascelles/que-scheduler/actions)
6
6
  [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
7
7
  [![Coverage Status](https://coveralls.io/repos/github/hlascelles/que-scheduler/badge.svg?branch=master)](https://coveralls.io/github/hlascelles/que-scheduler?branch=master)
8
- [![Code Climate Maintainability](https://api.codeclimate.com/v1/badges/710d2fc5202f95d76e8a/maintainability)](https://codeclimate.com/github/hlascelles/que-scheduler/maintainability)
9
8
 
10
9
  ## Description
11
10
 
@@ -317,9 +316,10 @@ A full changelog can be found here: [CHANGELOG.md](https://github.com/hlascelles
317
316
 
318
317
  ## System requirements
319
318
 
320
- Your [postgres](https://www.postgresql.org/) database must be at least version 9.6.0.
319
+ Your [postgres](https://www.postgresql.org/) database must be at least version 14. que-scheduler is tested against version 17.
321
320
 
322
- The latest version of que-scheduler supports Ruby 3.0 and above.
321
+ The latest version of que-scheduler supports Ruby 4.0 and above, and Rails 8.0 and above.
322
+ que-scheduler versions below 8.0.0 work with Ruby 3.1 and Rails 6.0.
323
323
  que-scheduler versions below 4.4.0 work with Ruby 2.7.
324
324
  que-scheduler versions below 4.2.3 work with Ruby 2.5 and Ruby 2.6.
325
325
 
@@ -1,6 +1,5 @@
1
1
  # typed: true
2
2
 
3
- require "pathname"
4
3
  require "que"
5
4
  require "sorbet-runtime"
6
5
  require_relative "db_support"
@@ -19,14 +19,12 @@ module Que
19
19
  sig { params(enqueued_job: Que::Job).returns(Integer) }
20
20
  def job_id(enqueued_job) = T.cast(job_attributes(enqueued_job).fetch(:job_id), Integer)
21
21
 
22
- # Between Que versions the result of Que execute changed keys from strings to symbols.
23
- # Here we wrap the concept and make sure either way produces symbols
24
22
  sig do
25
23
  params(str: String, args: T::Array[T.anything])
26
24
  .returns(T::Array[T::Hash[Symbol, T.anything]])
27
25
  end
28
26
  def execute(str, args = [])
29
- normalise_array_of_hashes(Que.execute(str, args))
27
+ T.cast(Que.execute(str, args), T::Array[T::Hash[Symbol, T.anything]])
30
28
  end
31
29
 
32
30
  sig do
@@ -55,11 +53,6 @@ module Que
55
53
  private def que_version_object
56
54
  @que_version_object ||= T.must(Gem.loaded_specs["que"]).version
57
55
  end
58
-
59
- sig { params(array: T::Array[T.anything]).returns(T::Array[T::Hash[Symbol, T.anything]]) }
60
- private def normalise_array_of_hashes(array)
61
- array.map { |row| T.cast(row, T::Hash[T.any(String, Symbol), T.anything]).to_h.transform_keys(&:to_sym) }
62
- end
63
56
  end
64
57
  end
65
58
  end
@@ -8,7 +8,7 @@ require_relative "types"
8
8
  # This is the definition of one scheduleable job in the que-scheduler config yml file.
9
9
  module Que
10
10
  module Scheduler
11
- class DefinedJob < Hashie::Dash # rubocop:disable Metrics/ClassLength -- shrinks with T::Struct
11
+ class DefinedJob < Hashie::Dash
12
12
  include Hashie::Extensions::Dash::PropertyTranslation
13
13
  extend T::Sig
14
14
 
@@ -91,29 +91,9 @@ module Que
91
91
  sig { params(options: T::Hash[Symbol, T.anything]).void }
92
92
  private def validate_job_class_related(options)
93
93
  # Only support known job engines
94
- unless Que::Scheduler::ToEnqueue.valid_job_class?(job_class)
95
- err_field(:job_class, options, "Job #{job_class} was not a supported job type")
96
- end
94
+ return if Que::Scheduler::ToEnqueue.valid_job_class?(job_class)
97
95
 
98
- # queue name is only supported for a subrange of ActiveJob versions. Print this out as a
99
- # warning.
100
- if queue &&
101
- Que::Scheduler::ToEnqueue.active_job_defined? &&
102
- job_class < ::ActiveJob::Base &&
103
- T.must(Que::Scheduler::ToEnqueue.active_job_version) < Gem::Version.create("6.0.3")
104
- puts <<~ERR
105
- WARNING from que-scheduler....
106
- Between versions 4.2.3 and 6.0.2 (inclusive) Rails did not support setting queue names
107
- on que jobs with ActiveJob, so que-scheduler cannot support it.
108
- See removed in Rails 4.2.3
109
- https://github.com/rails/rails/pull/19498
110
- And readded in Rails 6.0.3
111
- https://github.com/rails/rails/pull/38635
112
-
113
- Please remove all "queue" keys from ActiveJobs defined in the que-scheduler.yml config.
114
- Specifically #{queue} for job #{name}.
115
- ERR
116
- end
96
+ err_field(:job_class, options, "Job #{job_class} was not a supported job type")
117
97
  end
118
98
 
119
99
  sig { params(field: Symbol, options: T::Hash[Symbol, T.anything], reason: String).returns(T.noreturn) }
@@ -42,21 +42,6 @@ module Que
42
42
  Object.const_defined?(:ActiveJob)
43
43
  end
44
44
 
45
- sig { returns(T.nilable(Gem::Version)) }
46
- def active_job_version
47
- Gem.loaded_specs["activejob"]&.version
48
- end
49
-
50
- sig { returns(T::Boolean) }
51
- def active_job_version_supports_queues?
52
- # Supporting queue name in ActiveJob was removed in Rails 4.2.3
53
- # https://github.com/rails/rails/pull/19498
54
- # and readded in Rails 6.0.3
55
- # https://github.com/rails/rails/pull/38635
56
- version = ToEnqueue.active_job_version
57
- !version.nil? && version >= Gem::Version.create("6.0.3")
58
- end
59
-
60
45
  sig { params(job_class: Class).returns(T.nilable(T.class_of(ToEnqueue))) }
61
46
  private def type_from_job_class(job_class)
62
47
  types.each do |type, implementation|
@@ -90,7 +75,7 @@ module Que
90
75
  args
91
76
  )
92
77
 
93
- return nil if job.nil? || !job # nil in Rails < 6.1, false after.
78
+ return nil if job.nil? || !job
94
79
 
95
80
  # Now read the just inserted job back out of the DB to get the actual values that will
96
81
  # be used when the job is worked.
@@ -107,7 +92,7 @@ module Que
107
92
  def enqueue
108
93
  job = enqueue_active_job
109
94
 
110
- return nil if job.nil? || !job # nil in Rails < 6.1, false after.
95
+ return nil if job.nil? || !job
111
96
 
112
97
  enqueued_values = calculate_enqueued_values(job)
113
98
  EnqueuedJobType.new(enqueued_values)
@@ -121,9 +106,6 @@ module Que
121
106
 
122
107
  scheduled_at = self.class.extract_scheduled_at(data[:scheduled_at])
123
108
 
124
- # Rails didn't support queues for ActiveJob for a while
125
- used_queue = data[:queue_name] if ToEnqueue.active_job_version_supports_queues?
126
-
127
109
  # We can't get the priority out of the DB, as the returned `job` doesn't give us access
128
110
  # to the underlying ActiveJob that was scheduled. We have no option but to assume
129
111
  # it was what we told it to use. If no priority was specified, we must assume it was
@@ -132,7 +114,7 @@ module Que
132
114
 
133
115
  {
134
116
  args: data.fetch(:arguments),
135
- queue: used_queue,
117
+ queue: data[:queue_name],
136
118
  priority: assume_used_priority,
137
119
  run_at: scheduled_at,
138
120
  job_class: job_class.to_s,
@@ -162,20 +144,10 @@ module Que
162
144
  class << self
163
145
  extend T::Sig
164
146
 
165
- # ActiveJob scheduled_at is returned as a float, or a string post Rails 7.1,
166
- # and we want a Time for consistency
167
- sig { params(scheduled_at: T.anything).returns(T.nilable(ActiveSupport::TimeWithZone)) }
147
+ # ActiveJob serialises scheduled_at as an ISO 8601 string; we want a Time
148
+ sig { params(scheduled_at: T.nilable(String)).returns(T.nilable(ActiveSupport::TimeWithZone)) }
168
149
  def extract_scheduled_at(scheduled_at)
169
- # rubocop:disable Style/EmptyElse
170
- case scheduled_at
171
- when Float
172
- Que::Scheduler::TimeZone.time_zone.at(scheduled_at)
173
- when String
174
- Que::Scheduler::TimeZone.time_zone.parse(scheduled_at)
175
- else
176
- nil
177
- end
178
- # rubocop:enable Style/EmptyElse
150
+ scheduled_at && Que::Scheduler::TimeZone.time_zone.parse(scheduled_at)
179
151
  end
180
152
  end
181
153
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Que
4
4
  module Scheduler
5
- VERSION = "7.2.0".freeze
5
+ VERSION = "8.0.0".freeze
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: que-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.2.0
4
+ version: 8.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harry Lascelles
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2026-10-11 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activesupport
@@ -16,14 +15,14 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '6.0'
18
+ version: '8.0'
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: '6.0'
25
+ version: '8.0'
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: fugit
29
28
  requirement: !ruby/object:Gem::Requirement
@@ -104,7 +103,7 @@ dependencies:
104
103
  requirements:
105
104
  - - ">="
106
105
  - !ruby/object:Gem::Version
107
- version: '7.0'
106
+ version: '8.0'
108
107
  - - "<"
109
108
  - !ruby/object:Gem::Version
110
109
  version: '9.0'
@@ -114,7 +113,7 @@ dependencies:
114
113
  requirements:
115
114
  - - ">="
116
115
  - !ruby/object:Gem::Version
117
- version: '7.0'
116
+ version: '8.0'
118
117
  - - "<"
119
118
  - !ruby/object:Gem::Version
120
119
  version: '9.0'
@@ -132,20 +131,6 @@ dependencies:
132
131
  - - ">="
133
132
  - !ruby/object:Gem::Version
134
133
  version: '0'
135
- - !ruby/object:Gem::Dependency
136
- name: base64
137
- requirement: !ruby/object:Gem::Requirement
138
- requirements:
139
- - - ">="
140
- - !ruby/object:Gem::Version
141
- version: '0'
142
- type: :development
143
- prerelease: false
144
- version_requirements: !ruby/object:Gem::Requirement
145
- requirements:
146
- - - ">="
147
- - !ruby/object:Gem::Version
148
- version: '0'
149
134
  - !ruby/object:Gem::Dependency
150
135
  name: climate_control
151
136
  requirement: !ruby/object:Gem::Requirement
@@ -188,20 +173,6 @@ dependencies:
188
173
  - - ">="
189
174
  - !ruby/object:Gem::Version
190
175
  version: '0'
191
- - !ruby/object:Gem::Dependency
192
- name: database_cleaner
193
- requirement: !ruby/object:Gem::Requirement
194
- requirements:
195
- - - ">="
196
- - !ruby/object:Gem::Version
197
- version: '0'
198
- type: :development
199
- prerelease: false
200
- version_requirements: !ruby/object:Gem::Requirement
201
- requirements:
202
- - - ">="
203
- - !ruby/object:Gem::Version
204
- version: '0'
205
176
  - !ruby/object:Gem::Dependency
206
177
  name: dememoize
207
178
  requirement: !ruby/object:Gem::Requirement
@@ -230,20 +201,6 @@ dependencies:
230
201
  - - ">="
231
202
  - !ruby/object:Gem::Version
232
203
  version: '0'
233
- - !ruby/object:Gem::Dependency
234
- name: mutex_m
235
- requirement: !ruby/object:Gem::Requirement
236
- requirements:
237
- - - ">="
238
- - !ruby/object:Gem::Version
239
- version: '0'
240
- type: :development
241
- prerelease: false
242
- version_requirements: !ruby/object:Gem::Requirement
243
- requirements:
244
- - - ">="
245
- - !ruby/object:Gem::Version
246
- version: '0'
247
204
  - !ruby/object:Gem::Dependency
248
205
  name: pg
249
206
  requirement: !ruby/object:Gem::Requirement
@@ -478,7 +435,6 @@ metadata:
478
435
  source_code_uri: https://github.com/hlascelles/que-scheduler/
479
436
  bug_tracker_uri: https://github.com/hlascelles/que-scheduler/issues
480
437
  rubygems_mfa_required: 'true'
481
- post_install_message:
482
438
  rdoc_options: []
483
439
  require_paths:
484
440
  - lib
@@ -486,15 +442,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
486
442
  requirements:
487
443
  - - ">="
488
444
  - !ruby/object:Gem::Version
489
- version: '3.1'
445
+ version: '4.0'
490
446
  required_rubygems_version: !ruby/object:Gem::Requirement
491
447
  requirements:
492
448
  - - ">="
493
449
  - !ruby/object:Gem::Version
494
450
  version: '0'
495
451
  requirements: []
496
- rubygems_version: 3.5.22
497
- signing_key:
452
+ rubygems_version: 4.0.20
498
453
  specification_version: 4
499
454
  summary: A cron scheduler for Que
500
455
  test_files: []