whenever 1.1.1 → 1.1.3

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: 55cafb2edffbfeec94032659d8af2086785d5c864c7e979395197ba02e6612d4
4
- data.tar.gz: 88ad009fb54d433ac00fd86f24c8ca0a5cbe05f7cd7774a8b4fac1ebfb90c4b9
3
+ metadata.gz: 85714fb8b50231a67eca8db2f67211fc11e8bb07bbb76db5333882676f626802
4
+ data.tar.gz: 9523c1ec86b34bd8fcd9244ebbc37206857ef25bdcce6cbb661769e9231d3ed5
5
5
  SHA512:
6
- metadata.gz: a81a8c3345588bf311b35bb9b6a6d158dd3fcff181f5a67c423a12db336ccc21c802d1f9498ecd079ebe2006479c971abc7a9129a89c965f63a88a46e1aee78d
7
- data.tar.gz: 35622000e04945eab6965f0b5b87a2f2e914753628cf8ccbcf1e9cf99cbf0182125c283ad593f34a1dfa9372c225d208239fd9cec3a1d507a9a34f711f8da99f
6
+ metadata.gz: bd84f4e82fcd6aff274fef804ca4fd2e834d6817778fd09d56287a013039005e1ecaeb12e8fde657502709bcabcd8dc31bdd0d99cd163edefe1d0b8889d2a78d
7
+ data.tar.gz: 59728cc54eae8cd88fe0d911ff6bb2a5571fdc0f257dc93ab8564c3d7795f7583aece8c21eede62ae6b99b5a264c3b4ece7e222dac77f3a2b1401f3f3237605b
@@ -3,6 +3,8 @@ on:
3
3
  pull_request:
4
4
  push:
5
5
  branches: [ main ]
6
+ permissions:
7
+ contents: read
6
8
  jobs:
7
9
  test:
8
10
  runs-on: ${{ matrix.os }}
@@ -10,7 +12,7 @@ jobs:
10
12
  fail-fast: false
11
13
  matrix:
12
14
  os: [ubuntu-latest, macos-latest]
13
- ruby-version: [ '2.4', '2.5', '2.6', '2.7', '3.0', '3.0', '3.2', '3.3', '3.4', 'jruby-9', 'jruby-10']
15
+ ruby-version: [ '2.4', '2.5', '2.6', '2.7', '3.0', '3.0', '3.2', '3.3', '3.4', '4.0', 'jruby-9', 'jruby-10']
14
16
  # CRuby < 2.6 does not support macos-arm64, so test those on amd64 instead
15
17
  exclude:
16
18
  - os: macos-latest
@@ -18,12 +20,12 @@ jobs:
18
20
  - os: macos-latest
19
21
  ruby-version: '2.5'
20
22
  include:
21
- - os: macos-13
23
+ - os: macos-15-intel
22
24
  ruby-version: '2.4'
23
- - os: macos-13
25
+ - os: macos-15-intel
24
26
  ruby-version: '2.5'
25
27
  steps:
26
- - uses: actions/checkout@v6
28
+ - uses: actions/checkout@v7
27
29
  name: Set up Ruby ${{ matrix.ruby-version }}
28
30
  - uses: ruby/setup-ruby@v1
29
31
  env:
@@ -42,7 +44,7 @@ jobs:
42
44
  strategy:
43
45
  fail-fast: false
44
46
  matrix:
45
- ruby-version: ['2.7', '3.0', '3.0', '3.2', '3.3', '3.4']
47
+ ruby-version: ['2.7', '3.0', '3.0', '3.2', '3.3', '3.4', '4.0']
46
48
  rails-version: ['6.0', '6.1', '7.0', '7.1', '7.2', '8.0', '8.1']
47
49
  include:
48
50
  - ruby-version: 2.7
@@ -74,7 +76,7 @@ jobs:
74
76
  env:
75
77
  BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/activesupport${{ matrix.rails-version }}.gemfile
76
78
  steps:
77
- - uses: actions/checkout@v6
79
+ - uses: actions/checkout@v7
78
80
  name: Set up Ruby ${{ matrix.ruby-version }}
79
81
  - uses: ruby/setup-ruby@v1
80
82
  with:
data/CHANGELOG.md CHANGED
@@ -1,7 +1,26 @@
1
1
  ### unreleased
2
2
 
3
3
 
4
- ### 1.1.1 / Dec 8, 2025
4
+ ### 1.1.3 / September 15, 2026
5
+
6
+ * Add support for sequential job definitions https://github.com/javan/whenever/pull/854
7
+
8
+ * CI: Bump actions/checkout from 6 to 7 https://github.com/javan/whenever/pull/876
9
+
10
+ * CI: Restrict GitHub Actions workflow permissions to contents: read https://github.com/javan/whenever/pull/875
11
+
12
+
13
+ ### 1.1.2 / January 18, 2026
14
+
15
+ * Add description as comment in crontab https://github.com/javan/whenever/pull/776
16
+
17
+ * Override global option with group option https://github.com/javan/whenever/pull/822
18
+
19
+ * CI: Add Ruby 4.0 to CI Matrix https://github.com/javan/whenever/pull/872
20
+
21
+ * CI: Use macos-15-intel instead of macos-13 for Ruby 2.4 and 2.5 https://github.com/javan/whenever/pull/871
22
+
23
+ ### 1.1.1 / December 8, 2025
5
24
 
6
25
  * job_list `.respond_to?` updated to an instance method https://github.com/javan/whenever/pull/830
7
26
 
@@ -13,7 +32,7 @@
13
32
 
14
33
  * Require MFA for gem releases https://github.com/javan/whenever/pull/867
15
34
 
16
- ### 1.1.0 / Nov 21, 2025
35
+ ### 1.1.0 / November 21, 2025
17
36
 
18
37
  * Splat whenever_roles when passing to roles https://github.com/javan/whenever/pull/777
19
38
 
@@ -151,7 +170,7 @@
151
170
  * Process params in job templates. [Austin Ziegler]
152
171
 
153
172
 
154
- ### 0.8.4 / July 22, 2012
173
+ ### 0.8.4 / July 22, 2013
155
174
 
156
175
  * Don't require schedule file when clearing. [Javan Makhmali]
157
176
 
data/README.md CHANGED
@@ -59,6 +59,14 @@ every 3.hours do # 1.minute 1.day 1.week 1.month 1.year is also supported
59
59
  command "/usr/bin/my_great_command"
60
60
  end
61
61
 
62
+ every 3.hours, sequential: true do
63
+ # Jobs in this block that don't set their own sequence will default to run in the same sequence (not in parallel)
64
+ runner "MyModel.some_process", halt_sequence_on_failure: true # If this job fails, subsequent jobs will not run (defaults to false)
65
+ rake "my:rake:task"
66
+ command "/usr/bin/my_great_command", sequence: nil # This job runs in parallel with other jobs that are not part of a sequence
67
+ runner "MyModel.task_to_run_at_four_thirty_in_the_morning", sequence: 'other' # This job runs sequentially with other jobs in the sequence called 'other'
68
+ end
69
+
62
70
  every 1.day, at: '4:30 am' do
63
71
  runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
64
72
  end
@@ -180,6 +188,26 @@ every 3.hours do
180
188
  end
181
189
  ```
182
190
 
191
+ ### Adding comments to crontab
192
+
193
+ A description can be added to a job that will be included in the crontab as a comment above the cron entry.
194
+
195
+ Example: A single line description:
196
+
197
+ ```ruby
198
+ every 1.hours, description: "My job description" do
199
+ command "/usr/bin/my_great_command"
200
+ end
201
+ ```
202
+
203
+ Example: A multi line description:
204
+
205
+ ```ruby
206
+ every 1.hours, description: "My job description\nhas multiple lines" do
207
+ command "/usr/bin/my_great_command"
208
+ end
209
+ ```
210
+
183
211
  ### Capistrano integration
184
212
 
185
213
  Use the built-in Capistrano recipe for easy crontab updates with deploys. For Capistrano V3, see the next section.
data/lib/whenever/job.rb CHANGED
@@ -2,7 +2,7 @@ require 'shellwords'
2
2
 
3
3
  module Whenever
4
4
  class Job
5
- attr_reader :at, :roles, :mailto
5
+ attr_reader :at, :roles, :mailto, :description, :sequence, :halt_sequence_on_failure
6
6
 
7
7
  def initialize(options = {})
8
8
  @options = options
@@ -10,7 +10,10 @@ module Whenever
10
10
  @template = options.delete(:template)
11
11
  @mailto = options.fetch(:mailto, :default_mailto)
12
12
  @job_template = options.delete(:job_template) || ":job"
13
+ @sequence = options.delete(:sequence)
14
+ @halt_sequence_on_failure = options.delete(:halt_sequence_on_failure)
13
15
  @roles = Array(options.delete(:roles))
16
+ @description = options.delete(:description)
14
17
  @options[:output] = options.has_key?(:output) ? Whenever::Output::Redirection.new(options[:output]).to_s : ''
15
18
  @options[:environment_variable] ||= "RAILS_ENV"
16
19
  @options[:environment] ||= :production
@@ -48,6 +48,12 @@ module Whenever
48
48
  def every(frequency, options = {})
49
49
  @current_time_scope = frequency
50
50
  @options = options
51
+
52
+ if @options[:sequential]
53
+ @default_sequence_id ||= 0
54
+ @options[:sequence] ||= "default_sequence_#{@default_sequence_id += 1}"
55
+ end
56
+
51
57
  yield
52
58
  end
53
59
 
@@ -66,7 +72,7 @@ module Whenever
66
72
 
67
73
  @jobs[options.fetch(:mailto)] ||= {}
68
74
  @jobs[options.fetch(:mailto)][@current_time_scope] ||= []
69
- @jobs[options.fetch(:mailto)][@current_time_scope] << Whenever::Job.new(@options.merge(@set_variables).merge(options))
75
+ @jobs[options.fetch(:mailto)][@current_time_scope] << Whenever::Job.new(@set_variables.merge(@options).merge(options))
70
76
  end
71
77
  end
72
78
  end
@@ -138,12 +144,20 @@ module Whenever
138
144
  def cron_jobs_of_time(time, jobs)
139
145
  shortcut_jobs, regular_jobs = [], []
140
146
 
147
+ filtered_jobs = jobs.select do |job|
148
+ roles.empty? || roles.any? { |r| job.has_role?(r) }
149
+ end
150
+
151
+ grouped_jobs = filtered_jobs.group_by(&:sequence)
152
+ grouped_jobs.each do |sequence, jobs|
153
+ grouped_jobs[sequence] = JobSequence.new(jobs) if sequence
154
+ end
155
+ jobs = grouped_jobs.values.flatten
156
+
141
157
  jobs.each do |job|
142
- next unless roles.empty? || roles.any? do |r|
143
- job.has_role?(r)
144
- end
145
158
  Whenever::Output::Cron.output(time, job, :chronic_options => @chronic_options) do |cron|
146
159
  cron << "\n\n"
160
+ cron = (job.description.strip + "\n").gsub(/^(.*)$/, '# \1') + cron unless job.description.to_s.empty?
147
161
 
148
162
  if cron[0,1] == "@"
149
163
  shortcut_jobs << cron
@@ -0,0 +1,36 @@
1
+ require 'shellwords'
2
+
3
+ module Whenever
4
+ class JobSequence
5
+ attr_reader :at, :roles, :mailto, :description
6
+
7
+ def initialize(jobs, options = {})
8
+ validate!(jobs)
9
+
10
+ @jobs = jobs
11
+ @options = options
12
+ @at = options.fetch(:at, primary_job.at)
13
+ @mailto = options.fetch(:mailto, primary_job.mailto || :default_mailto)
14
+ @roles = Array(options.delete(:roles), *primary_job.roles)
15
+ @description = options.fetch(:description) { @jobs.map { |job| job.description.to_s.strip }.reject(&:empty?).uniq.join("\n") }
16
+ end
17
+
18
+ def output
19
+ @jobs.map { |job| [job.output, job.halt_sequence_on_failure ? ' && ' : ' ; '] }.flatten[0..-2].join
20
+ end
21
+
22
+ def has_role?(role)
23
+ roles.empty? || roles.include?(role)
24
+ end
25
+
26
+ private
27
+
28
+ def primary_job
29
+ @jobs.first
30
+ end
31
+
32
+ def validate!(jobs)
33
+ raise ArgumentError, "Jobs in a sequence don't support different `at` values" if jobs.map(&:at).uniq.count > 1
34
+ end
35
+ end
36
+ end
@@ -1,3 +1,3 @@
1
1
  module Whenever
2
- VERSION = '1.1.1'
2
+ VERSION = '1.1.3'
3
3
  end
data/lib/whenever.rb CHANGED
@@ -2,6 +2,7 @@ require "whenever/version"
2
2
  require 'whenever/numeric'
3
3
  require 'whenever/numeric_seconds'
4
4
  require 'whenever/job_list'
5
+ require 'whenever/job_sequence'
5
6
  require 'whenever/job'
6
7
  require 'whenever/command_line'
7
8
  require 'whenever/cron'
@@ -55,6 +55,34 @@ class OutputDefinedJobTest < Whenever::TestCase
55
55
  assert_match(/^.+ .+ .+ .+ before during after local$/, output)
56
56
  end
57
57
 
58
+ test "defined job with a :task and an option where the option is set globally and on the group" do
59
+ output = Whenever.cron \
60
+ <<-file
61
+ set :job_template, nil
62
+ job_type :some_job, "before :task after :option1"
63
+ set :option1, 'global'
64
+ every 2.hours, :option1 => 'group' do
65
+ some_job "during"
66
+ end
67
+ file
68
+
69
+ assert_match(/^.+ .+ .+ .+ before during after group$/, output)
70
+ end
71
+
72
+ test "defined job with a :task and an option where the option is set globally, on the group, and locally" do
73
+ output = Whenever.cron \
74
+ <<-file
75
+ set :job_template, nil
76
+ job_type :some_job, "before :task after :option1"
77
+ set :option1, 'global'
78
+ every 2.hours, :option1 => 'group' do
79
+ some_job "during", :option1 => 'local'
80
+ end
81
+ file
82
+
83
+ assert_match(/^.+ .+ .+ .+ before during after local$/, output)
84
+ end
85
+
58
86
  test "defined job with a :task and an option that is not set" do
59
87
  output = Whenever.cron \
60
88
  <<-file
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+
3
+ class OutputDescriptionTest < Whenever::TestCase
4
+ test "single line description" do
5
+ output = Whenever.cron \
6
+ <<-file
7
+ every "weekday", :description => "A description" do
8
+ command "blahblah"
9
+ end
10
+ file
11
+
12
+ assert_match "# A description\n0 0 * * 1-5 /bin/bash -l -c 'blahblah'\n\n", output
13
+ end
14
+
15
+ test "multi line description" do
16
+ output = Whenever.cron \
17
+ <<-file
18
+ every "weekday", :description => "A description\nhas mulitple lines" do
19
+ command "blahblah"
20
+ end
21
+ file
22
+
23
+ assert_match "# A description\n# has mulitple lines\n0 0 * * 1-5 /bin/bash -l -c 'blahblah'\n\n", output
24
+ end
25
+ end
@@ -0,0 +1,187 @@
1
+ require 'test_helper'
2
+
3
+ class OutputJobsWithSequenceTest < Whenever::TestCase
4
+ test "defined jobs with a sequence argument specified per-job" do
5
+ output = Whenever.cron \
6
+ <<-file
7
+ every 2.hours do
8
+ command "blahblah", sequence: 'backups'
9
+ command "foofoo", sequence: 'backups'
10
+ command "barbar"
11
+ end
12
+ file
13
+
14
+ output_without_empty_line = lines_without_empty_line(output.lines)
15
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah' ; /bin/bash -l -c 'foofoo'", output_without_empty_line.shift
16
+ assert_equal two_hours + " /bin/bash -l -c 'barbar'", output_without_empty_line.shift
17
+ end
18
+
19
+ test "defined jobs with a sequence argument specified on the group" do
20
+ output = Whenever.cron \
21
+ <<-file
22
+ every 2.hours, sequence: 'backups' do
23
+ command "blahblah"
24
+ command "foofoo"
25
+ end
26
+ file
27
+
28
+ output_without_empty_line = lines_without_empty_line(output.lines)
29
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah' ; /bin/bash -l -c 'foofoo'", output_without_empty_line.shift
30
+ end
31
+
32
+ test "defined jobs with a sequence argument and a job that halts the sequence on failure" do
33
+ output = Whenever.cron \
34
+ <<-file
35
+ every 2.hours, sequence: 'backups' do
36
+ command "blahblah", halt_sequence_on_failure: true
37
+ command "foofoo"
38
+ end
39
+ file
40
+
41
+ output_without_empty_line = lines_without_empty_line(output.lines)
42
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah' && /bin/bash -l -c 'foofoo'", output_without_empty_line.shift
43
+ end
44
+
45
+ test "defined jobs with a sequences specified on the group and jobs" do
46
+ output = Whenever.cron \
47
+ <<-file
48
+ every 2.hours, sequence: 'backups' do
49
+ command "blahblah"
50
+ command "barbar", sequence: nil
51
+ command "foofoo"
52
+ command "bazbaz", sequence: 'bees'
53
+ command "buzzbuzz", sequence: 'bees'
54
+ end
55
+ file
56
+
57
+ output_without_empty_line = lines_without_empty_line(output.lines)
58
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah' ; /bin/bash -l -c 'foofoo'", output_without_empty_line.shift
59
+ assert_equal two_hours + " /bin/bash -l -c 'barbar'", output_without_empty_line.shift
60
+ assert_equal two_hours + " /bin/bash -l -c 'bazbaz' ; /bin/bash -l -c 'buzzbuzz'", output_without_empty_line.shift
61
+ end
62
+
63
+ test "defined jobs with a multiple groups with sequences specified on the group and jobs" do
64
+ output = Whenever.cron \
65
+ <<-file
66
+ every 2.hours, sequence: 'backups' do
67
+ command "blahblah"
68
+ command "barbar", sequence: nil
69
+ command "bazbaz", sequence: 'bees'
70
+ end
71
+
72
+ every 2.hours, sequence: 'backups' do
73
+ command "foofoo"
74
+ command "buzzbuzz", sequence: 'bees'
75
+ end
76
+ file
77
+
78
+ output_without_empty_line = lines_without_empty_line(output.lines)
79
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah' ; /bin/bash -l -c 'foofoo'", output_without_empty_line.shift
80
+ assert_equal two_hours + " /bin/bash -l -c 'barbar'", output_without_empty_line.shift
81
+ assert_equal two_hours + " /bin/bash -l -c 'bazbaz' ; /bin/bash -l -c 'buzzbuzz'", output_without_empty_line.shift
82
+ end
83
+
84
+ test "defined jobs with a multiple groups with sequences specified on the group and jobs" do
85
+ output = Whenever.cron \
86
+ <<-file
87
+ every 2.hours, sequence: 'backups' do
88
+ command "blahblah"
89
+ command "barbar", sequence: nil
90
+ command "bazbaz", sequence: 'bees'
91
+ end
92
+
93
+ every 3.hours, sequence: 'backups' do
94
+ command "foofoo"
95
+ command "buzzbuzz", sequence: 'bees'
96
+ end
97
+ file
98
+
99
+ output_without_empty_line = lines_without_empty_line(output.lines)
100
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah'", output_without_empty_line.shift
101
+ assert_equal two_hours + " /bin/bash -l -c 'barbar'", output_without_empty_line.shift
102
+ assert_equal two_hours + " /bin/bash -l -c 'bazbaz'", output_without_empty_line.shift
103
+ assert_equal three_hours + " /bin/bash -l -c 'foofoo'", output_without_empty_line.shift
104
+ assert_equal three_hours + " /bin/bash -l -c 'buzzbuzz'", output_without_empty_line.shift
105
+ end
106
+
107
+ test "defined jobs with a multiple groups with sequences specified on the group and jobs" do
108
+ assert_raises ArgumentError do
109
+ Whenever.cron \
110
+ <<-file
111
+ every 2.hours, sequence: 'backups' do
112
+ command "blahblah", at: 1
113
+ command "barbar", at: 2
114
+ end
115
+ file
116
+ end
117
+ end
118
+
119
+ test "defined jobs with a sequence argument and a description on the group" do
120
+ output = Whenever.cron \
121
+ <<-file
122
+ every 2.hours, sequence: 'backups', description: "Nightly backups" do
123
+ command "blahblah"
124
+ command "foofoo"
125
+ end
126
+ file
127
+
128
+ assert_match "# Nightly backups\n" + two_hours + " /bin/bash -l -c 'blahblah' ; /bin/bash -l -c 'foofoo'", output
129
+ end
130
+
131
+ test "defined jobs with a sequence argument and a description on each job" do
132
+ output = Whenever.cron \
133
+ <<-file
134
+ every 2.hours, sequence: 'backups' do
135
+ command "blahblah", description: "Dump the database"
136
+ command "foofoo", description: "Upload the dump"
137
+ end
138
+ file
139
+
140
+ assert_match "# Dump the database\n# Upload the dump\n" + two_hours + " /bin/bash -l -c 'blahblah' ; /bin/bash -l -c 'foofoo'", output
141
+ end
142
+
143
+ test "defined jobs with a sequence argument and descriptions padded with whitespace" do
144
+ output = Whenever.cron \
145
+ <<-file
146
+ every 2.hours, sequence: 'backups' do
147
+ command "blahblah", description: " Dump the database "
148
+ command "foofoo", description: " Upload the dump "
149
+ end
150
+ file
151
+
152
+ assert_match "# Dump the database\n# Upload the dump\n" + two_hours, output
153
+ end
154
+
155
+ def three_hours
156
+ "0 0,3,6,9,12,15,18,21 * * *"
157
+ end
158
+ end
159
+
160
+ class OutputJobsWithSequentialTest < Whenever::TestCase
161
+ test "defined jobs with a sequential argument" do
162
+ output = Whenever.cron \
163
+ <<-file
164
+ every 2.hours, sequential: true do
165
+ command "blahblah"
166
+ command "foofoo"
167
+ end
168
+ file
169
+
170
+ output_without_empty_line = lines_without_empty_line(output.lines)
171
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah' ; /bin/bash -l -c 'foofoo'", output_without_empty_line.shift
172
+ end
173
+
174
+ test "defined jobs with a sequential argument" do
175
+ output = Whenever.cron \
176
+ <<-file
177
+ every 2.hours, sequential: true do
178
+ command "blahblah"
179
+ command "foofoo", sequence: false
180
+ end
181
+ file
182
+
183
+ output_without_empty_line = lines_without_empty_line(output.lines)
184
+ assert_equal two_hours + " /bin/bash -l -c 'blahblah'", output_without_empty_line.shift
185
+ assert_equal two_hours + " /bin/bash -l -c 'foofoo'", output_without_empty_line.shift
186
+ end
187
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whenever
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Javan Makhmali
@@ -65,6 +65,7 @@ files:
65
65
  - lib/whenever/cron.rb
66
66
  - lib/whenever/job.rb
67
67
  - lib/whenever/job_list.rb
68
+ - lib/whenever/job_sequence.rb
68
69
  - lib/whenever/numeric.rb
69
70
  - lib/whenever/numeric_seconds.rb
70
71
  - lib/whenever/os.rb
@@ -75,9 +76,11 @@ files:
75
76
  - test/functional/output_at_test.rb
76
77
  - test/functional/output_default_defined_jobs_test.rb
77
78
  - test/functional/output_defined_job_test.rb
79
+ - test/functional/output_description_test.rb
78
80
  - test/functional/output_env_test.rb
79
81
  - test/functional/output_jobs_for_roles_test.rb
80
82
  - test/functional/output_jobs_with_mailto_test.rb
83
+ - test/functional/output_jobs_with_sequence_test.rb
81
84
  - test/functional/output_redirection_test.rb
82
85
  - test/test_case.rb
83
86
  - test/test_helper.rb
@@ -108,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
111
  - !ruby/object:Gem::Version
109
112
  version: '0'
110
113
  requirements: []
111
- rubygems_version: 3.6.9
114
+ rubygems_version: 4.0.16
112
115
  specification_version: 4
113
116
  summary: Cron jobs in ruby.
114
117
  test_files:
@@ -116,9 +119,11 @@ test_files:
116
119
  - test/functional/output_at_test.rb
117
120
  - test/functional/output_default_defined_jobs_test.rb
118
121
  - test/functional/output_defined_job_test.rb
122
+ - test/functional/output_description_test.rb
119
123
  - test/functional/output_env_test.rb
120
124
  - test/functional/output_jobs_for_roles_test.rb
121
125
  - test/functional/output_jobs_with_mailto_test.rb
126
+ - test/functional/output_jobs_with_sequence_test.rb
122
127
  - test/functional/output_redirection_test.rb
123
128
  - test/unit/capistrano_support_test.rb
124
129
  - test/unit/cron_test.rb