whenever 0.10.0 → 0.11.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
- SHA1:
3
- metadata.gz: 9c8fe56b21ffa57026a2b944ae208bea62a9d7e9
4
- data.tar.gz: 543d704698ab03d944679daa1e85bee1b3936286
2
+ SHA256:
3
+ metadata.gz: be14a26bff8c588b4e5828582a552f4a10e056b08581f4d28b2f44ae6726c694
4
+ data.tar.gz: 6e8db042c4c070b52f85bf958b73673b2445663ca102ecb306ac4aa654e8cb37
5
5
  SHA512:
6
- metadata.gz: 3d0bd440a4beab5ecde93ccb91fad7cf5b2bf2ffe14a376ad24392fe5b4a3d53ba1d7ce15a53d2debc3b639a35f609436d21ab78de16b99a857fe1e16ed8bed1
7
- data.tar.gz: 4bb8692d2f7130e45d80fc05a6a54609fd160155014eae330da8f0fc9ed97e9338d523282cd4f8ec197531231493bd04d2409a3d7a6bbc57761ff6ad0ff7f422
6
+ metadata.gz: 30fc22be58c8cccdf2da369fd9103aedd5c4da0ac7abb6736abf166958c5d79f67029634a0ceb36aa0babcf66c41e092ae4a965b17b1459c2f22cc4c655e9abf
7
+ data.tar.gz: ebfb02153d52c3df836e50f3ef286ebdaefad889fded4d35664afbe70a46e6910842d96a83f8df6006adadc1b30c2b96f2d17deb3c7c8cf01cfab8999a991cc3
@@ -2,20 +2,47 @@ language: ruby
2
2
 
3
3
  before_install:
4
4
  - gem install bundler
5
-
5
+ - unset _JAVA_OPTIONS
6
6
  rvm:
7
7
  - 1.9.3
8
8
  - 2.0.0
9
9
  - 2.1.10
10
- - 2.2.6
11
- - 2.3.3
12
- - 2.4.0
10
+ - 2.2.10
11
+ - 2.3.8
12
+ - 2.4.5
13
+ - 2.5.3
13
14
  - jruby-9.1.9.0
15
+ matrix:
16
+ exclude:
17
+ # activesupport 5 only supports ruby 2.2.2 and later
18
+ - gemfile: gemfiles/activesupport5.0.gemfile
19
+ rvm: 1.9.3
20
+ - gemfile: gemfiles/activesupport5.1.gemfile
21
+ rvm: 1.9.3
22
+ - gemfile: gemfiles/activesupport5.2.gemfile
23
+ rvm: 1.9.3
24
+
25
+ - gemfile: gemfiles/activesupport5.0.gemfile
26
+ rvm: 2.0.0
27
+ - gemfile: gemfiles/activesupport5.1.gemfile
28
+ rvm: 2.0.0
29
+ - gemfile: gemfiles/activesupport5.2.gemfile
30
+ rvm: 2.0.0
31
+
32
+ - gemfile: gemfiles/activesupport5.0.gemfile
33
+ rvm: 2.1.10
34
+ - gemfile: gemfiles/activesupport5.1.gemfile
35
+ rvm: 2.1.10
36
+ - gemfile: gemfiles/activesupport5.2.gemfile
37
+ rvm: 2.1.10
14
38
 
15
39
  gemfile:
16
- - Gemfile
17
40
  - gemfiles/activesupport4.1.gemfile
18
41
  - gemfiles/activesupport4.2.gemfile
42
+ - gemfiles/activesupport5.0.gemfile
43
+ - gemfiles/activesupport5.1.gemfile
44
+ - gemfiles/activesupport5.2.gemfile
45
+
19
46
  env:
20
47
  global:
21
48
  - JRUBY_OPTS=--debug
@@ -0,0 +1,19 @@
1
+ appraise 'activesupport4.1' do
2
+ gem "activesupport", "~> 4.1.0"
3
+ end
4
+
5
+ appraise 'activesupport4.2' do
6
+ gem "activesupport", "~> 4.2.0"
7
+ end
8
+
9
+ appraise 'activesupport5.0' do
10
+ gem "activesupport", "~> 5.0.0"
11
+ end
12
+
13
+ appraise 'activesupport5.1' do
14
+ gem "activesupport", "~> 5.1.0"
15
+ end
16
+
17
+ appraise 'activesupport5.2' do
18
+ gem "activesupport", "~> 5.2.0beta2"
19
+ end
@@ -1,5 +1,15 @@
1
1
  ### develop
2
2
 
3
+ ### 0.11.0 / April 23, 2019
4
+
5
+ * Add support for mapping Range objects to cron range syntax [Tim Craft](https://github.com/javan/whenever/pull/725)
6
+
7
+ * Bugfix: Avoid modifying Capistrano `default_env` when setting the whenever environment. [ta1kt0me](https://github.com/javan/whenever/pull/728)
8
+
9
+ * Enable to execute whenever's task independently without setting :release_path or :whenever_path [ta1kt0me](https://github.com/javan/whenever/pull/729)
10
+
11
+ * Make error message clearer when parsing cron syntax fails due to a trailing space [ignisf](https://github.com/javan/whenever/pull/744)
12
+
3
13
  ### 0.10.0 / November 19, 2017
4
14
 
5
15
  * Modify wheneverize to allow for the creating of 'config' directory when not present
@@ -14,6 +24,8 @@
14
24
 
15
25
  * Allow configuring an alternative schedule file in Capistrano. [Shinichi Okamoto](https://github.com/javan/whenever/pull/666)
16
26
 
27
+ * Add customizing email recipient option with the MAILTO environment variable. [Chikahiro Tokoro](https://github.com/javan/whenever/pull/678)
28
+
17
29
  ### 0.9.7 / June 14, 2016
18
30
 
19
31
  * Restore compatibility with Capistrano v3; it has a bug which we have to work around [Ben Langfeld, Chris Gunther, Shohei Yamasaki]
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in whenever.gemspec
4
4
  gemspec
data/README.md CHANGED
@@ -9,7 +9,7 @@ $ gem install whenever
9
9
  Or with Bundler in your Gemfile.
10
10
 
11
11
  ```ruby
12
- gem 'whenever', :require => false
12
+ gem 'whenever', require: false
13
13
  ```
14
14
 
15
15
  ### Getting started
@@ -54,15 +54,19 @@ every 3.hours do # 1.minute 1.day 1.week 1.month 1.year is also supported
54
54
  command "/usr/bin/my_great_command"
55
55
  end
56
56
 
57
- every 1.day, :at => '4:30 am' do
57
+ every 1.day, at: '4:30 am' do
58
58
  runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
59
59
  end
60
60
 
61
+ every 1.day, at: ['4:30 am', '6:00 pm'] do
62
+ runner "Mymodel.task_to_run_in_two_times_every_day"
63
+ end
64
+
61
65
  every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot
62
66
  runner "SomeModel.ladeeda"
63
67
  end
64
68
 
65
- every :sunday, :at => '12pm' do # Use any day of the week or :weekend, :weekday
69
+ every :sunday, at: '12pm' do # Use any day of the week or :weekend, :weekday
66
70
  runner "Task.do_something_great"
67
71
  end
68
72
 
@@ -72,7 +76,7 @@ end
72
76
 
73
77
  # run this task only on servers with the :app role in Capistrano
74
78
  # see Capistrano roles section below
75
- every :day, :at => '12:20am', :roles => [:app] do
79
+ every :day, at: '12:20am', roles: [:app] do
76
80
  rake "app_server:task"
77
81
  end
78
82
  ```
@@ -87,7 +91,7 @@ For example:
87
91
  job_type :awesome, '/usr/local/bin/awesome :task :fun_level'
88
92
 
89
93
  every 2.hours do
90
- awesome "party", :fun_level => "extreme"
94
+ awesome "party", fun_level: "extreme"
91
95
  end
92
96
  ```
93
97
 
@@ -129,10 +133,10 @@ You can set your custom Chronic configuration if the defaults don't fit you.
129
133
  For example, to assume a 24 hour clock instead of the default 12 hour clock:
130
134
 
131
135
  ```ruby
132
- set :chronic_options, :hours24 => true
136
+ set :chronic_options, hours24: true
133
137
 
134
138
  # By default this would run the job every day at 3am
135
- every 1.day, :at => '3:00' do
139
+ every 1.day, at: '3:00' do
136
140
  runner "MyModel.nightly_archive_job"
137
141
  end
138
142
  ```
@@ -240,7 +244,7 @@ When you define a job in your schedule.rb file, by default it will be deployed t
240
244
  all servers in the whenever_roles list (which defaults to `[:db]`).
241
245
 
242
246
  However, if you want to restrict certain jobs to only run on subset of servers,
243
- you can add a `:roles => [...]` argument to their definitions. **Make sure to add
247
+ you can add a `roles: [...]` argument to their definitions. **Make sure to add
244
248
  that role to the whenever_roles list in your deploy.rb.**
245
249
 
246
250
  When you run `cap deploy`, jobs with a :roles list specified will only be added to
@@ -253,7 +257,7 @@ So, for example, with the default whenever_roles of `[:db]`, a job like this wou
253
257
  deployed to all servers with the `:db` role:
254
258
 
255
259
  ```ruby
256
- every :day, :at => '12:20am' do
260
+ every :day, at: '12:20am' do
257
261
  rake 'foo:bar'
258
262
  end
259
263
  ```
@@ -262,15 +266,15 @@ If we set whenever_roles to `[:db, :app]` in deploy.rb, and have the following
262
266
  jobs in schedule.rb:
263
267
 
264
268
  ```ruby
265
- every :day, :at => '1:37pm', :roles => [:app] do
269
+ every :day, at: '1:37pm', roles: [:app] do
266
270
  rake 'app:task' # will only be added to crontabs of :app servers
267
271
  end
268
272
 
269
- every :hour, :roles => [:db] do
273
+ every :hour, roles: [:db] do
270
274
  rake 'db:task' # will only be added to crontabs of :db servers
271
275
  end
272
276
 
273
- every :day, :at => '12:02am' do
277
+ every :day, at: '12:02am' do
274
278
  command "run_this_everywhere" # will be deployed to :db and :app servers
275
279
  end
276
280
  ```
@@ -1,4 +1,6 @@
1
- source "https://rubygems.org"
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
2
4
 
3
5
  gem "activesupport", "~> 4.1.0"
4
6
 
@@ -1,4 +1,6 @@
1
- source "https://rubygems.org"
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
2
4
 
3
5
  gem "activesupport", "~> 4.2.0"
4
6
 
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "activesupport", "~> 5.0.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "activesupport", "~> 5.1.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "activesupport", "~> 5.2.0beta2"
6
+
7
+ gemspec path: "../"
@@ -44,13 +44,13 @@ namespace :load do
44
44
  task :defaults do
45
45
  set :whenever_roles, ->{ :db }
46
46
  set :whenever_command, ->{ [:bundle, :exec, :whenever] }
47
- set :whenever_command_environment_variables, ->{ fetch(:default_env).merge!(rails_env: fetch(:whenever_environment)) }
47
+ set :whenever_command_environment_variables, ->{ fetch(:default_env).merge(rails_env: fetch(:whenever_environment)) }
48
48
  set :whenever_identifier, ->{ fetch :application }
49
49
  set :whenever_environment, ->{ fetch :rails_env, fetch(:stage, "production") }
50
50
  set :whenever_variables, ->{ "environment=#{fetch :whenever_environment}" }
51
51
  set :whenever_load_file, ->{ nil }
52
52
  set :whenever_update_flags, ->{ "--update-crontab #{fetch :whenever_identifier} --set #{fetch :whenever_variables}" }
53
53
  set :whenever_clear_flags, ->{ "--clear-crontab #{fetch :whenever_identifier}" }
54
- set :whenever_path, ->{ fetch :release_path }
54
+ set :whenever_path, ->{ release_path }
55
55
  end
56
56
  end
@@ -102,7 +102,7 @@ module Whenever
102
102
  exit(1)
103
103
  end
104
104
 
105
- # If an existing identier block is found, replace it with the new cron entries
105
+ # If an existing identifier block is found, replace it with the new cron entries
106
106
  if read_crontab =~ Regexp.new("^#{comment_open_regex}\s*$") && read_crontab =~ Regexp.new("^#{comment_close_regex}\s*$")
107
107
  # If the existing crontab file contains backslashes they get lost going through gsub.
108
108
  # .gsub('\\', '\\\\\\') preserves them. Go figure.
@@ -96,15 +96,13 @@ module Whenever
96
96
  timing[0] = comma_separated_timing(minute_frequency, 59, @at || 0)
97
97
  when Whenever.seconds(1, :hour)...Whenever.seconds(1, :day)
98
98
  hour_frequency = (@time / 60 / 60).round
99
- timing[0] = @at.is_a?(Time) ? @at.min : @at
99
+ timing[0] = @at.is_a?(Time) ? @at.min : range_or_integer(@at, 0..59, 'Minute')
100
100
  timing[1] = comma_separated_timing(hour_frequency, 23)
101
- raise ArgumentError, "Minute must be between 0-59, #{timing[0]} given" unless (0..59).include?(timing[0])
102
101
  when Whenever.seconds(1, :day)...Whenever.seconds(1, :month)
103
102
  day_frequency = (@time / 24 / 60 / 60).round
104
103
  timing[0] = @at.is_a?(Time) ? @at.min : 0
105
- timing[1] = @at.is_a?(Time) ? @at.hour : @at
104
+ timing[1] = @at.is_a?(Time) ? @at.hour : range_or_integer(@at, 0..23, 'Hour')
106
105
  timing[2] = comma_separated_timing(day_frequency, 31, 1)
107
- raise ArgumentError, "Hour must be between 0-23, #{timing[1]} given" unless (0..23).include?(timing[1])
108
106
  when Whenever.seconds(1, :month)...Whenever.seconds(1, :year)
109
107
  month_frequency = (@time / 30 / 24 / 60 / 60).round
110
108
  timing[0] = @at.is_a?(Time) ? @at.min : 0
@@ -112,10 +110,9 @@ module Whenever
112
110
  timing[2] = if @at.is_a?(Time)
113
111
  day_given? ? @at.day : 1
114
112
  else
115
- @at.zero? ? 1 : @at
113
+ @at == 0 ? 1 : range_or_integer(@at, 1..31, 'Day')
116
114
  end
117
115
  timing[3] = comma_separated_timing(month_frequency, 12, 1)
118
- raise ArgumentError, "Day must be between 1-31, #{timing[2]} given" unless (1..31).include?(timing[2])
119
116
  when Whenever.seconds(1, :year)
120
117
  timing[0] = @at.is_a?(Time) ? @at.min : 0
121
118
  timing[1] = @at.is_a?(Time) ? @at.hour : 0
@@ -127,9 +124,8 @@ module Whenever
127
124
  timing[3] = if @at.is_a?(Time)
128
125
  day_given? ? @at.month : 1
129
126
  else
130
- @at.zero? ? 1 : @at
127
+ @at == 0 ? 1 : range_or_integer(@at, 1..12, 'Month')
131
128
  end
132
- raise ArgumentError, "Month must be between 1-12, #{timing[3]} given" unless (1..12).include?(timing[3])
133
129
  else
134
130
  return parse_as_string
135
131
  end
@@ -151,7 +147,18 @@ module Whenever
151
147
  return (timing << i) * " " if string.downcase.index(day)
152
148
  end
153
149
 
154
- raise ArgumentError, "Couldn't parse: #{@time}"
150
+ raise ArgumentError, "Couldn't parse: #{@time.inspect}"
151
+ end
152
+
153
+ def range_or_integer(at, valid_range, name)
154
+ must_be_between = "#{name} must be between #{valid_range.min}-#{valid_range.max}"
155
+ if at.is_a?(Range)
156
+ raise ArgumentError, "#{must_be_between}, #{at.min} given" unless valid_range.include?(at.min)
157
+ raise ArgumentError, "#{must_be_between}, #{at.max} given" unless valid_range.include?(at.max)
158
+ return "#{at.min}-#{at.max}"
159
+ end
160
+ raise ArgumentError, "#{must_be_between}, #{at} given" unless valid_range.include?(at)
161
+ at
155
162
  end
156
163
 
157
164
  def comma_separated_timing(frequency, max, start = 0)
@@ -1,4 +1,4 @@
1
- class Numeric
1
+ Numeric.class_eval do
2
2
  def respond_to?(method, include_private = false)
3
3
  super || Whenever::NumericSeconds.public_method_defined?(method)
4
4
  end
@@ -1,3 +1,3 @@
1
1
  module Whenever
2
- VERSION = '0.10.0'
2
+ VERSION = '0.11.0'
3
3
  end
@@ -78,6 +78,10 @@ class CronParseHoursTest < Whenever::TestCase
78
78
  assert_minutes_equals "30", '6:30', :chronic_options => { :hours24 => false }
79
79
  end
80
80
 
81
+ should "parse correctly when given an 'at' with minutes as a Range" do
82
+ assert_minutes_equals "15-30", 15..30
83
+ end
84
+
81
85
  should "raise an exception when given an 'at' with an invalid minute value" do
82
86
  assert_raises ArgumentError do
83
87
  parse_time(Whenever.seconds(1, :hour), nil, 60)
@@ -86,6 +90,14 @@ class CronParseHoursTest < Whenever::TestCase
86
90
  assert_raises ArgumentError do
87
91
  parse_time(Whenever.seconds(1, :hour), nil, -1)
88
92
  end
93
+
94
+ assert_raises ArgumentError do
95
+ parse_time(Whenever.seconds(1, :hour), nil, 0..60)
96
+ end
97
+
98
+ assert_raises ArgumentError do
99
+ parse_time(Whenever.seconds(1, :hour), nil, -1..59)
100
+ end
89
101
  end
90
102
  end
91
103
 
@@ -130,6 +142,10 @@ class CronParseDaysTest < Whenever::TestCase
130
142
  assert_hours_and_minutes_equals %w(23 0), 23
131
143
  end
132
144
 
145
+ should "parse correctly when given an 'at' with hours as a Range" do
146
+ assert_hours_and_minutes_equals %w(3-23 0), 3..23
147
+ end
148
+
133
149
  should "raise an exception when given an 'at' with an invalid hour value" do
134
150
  assert_raises ArgumentError do
135
151
  parse_time(Whenever.seconds(1, :day), nil, 24)
@@ -138,6 +154,14 @@ class CronParseDaysTest < Whenever::TestCase
138
154
  assert_raises ArgumentError do
139
155
  parse_time(Whenever.seconds(1, :day), nil, -1)
140
156
  end
157
+
158
+ assert_raises ArgumentError do
159
+ parse_time(Whenever.seconds(1, :day), nil, 0..24)
160
+ end
161
+
162
+ assert_raises ArgumentError do
163
+ parse_time(Whenever.seconds(1, :day), nil, -1..23)
164
+ end
141
165
  end
142
166
  end
143
167
 
@@ -197,6 +221,10 @@ class CronParseMonthsTest < Whenever::TestCase
197
221
  assert_days_and_hours_and_minutes_equals %w(29 0 0), 29
198
222
  end
199
223
 
224
+ should "parse correctly when given an 'at' with days as a Range" do
225
+ assert_days_and_hours_and_minutes_equals %w(1-7 0 0), 1..7
226
+ end
227
+
200
228
  should "raise an exception when given an 'at' with an invalid day value" do
201
229
  assert_raises ArgumentError do
202
230
  parse_time(Whenever.seconds(1, :month), nil, 32)
@@ -205,6 +233,14 @@ class CronParseMonthsTest < Whenever::TestCase
205
233
  assert_raises ArgumentError do
206
234
  parse_time(Whenever.seconds(1, :month), nil, -1)
207
235
  end
236
+
237
+ assert_raises ArgumentError do
238
+ parse_time(Whenever.seconds(1, :month), nil, 0..30)
239
+ end
240
+
241
+ assert_raises ArgumentError do
242
+ parse_time(Whenever.seconds(1, :month), nil, 1..32)
243
+ end
208
244
  end
209
245
  end
210
246
 
@@ -254,6 +290,10 @@ class CronParseYearTest < Whenever::TestCase
254
290
  assert_months_and_days_and_hours_and_minutes_equals %w(12 1 0 0), 12
255
291
  end
256
292
 
293
+ should "parse correctly when given an 'at' with month as a Range" do
294
+ assert_months_and_days_and_hours_and_minutes_equals %w(1-3 1 0 0), 1..3
295
+ end
296
+
257
297
  should "raise an exception when given an 'at' with an invalid month value" do
258
298
  assert_raises ArgumentError do
259
299
  parse_time(Whenever.seconds(1, :year), nil, 13)
@@ -262,6 +302,14 @@ class CronParseYearTest < Whenever::TestCase
262
302
  assert_raises ArgumentError do
263
303
  parse_time(Whenever.seconds(1, :year), nil, -1)
264
304
  end
305
+
306
+ assert_raises ArgumentError do
307
+ parse_time(Whenever.seconds(1, :year), nil, 0..12)
308
+ end
309
+
310
+ assert_raises ArgumentError do
311
+ parse_time(Whenever.seconds(1, :year), nil, 1..13)
312
+ end
265
313
  end
266
314
  end
267
315
 
@@ -24,4 +24,5 @@ Gem::Specification.new do |s|
24
24
  s.add_development_dependency "rake"
25
25
  s.add_development_dependency "mocha", ">= 0.9.5"
26
26
  s.add_development_dependency "minitest"
27
+ s.add_development_dependency "appraisal"
27
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whenever
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Javan Makhmali
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-20 00:00:00.000000000 Z
11
+ date: 2019-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chronic
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: appraisal
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: Clean ruby syntax for writing and deploying cron jobs.
84
98
  email:
85
99
  - javan@javan.us
@@ -91,6 +105,7 @@ extra_rdoc_files: []
91
105
  files:
92
106
  - ".gitignore"
93
107
  - ".travis.yml"
108
+ - Appraisals
94
109
  - CHANGELOG.md
95
110
  - Gemfile
96
111
  - LICENSE
@@ -100,6 +115,9 @@ files:
100
115
  - bin/wheneverize
101
116
  - gemfiles/activesupport4.1.gemfile
102
117
  - gemfiles/activesupport4.2.gemfile
118
+ - gemfiles/activesupport5.0.gemfile
119
+ - gemfiles/activesupport5.1.gemfile
120
+ - gemfiles/activesupport5.2.gemfile
103
121
  - lib/whenever.rb
104
122
  - lib/whenever/capistrano.rb
105
123
  - lib/whenever/capistrano/v2/hooks.rb
@@ -151,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
169
  version: '0'
152
170
  requirements: []
153
171
  rubyforge_project:
154
- rubygems_version: 2.5.1
172
+ rubygems_version: 2.7.3
155
173
  signing_key:
156
174
  specification_version: 4
157
175
  summary: Cron jobs in ruby.