resque-scheduler 4.11.0 → 5.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: c4ecd4f957b7c3df8c89bc85ffb8951b5df6cc18b004379b29ebcfc3be982621
4
- data.tar.gz: 7aacc351234c1f367d8b73cda10d43b97ff26e89a3319e0afa76b51abea70430
3
+ metadata.gz: e23e91d3c9920396d8feaad257fe4a27f4ff269f6cd0d6f9756016599d7cdf27
4
+ data.tar.gz: 7c1c242fd5c2ed74f8c15924d476775f76ed4929fb65d31b965e708c5949a601
5
5
  SHA512:
6
- metadata.gz: e668259967505827e06a40a83cb2e3b7c7c165df440c914c8e688c4d871594c46ac512ebb8a99856f4e3cf37f45625f5144bc6beeda1157c7b2d146eec9055cc
7
- data.tar.gz: 32e7b921643fb62600d133db156c5f4c28d863a893a92d18ba1b1f7317b0371dd38cd11b0a1e2adcccfa211265f9d285b452d2e524d3637487e7c982c8563032
6
+ metadata.gz: c90721652b59bdc1f2572975d3ef93ed9aa420f36a6a8f3a0c5a35f17a3e5145ebdd30bfacf7d62e4903f9477319282c8a33d55080f5c870c84161f4933e79d4
7
+ data.tar.gz: 061fc1d3dfea48a20db7e8c11b31fe0b2e6594d9be0ed5c202c38f304941bceb8c1f15497d0c0ec886c0ddd37fc867b6dd1b5e143e9bb5961cd01b41f73d2e5e
@@ -0,0 +1,42 @@
1
+ # Use Ruby 3.3 as specified in the test matrix
2
+ FROM ruby:3.3
3
+
4
+ # Install dependencies
5
+ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
6
+ && apt-get -y install --no-install-recommends \
7
+ git \
8
+ build-essential \
9
+ libssl-dev \
10
+ libreadline-dev \
11
+ zlib1g-dev \
12
+ redis-tools \
13
+ && apt-get clean \
14
+ && rm -rf /var/lib/apt/lists/*
15
+
16
+ # Create a non-root user
17
+ ARG USERNAME=vscode
18
+ ARG USER_UID=1000
19
+ ARG USER_GID=$USER_UID
20
+
21
+ RUN groupadd --gid $USER_GID $USERNAME \
22
+ && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
23
+ && apt-get update \
24
+ && apt-get install -y sudo \
25
+ && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
26
+ && chmod 0440 /etc/sudoers.d/$USERNAME
27
+
28
+ # Set the default user
29
+ USER $USERNAME
30
+
31
+ # Set working directory
32
+ WORKDIR /workspaces/resque-scheduler
33
+
34
+ # Install bundler
35
+ RUN gem install bundler
36
+
37
+ # Set environment variables for the test matrix configuration
38
+ ENV REDIS_VERSION=latest
39
+ ENV RESQUE=master
40
+ ENV RUFUS_SCHEDULER=3.6
41
+ ENV RACK_VERSION=3
42
+ ENV COVERAGE=1
@@ -0,0 +1,111 @@
1
+ # Dev Container for Resque Scheduler
2
+
3
+ This dev container is configured to match the GitHub Actions test matrix with the following configuration:
4
+
5
+ - **Ruby version**: 3.3
6
+ - **Resque version**: master (from git)
7
+ - **Rufus-scheduler**: 3.6
8
+ - **Redis version**: latest
9
+ - **Rack version**: 3
10
+
11
+ ## Getting Started
12
+
13
+ 1. Open this repository in VS Code
14
+ 2. When prompted, click "Reopen in Container" (or run the command "Dev Containers: Reopen in Container")
15
+ 3. Wait for the container to build and start
16
+ 4. Once inside the container, dependencies will be automatically installed via `bundle install`
17
+
18
+ ## Running Tests
19
+
20
+ To run the full test suite:
21
+
22
+ ```bash
23
+ bundle exec rake
24
+ ```
25
+
26
+ To run a specific test file:
27
+
28
+ ```bash
29
+ bundle exec ruby test/scheduler_test.rb
30
+ ```
31
+
32
+ To run tests with verbose output:
33
+
34
+ ```bash
35
+ VERBOSE=1 bundle exec rake
36
+ ```
37
+
38
+ To run tests matching a specific pattern:
39
+
40
+ ```bash
41
+ PATTERN='test/scheduler_*_test.rb' bundle exec rake
42
+ ```
43
+
44
+ ## Testing with Different Configurations
45
+
46
+ If you want to test with different versions, you can modify the environment variables and reinstall dependencies:
47
+
48
+ ```bash
49
+ # Example: Test with rufus-scheduler 3.4
50
+ export RUFUS_SCHEDULER=3.4
51
+ bundle install
52
+
53
+ # Run tests
54
+ bundle exec rake
55
+
56
+ # Reset to original configuration
57
+ export RUFUS_SCHEDULER=3.6
58
+ bundle install
59
+ ```
60
+
61
+ ## Available Environment Variables
62
+
63
+ The following environment variables are set to match the test matrix:
64
+
65
+ - `REDIS_VERSION`: latest
66
+ - `RESQUE`: master
67
+ - `RUFUS_SCHEDULER`: 3.6
68
+ - `RACK_VERSION`: 3
69
+ - `COVERAGE`: 1
70
+
71
+ ## Services
72
+
73
+ ### Redis
74
+ Redis is available at `redis://redis:6379` or via `localhost:6379` from within the container.
75
+
76
+ To connect to Redis CLI:
77
+
78
+ ```bash
79
+ redis-cli -h redis
80
+ ```
81
+
82
+ ## Troubleshooting
83
+
84
+ ### Bundle Install Issues
85
+
86
+ If you encounter issues with bundle install, try:
87
+
88
+ ```bash
89
+ bundle config set --local build.redis --with-cflags="-Wno-error=implicit-function-declaration"
90
+ bundle install
91
+ ```
92
+
93
+ ### Redis Connection Issues
94
+
95
+ Make sure Redis is running:
96
+
97
+ ```bash
98
+ redis-cli -h redis ping
99
+ ```
100
+
101
+ Should return `PONG`.
102
+
103
+ ### Rebuilding the Container
104
+
105
+ If you need to rebuild the container from scratch:
106
+
107
+ 1. Run "Dev Containers: Rebuild Container" from the command palette
108
+ 2. Or delete the container and volume manually:
109
+ ```bash
110
+ docker-compose -f .devcontainer/docker-compose.yml down -v
111
+ ```
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "Resque Scheduler Dev Container",
3
+ "dockerComposeFile": "docker-compose.yml",
4
+ "service": "app",
5
+ "workspaceFolder": "/workspaces/resque-scheduler",
6
+
7
+ // Features to add to the dev container
8
+ "features": {
9
+ "ghcr.io/devcontainers/features/git:1": {}
10
+ },
11
+
12
+ // Configure tool-specific properties
13
+ "customizations": {
14
+ "vscode": {
15
+ "extensions": [
16
+ "rebornix.ruby"
17
+ ],
18
+ "settings": {
19
+ "terminal.integrated.defaultProfile.linux": "bash"
20
+ }
21
+ }
22
+ },
23
+
24
+ // Use 'forwardPorts' to make a list of ports inside the container available locally
25
+ "forwardPorts": [6379],
26
+
27
+ // Use 'postCreateCommand' to run commands after the container is created
28
+ "postCreateCommand": "bundle install",
29
+
30
+ // Set environment variables for the test matrix
31
+ "containerEnv": {
32
+ "REDIS_VERSION": "latest",
33
+ "RESQUE": "master",
34
+ "RUFUS_SCHEDULER": "3.6",
35
+ "RACK_VERSION": "3",
36
+ "COVERAGE": "1"
37
+ },
38
+
39
+ // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root
40
+ "remoteUser": "vscode"
41
+ }
@@ -0,0 +1,31 @@
1
+ services:
2
+ app:
3
+ build:
4
+ context: .
5
+ dockerfile: Dockerfile
6
+ volumes:
7
+ - ../..:/workspaces:cached
8
+ working_dir: /workspaces/resque-scheduler
9
+ command: sleep infinity
10
+ environment:
11
+ REDIS_VERSION: "latest"
12
+ RESQUE: "master"
13
+ RUFUS_SCHEDULER: "3.6"
14
+ RACK_VERSION: "3"
15
+ COVERAGE: "1"
16
+ REDIS_URL: "redis://redis:6379"
17
+ depends_on:
18
+ - redis
19
+ # Runs app on the same network as the redis container, allows "forwardPorts" in devcontainer.json function
20
+ network_mode: service:redis
21
+
22
+ redis:
23
+ image: redis:latest
24
+ restart: unless-stopped
25
+ ports:
26
+ - "6379:6379"
27
+ volumes:
28
+ - redis-data:/data
29
+
30
+ volumes:
31
+ redis-data:
@@ -14,7 +14,7 @@ jobs:
14
14
  matrix:
15
15
  os: [ubuntu-latest]
16
16
  ruby: [
17
- 2.7
17
+ 3.4
18
18
  ]
19
19
 
20
20
  steps:
@@ -19,57 +19,29 @@ jobs:
19
19
  fail-fast: false
20
20
  matrix:
21
21
  ruby-version:
22
- - 2.3
23
- - 2.4
24
- - 2.5
25
- - 2.6
26
- - 2.7
27
22
  - "3.0"
28
23
  - 3.1
29
24
  - 3.2
30
25
  - 3.3
26
+ - 3.4
27
+ - head
31
28
  resque-version:
32
29
  - "master"
33
- - "~> 2.4.0"
34
- - "~> 1.27"
35
30
  rufus-scheduler:
36
- - "3.2"
37
31
  - "3.4"
38
32
  - "3.5"
39
33
  - "3.6"
40
34
  redis-version:
41
- - "~> 4.x"
42
- - "~> 5.x"
43
- exclude:
44
- - ruby-version: head
45
- rufus-scheduler: 3.2
46
- - ruby-version: 3.2
47
- rufus-scheduler: 3.2
48
-
49
- - ruby-version: 2.3
50
- resque-version: "~> 1.27"
51
- rufus-scheduler: 3.4
52
- - ruby-version: 2.3
53
- resque-version: "~> 1.27"
54
- rufus-scheduler: 3.5
55
- - ruby-version: 2.5
56
- resque-version: "~> 2.4.0"
57
- rufus-scheduler: 3.5
58
- - ruby-version: 2.5
59
- resque-version: master
60
- rufus-scheduler: 3.2
61
-
62
- - ruby-version: 2.3
63
- redis-version: "~> 5.x"
64
- - ruby-version: 2.4
65
- redis-version: "~> 5.x"
66
-
67
- - resque-version: "~> 1.27"
68
- redis-version: "~> 5.x"
35
+ - "4.8"
36
+ - "latest"
37
+ rack-version:
38
+ - 2
39
+ - 3
69
40
  env:
70
41
  REDIS_VERSION: "${{ matrix.redis-version }}"
71
42
  RESQUE: "${{ matrix.resque-version }}"
72
43
  RUFUS_SCHEDULER: "${{ matrix.rufus-scheduler }}"
44
+ RACK_VERSION: "${{ matrix.rack-version }}"
73
45
  COVERAGE: 1
74
46
 
75
47
  steps:
data/CHANGELOG.md CHANGED
@@ -2,6 +2,36 @@
2
2
 
3
3
  **ATTN**: This project uses [semantic versioning](http://semver.org/).
4
4
 
5
+ ## [5.0.0] - 2026-01-15
6
+ ### Breaking Changes
7
+ * Ruby requirement: `>= 2.3.0` → `>= 3.0.0`
8
+ * Resque dependency: `>= 1.27` → `>= 3.0`
9
+ * Redis dependency: `>= 3.3` → `>= 4.0`
10
+ * Removed `rack < 3` constraint
11
+
12
+ ### Added
13
+ * Add Ruby 3.4 to the CI matrix by @and9000 in #804
14
+ * Added `base64 ~> 0.1` runtime dependency (Ruby 3.4+ compatibility) by @PatrickTulskie in #809
15
+ * Added `irb` dev dependency (Ruby 4+ compatibility) by @PatrickTulskie in #809
16
+ * Added Rack 2/3 matrix testing by @PatrickTulskie in #809
17
+
18
+ ### Changed
19
+ * Prepare for resque 3.0 compatibility by @PatrickTulskie in #809
20
+ * CI now tests Ruby 3.0-3.4 + head only (removed Ruby 2.x)
21
+ * Simplified to test against resque master only
22
+ * Modernized `.rubocop.yml` to `DisabledByDefault: true` approach
23
+ * Set `TargetRubyVersion: 3.0`
24
+ * Updated rubocop: `~> 0.40.0` → `~> 0.80`
25
+ * Use `JSON.parse` instead of `JSON.load` (security improvement) by @PatrickTulskie in #809
26
+ * Use `URI.decode_www_form_component` instead of `CGI.unescape` by @PatrickTulskie in #809
27
+ * Consistent time formatting in views by @PatrickTulskie in #809
28
+
29
+ ### Fixed
30
+ * Fix `Resque::Scheduler.print_schedule` by @codealchemy in #794
31
+ * Remove circular require for resque from resque-scheduler by @zzak in #795
32
+ * Fixed test compatibility with Rack 3 by @PatrickTulskie in #809
33
+ * Fixed race condition in scheduler task tests by @PatrickTulskie in #809
34
+
5
35
  ## [4.10.3] - 2024-12-30
6
36
  ### Added
7
37
  * Expose timeout for lock via environment variable configuration by @pmm4654 in #786
data/Gemfile CHANGED
@@ -24,6 +24,13 @@ else
24
24
  gem 'redis', redis_version
25
25
  end
26
26
 
27
+ rack_version = ENV.fetch('RACK_VERSION', '3')
28
+ gem 'rack', "~> #{rack_version}.0"
29
+
30
+ if rack_version.to_i >= 3
31
+ gem 'rackup'
32
+ end
33
+
27
34
  gem 'sinatra', '> 2.0'
28
35
 
29
36
  gemspec
@@ -1,5 +1,4 @@
1
1
  # vim:fileencoding=utf-8
2
- require 'resque'
3
2
  require_relative 'plugin'
4
3
  require_relative '../scheduler'
5
4
 
@@ -8,7 +8,7 @@
8
8
  <% @timestamps.each do |t| %>
9
9
  <tr>
10
10
  <td>
11
- <%= Time.at(t) %>
11
+ <%= format_time(Time.at(t)) %>
12
12
  </td>
13
13
  </tr>
14
14
  <% end %>
@@ -87,9 +87,11 @@ module Resque
87
87
  def delayed_jobs_klass
88
88
  begin
89
89
  klass = Resque::Scheduler::Util.constantize(params[:klass])
90
- @args = JSON.load(CGI.unescape(params[:args]))
90
+ args_param = params[:args] || params['args']
91
+ @args = args_param ? JSON.parse(URI.decode_www_form_component(args_param)) : []
91
92
  @timestamps = Resque.scheduled_at(klass, *@args)
92
93
  rescue
94
+ @args = []
93
95
  @timestamps = []
94
96
  end
95
97
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Resque
4
4
  module Scheduler
5
- VERSION = '4.11.0'.freeze
5
+ VERSION = '5.0.0'.freeze
6
6
  end
7
7
  end
@@ -86,8 +86,8 @@ module Resque
86
86
  if rufus_scheduler
87
87
  log! "Scheduling Info\tLast Run"
88
88
  scheduler_jobs = rufus_scheduler.jobs
89
- scheduler_jobs.each do |_k, v|
90
- log! "#{v.t}\t#{v.last}\t"
89
+ scheduler_jobs.each do |job|
90
+ log! "#{job.opts}\t#{job.last_time}\t"
91
91
  end
92
92
  end
93
93
  end
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.license = 'MIT'
33
33
  spec.metadata['rubygems_mfa_required'] = 'true'
34
34
 
35
- spec.required_ruby_version = '>= 2.3.0'
35
+ spec.required_ruby_version = '>= 3.0.0'
36
36
 
37
37
  spec.files = `git ls-files -z`.split("\0").reject do |f|
38
38
  f.match(%r{^(test|spec|features|examples|bin|tasks)/}) ||
@@ -45,8 +45,10 @@ Gem::Specification.new do |spec|
45
45
 
46
46
  spec.add_development_dependency 'bundler'
47
47
  spec.add_development_dependency 'json'
48
+ spec.add_development_dependency 'irb'
48
49
  spec.add_development_dependency 'minitest'
49
50
  spec.add_development_dependency 'mocha'
51
+ spec.add_development_dependency 'ostruct'
50
52
  spec.add_development_dependency 'pry'
51
53
  spec.add_development_dependency 'rack-test'
52
54
  spec.add_development_dependency 'rake'
@@ -57,11 +59,13 @@ Gem::Specification.new do |spec|
57
59
 
58
60
  # We pin rubocop because new cops have a tendency to result in false-y
59
61
  # positives for new contributors, which is not a nice experience.
60
- spec.add_development_dependency 'rubocop', '~> 0.40.0'
62
+ spec.add_development_dependency 'rubocop', '~> 0.80'
61
63
 
64
+ spec.add_runtime_dependency 'base64', '~> 0.1'
65
+ spec.add_runtime_dependency 'logger'
62
66
  spec.add_runtime_dependency 'mono_logger', '~> 1.0'
63
- spec.add_runtime_dependency 'redis', '>= 3.3'
64
- spec.add_runtime_dependency 'resque', '>= 1.27'
67
+ spec.add_runtime_dependency 'redis', '>= 4.0'
68
+ spec.add_runtime_dependency 'resque', '>= 3.0'
65
69
  # rufus-scheduler v3.7 causes a failure in test/multi_process_test.rb
66
70
  # rufus-scheduler v3.3 is missing a to_local method which fails tests
67
71
  spec.add_runtime_dependency 'rufus-scheduler', '~> 3.2', '!= 3.3'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.11.0
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben VandenBos
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: exe
15
15
  cert_chain: []
16
- date: 2024-12-30 00:00:00.000000000 Z
16
+ date: 2026-01-15 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: bundler
@@ -43,6 +43,20 @@ dependencies:
43
43
  - - ">="
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: irb
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ type: :development
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
46
60
  - !ruby/object:Gem::Dependency
47
61
  name: minitest
48
62
  requirement: !ruby/object:Gem::Requirement
@@ -71,6 +85,20 @@ dependencies:
71
85
  - - ">="
72
86
  - !ruby/object:Gem::Version
73
87
  version: '0'
88
+ - !ruby/object:Gem::Dependency
89
+ name: ostruct
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ type: :development
96
+ prerelease: false
97
+ version_requirements: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
74
102
  - !ruby/object:Gem::Dependency
75
103
  name: pry
76
104
  requirement: !ruby/object:Gem::Requirement
@@ -175,14 +203,42 @@ dependencies:
175
203
  requirements:
176
204
  - - "~>"
177
205
  - !ruby/object:Gem::Version
178
- version: 0.40.0
206
+ version: '0.80'
179
207
  type: :development
180
208
  prerelease: false
181
209
  version_requirements: !ruby/object:Gem::Requirement
182
210
  requirements:
183
211
  - - "~>"
184
212
  - !ruby/object:Gem::Version
185
- version: 0.40.0
213
+ version: '0.80'
214
+ - !ruby/object:Gem::Dependency
215
+ name: base64
216
+ requirement: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - "~>"
219
+ - !ruby/object:Gem::Version
220
+ version: '0.1'
221
+ type: :runtime
222
+ prerelease: false
223
+ version_requirements: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - "~>"
226
+ - !ruby/object:Gem::Version
227
+ version: '0.1'
228
+ - !ruby/object:Gem::Dependency
229
+ name: logger
230
+ requirement: !ruby/object:Gem::Requirement
231
+ requirements:
232
+ - - ">="
233
+ - !ruby/object:Gem::Version
234
+ version: '0'
235
+ type: :runtime
236
+ prerelease: false
237
+ version_requirements: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
186
242
  - !ruby/object:Gem::Dependency
187
243
  name: mono_logger
188
244
  requirement: !ruby/object:Gem::Requirement
@@ -203,28 +259,28 @@ dependencies:
203
259
  requirements:
204
260
  - - ">="
205
261
  - !ruby/object:Gem::Version
206
- version: '3.3'
262
+ version: '4.0'
207
263
  type: :runtime
208
264
  prerelease: false
209
265
  version_requirements: !ruby/object:Gem::Requirement
210
266
  requirements:
211
267
  - - ">="
212
268
  - !ruby/object:Gem::Version
213
- version: '3.3'
269
+ version: '4.0'
214
270
  - !ruby/object:Gem::Dependency
215
271
  name: resque
216
272
  requirement: !ruby/object:Gem::Requirement
217
273
  requirements:
218
274
  - - ">="
219
275
  - !ruby/object:Gem::Version
220
- version: '1.27'
276
+ version: '3.0'
221
277
  type: :runtime
222
278
  prerelease: false
223
279
  version_requirements: !ruby/object:Gem::Requirement
224
280
  requirements:
225
281
  - - ">="
226
282
  - !ruby/object:Gem::Version
227
- version: '1.27'
283
+ version: '3.0'
228
284
  - !ruby/object:Gem::Dependency
229
285
  name: rufus-scheduler
230
286
  requirement: !ruby/object:Gem::Requirement
@@ -261,6 +317,10 @@ executables:
261
317
  extensions: []
262
318
  extra_rdoc_files: []
263
319
  files:
320
+ - ".devcontainer/Dockerfile"
321
+ - ".devcontainer/README.md"
322
+ - ".devcontainer/devcontainer.json"
323
+ - ".devcontainer/docker-compose.yml"
264
324
  - ".github/dependabot.yml"
265
325
  - ".github/funding.yml"
266
326
  - ".github/workflows/codeql-analysis.yml"
@@ -317,7 +377,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
317
377
  requirements:
318
378
  - - ">="
319
379
  - !ruby/object:Gem::Version
320
- version: 2.3.0
380
+ version: 3.0.0
321
381
  required_rubygems_version: !ruby/object:Gem::Requirement
322
382
  requirements:
323
383
  - - ">="