whenever 0.8.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.travis.yml +20 -7
  4. data/Appraisals +19 -0
  5. data/CHANGELOG.md +116 -3
  6. data/Gemfile +3 -3
  7. data/LICENSE +2 -2
  8. data/README.md +133 -32
  9. data/Rakefile +3 -10
  10. data/bin/whenever +3 -0
  11. data/bin/wheneverize +8 -5
  12. data/gemfiles/activesupport4.1.gemfile +7 -0
  13. data/gemfiles/activesupport4.2.gemfile +7 -0
  14. data/gemfiles/activesupport5.0.gemfile +7 -0
  15. data/gemfiles/activesupport5.1.gemfile +7 -0
  16. data/gemfiles/activesupport5.2.gemfile +7 -0
  17. data/lib/whenever/capistrano/v2/hooks.rb +8 -0
  18. data/lib/whenever/capistrano/{recipes.rb → v2/recipes.rb} +7 -13
  19. data/lib/whenever/capistrano/{support.rb → v2/support.rb} +12 -0
  20. data/lib/whenever/capistrano/v3/tasks/whenever.rake +56 -0
  21. data/lib/whenever/capistrano.rb +5 -6
  22. data/lib/whenever/command_line.rb +69 -48
  23. data/lib/whenever/cron.rb +54 -25
  24. data/lib/whenever/job.rb +13 -14
  25. data/lib/whenever/job_list.rb +54 -24
  26. data/lib/whenever/numeric.rb +13 -0
  27. data/lib/whenever/numeric_seconds.rb +48 -0
  28. data/lib/whenever/os.rb +7 -0
  29. data/lib/whenever/output_redirection.rb +1 -0
  30. data/lib/whenever/setup.rb +19 -15
  31. data/lib/whenever/version.rb +2 -2
  32. data/lib/whenever.rb +19 -14
  33. data/test/functional/command_line_test.rb +379 -243
  34. data/test/functional/output_at_test.rb +227 -249
  35. data/test/functional/output_default_defined_jobs_test.rb +251 -193
  36. data/test/functional/output_defined_job_test.rb +65 -91
  37. data/test/functional/output_env_test.rb +22 -26
  38. data/test/functional/output_jobs_for_roles_test.rb +46 -65
  39. data/test/functional/output_jobs_with_mailto_test.rb +168 -0
  40. data/test/functional/output_redirection_test.rb +232 -291
  41. data/test/test_case.rb +32 -0
  42. data/test/test_helper.rb +44 -15
  43. data/test/unit/capistrano_support_test.rb +128 -134
  44. data/test/unit/cron_test.rb +373 -208
  45. data/test/unit/executable_test.rb +142 -0
  46. data/test/unit/job_test.rb +111 -117
  47. data/whenever.gemspec +7 -4
  48. metadata +63 -44
@@ -0,0 +1,142 @@
1
+ require 'test_helper'
2
+
3
+ describe 'Executable' do
4
+ describe 'bin/wheneverize' do
5
+ describe 'ARGV is not empty' do
6
+ describe 'file does not exist' do
7
+ file = '/tmp/this_does_not_exist'
8
+
9
+ it 'prints STDERR' do
10
+ out, err = capture_subprocess_io do
11
+ system('wheneverize', file)
12
+ end
13
+
14
+ assert_empty(out)
15
+ assert_match(/`#{file}' does not exist./, err)
16
+ end
17
+ end
18
+
19
+ describe 'file exists, but not a directory' do
20
+ file = '/tmp/this_is_a_file.txt'
21
+ before { FileUtils.touch(file) }
22
+
23
+ it 'prints STDERR' do
24
+ begin
25
+ out, err = capture_subprocess_io do
26
+ system('wheneverize', file)
27
+ end
28
+
29
+ assert_empty(out)
30
+ assert_match(/`#{file}' is not a directory./, err)
31
+ ensure
32
+ FileUtils.rm(file)
33
+ end
34
+ end
35
+ end
36
+
37
+ describe 'file is a directory, but another param(s) are given as well' do
38
+ file = '/tmp/this_is_a_directory'
39
+ before { FileUtils.mkdir(file) }
40
+
41
+ it 'prints STDERR' do
42
+ begin
43
+ out, err = capture_subprocess_io do
44
+ system('wheneverize', file, 'another', 'parameters')
45
+ end
46
+
47
+ assert_empty(out)
48
+ assert_match(/#{"Too many arguments; please specify only the " \
49
+ "directory to wheneverize."}/, err)
50
+ ensure
51
+ FileUtils.rmdir(file)
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ describe 'ARGV is empty' do
58
+ dir = '.'
59
+ file = 'config/schedule.rb'
60
+ path = File.join(dir, file)
61
+
62
+ describe 'config file already exists' do
63
+ before do
64
+ FileUtils.mkdir(File.dirname(path))
65
+ FileUtils.touch(path)
66
+ end
67
+
68
+ it 'prints STDOUT and STDERR' do
69
+ begin
70
+ out, err = capture_subprocess_io do
71
+ system('wheneverize')
72
+ end
73
+
74
+ assert_match(/\[done\] wheneverized!/, out)
75
+ assert_match(/\[skip\] `#{path}' already exists/, err)
76
+ ensure
77
+ FileUtils.rm_rf(File.dirname(path))
78
+ end
79
+ end
80
+ end
81
+
82
+ describe 'config directory does not exist' do
83
+ it 'prints STDOUT and STDERR' do
84
+ begin
85
+ out, err = capture_subprocess_io do
86
+ system('wheneverize')
87
+ end
88
+
89
+ assert_match(/\[add\] creating `#{File.dirname(path)}'\n/, err)
90
+ assert_match(/\[done\] wheneverized!/, out)
91
+ ensure
92
+ FileUtils.rm_rf(File.dirname(path))
93
+ end
94
+ end
95
+ end
96
+
97
+ describe 'config directory exists, but file does not' do
98
+ before { FileUtils.mkdir(File.dirname(path)) }
99
+
100
+ it 'writes config file and prints STDOUT' do
101
+ begin
102
+ out, err = capture_subprocess_io do
103
+ system('wheneverize')
104
+ end
105
+
106
+ assert_empty(err)
107
+ assert_match(
108
+ /\[add\] writing `#{path}'\n\[done\] wheneverized!/,
109
+ out
110
+ )
111
+
112
+ assert_match((<<-FILE
113
+ # Use this file to easily define all of your cron jobs.
114
+ #
115
+ # It's helpful, but not entirely necessary to understand cron before proceeding.
116
+ # http://en.wikipedia.org/wiki/Cron
117
+
118
+ # Example:
119
+ #
120
+ # set :output, "/path/to/my/cron_log.log"
121
+ #
122
+ # every 2.hours do
123
+ # command "/usr/bin/some_great_command"
124
+ # runner "MyModel.some_method"
125
+ # rake "some:great:rake:task"
126
+ # end
127
+ #
128
+ # every 4.days do
129
+ # runner "AnotherModel.prune_old_records"
130
+ # end
131
+
132
+ # Learn more: http://github.com/javan/whenever
133
+ FILE
134
+ ), IO.read(path))
135
+ ensure
136
+ FileUtils.rm_rf(File.dirname(path))
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end
@@ -1,120 +1,114 @@
1
- require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
2
-
3
- class JobTest < Test::Unit::TestCase
4
-
5
- context "A Job" do
6
- should "return the :at set when #at is called" do
7
- assert_equal 'foo', new_job(:at => 'foo').at
8
- end
9
-
10
- should "return the :roles set when #roles is called" do
11
- assert_equal ['foo', 'bar'], new_job(:roles => ['foo', 'bar']).roles
12
- end
13
-
14
- should "return whether it has a role from #has_role?" do
15
- assert new_job(:roles => 'foo').has_role?('foo')
16
- assert_equal false, new_job(:roles => 'bar').has_role?('foo')
17
- end
18
-
19
- should "substitute the :task when #output is called" do
20
- job = new_job(:template => ":task", :task => 'abc123')
21
- assert_equal 'abc123', job.output
22
- end
23
-
24
- should "substitute the :path when #output is called" do
25
- assert_equal 'foo', new_job(:template => ':path', :path => 'foo').output
26
- end
27
-
28
- should "substitute the :path with the default Whenever.path if none is provided when #output is called" do
29
- Whenever.expects(:path).returns('/my/path')
30
- assert_equal '/my/path', new_job(:template => ':path').output
31
- end
32
-
33
- should "not substitute parameters for which no value is set" do
34
- assert_equal 'Hello :world', new_job(:template => ':matching :world', :matching => 'Hello').output
35
- end
36
-
37
- should "escape the :path" do
38
- assert_equal '/my/spacey\ path', new_job(:template => ':path', :path => '/my/spacey path').output
39
- end
40
-
41
- should "escape percent signs" do
42
- job = new_job(
43
- :template => "before :foo after",
44
- :foo => "percent -> % <- percent"
45
- )
46
- assert_equal %q(before percent -> \% <- percent after), job.output
47
- end
48
-
49
- should "assume percent signs are not already escaped" do
50
- job = new_job(
51
- :template => "before :foo after",
52
- :foo => %q(percent preceded by a backslash -> \% <-)
53
- )
54
- assert_equal %q(before percent preceded by a backslash -> \\\% <- after), job.output
55
- end
56
-
57
- should "reject newlines" do
58
- job = new_job(
59
- :template => "before :foo after",
60
- :foo => "newline -> \n <- newline"
61
- )
62
- assert_raise ArgumentError do
63
- job.output
64
- end
65
- end
66
- end
67
-
68
-
69
- context "A Job with quotes" do
70
- should "output the :task if it's in single quotes" do
71
- job = new_job(:template => "':task'", :task => 'abc123')
72
- assert_equal %q('abc123'), job.output
73
- end
74
-
75
- should "output the :task if it's in double quotes" do
76
- job = new_job(:template => '":task"', :task => 'abc123')
77
- assert_equal %q("abc123"), job.output
78
- end
79
-
80
- should "output escaped single quotes in when it's wrapped in them" do
81
- job = new_job(
82
- :template => "before ':foo' after",
83
- :foo => "quote -> ' <- quote"
84
- )
85
- assert_equal %q(before 'quote -> '\'' <- quote' after), job.output
86
- end
87
-
88
- should "output escaped double quotes when it's wrapped in them" do
89
- job = new_job(
90
- :template => 'before ":foo" after',
91
- :foo => 'quote -> " <- quote'
92
- )
93
- assert_equal %q(before "quote -> \" <- quote" after), job.output
94
- end
95
- end
96
-
97
- context "A Job with a job_template" do
98
- should "use the job template" do
99
- job = new_job(:template => ':task', :task => 'abc123', :job_template => 'left :job right')
100
- assert_equal 'left abc123 right', job.output
101
- end
102
-
103
- should "escape single quotes" do
104
- job = new_job(:template => "before ':task' after", :task => "quote -> ' <- quote", :job_template => "left ':job' right")
105
- assert_equal %q(left 'before '\''quote -> '\\''\\'\\'''\\'' <- quote'\'' after' right), job.output
106
- end
107
-
108
- should "escape double quotes" do
109
- job = new_job(:template => 'before ":task" after', :task => 'quote -> " <- quote', :job_template => 'left ":job" right')
110
- assert_equal %q(left "before \"quote -> \\\" <- quote\" after" right), job.output
111
- end
112
- end
113
-
114
- private
115
-
116
- def new_job(options={})
117
- Whenever::Job.new(options)
1
+ require 'test_helper'
2
+
3
+ class JobTest < Whenever::TestCase
4
+ should "return the :at set when #at is called" do
5
+ assert_equal 'foo', new_job(:at => 'foo').at
6
+ end
7
+
8
+ should "return the :roles set when #roles is called" do
9
+ assert_equal ['foo', 'bar'], new_job(:roles => ['foo', 'bar']).roles
10
+ end
11
+
12
+ should "return whether it has a role from #has_role?" do
13
+ assert new_job(:roles => 'foo').has_role?('foo')
14
+ assert_equal false, new_job(:roles => 'bar').has_role?('foo')
15
+ end
16
+
17
+ should "substitute the :task when #output is called" do
18
+ job = new_job(:template => ":task", :task => 'abc123')
19
+ assert_equal 'abc123', job.output
20
+ end
21
+
22
+ should "substitute the :path when #output is called" do
23
+ assert_equal 'foo', new_job(:template => ':path', :path => 'foo').output
24
+ end
25
+
26
+ should "substitute the :path with the default Whenever.path if none is provided when #output is called" do
27
+ Whenever.expects(:path).returns('/my/path')
28
+ assert_equal '/my/path', new_job(:template => ':path').output
29
+ end
30
+
31
+ should "not substitute parameters for which no value is set" do
32
+ assert_equal 'Hello :world', new_job(:template => ':matching :world', :matching => 'Hello').output
33
+ end
34
+
35
+ should "escape the :path" do
36
+ assert_equal '/my/spacey\ path', new_job(:template => ':path', :path => '/my/spacey path').output
37
+ end
38
+
39
+ should "escape percent signs" do
40
+ job = new_job(
41
+ :template => "before :foo after",
42
+ :foo => "percent -> % <- percent"
43
+ )
44
+ assert_equal %q(before percent -> \% <- percent after), job.output
45
+ end
46
+
47
+ should "assume percent signs are not already escaped" do
48
+ job = new_job(
49
+ :template => "before :foo after",
50
+ :foo => %q(percent preceded by a backslash -> \% <-)
51
+ )
52
+ assert_equal %q(before percent preceded by a backslash -> \\\% <- after), job.output
53
+ end
54
+
55
+ should "squish spaces and newlines" do
56
+ job = new_job(
57
+ :template => "before :foo after",
58
+ :foo => "newline -> \n <- newline space -> <- space"
59
+ )
60
+
61
+ assert_equal "before newline -> <- newline space -> <- space after", job.output
62
+ end
63
+ end
64
+
65
+
66
+ class JobWithQuotesTest < Whenever::TestCase
67
+ should "output the :task if it's in single quotes" do
68
+ job = new_job(:template => "':task'", :task => 'abc123')
69
+ assert_equal %q('abc123'), job.output
70
+ end
71
+
72
+ should "output the :task if it's in double quotes" do
73
+ job = new_job(:template => '":task"', :task => 'abc123')
74
+ assert_equal %q("abc123"), job.output
75
+ end
76
+
77
+ should "output escaped single quotes in when it's wrapped in them" do
78
+ job = new_job(
79
+ :template => "before ':foo' after",
80
+ :foo => "quote -> ' <- quote"
81
+ )
82
+ assert_equal %q(before 'quote -> '\'' <- quote' after), job.output
118
83
  end
119
84
 
85
+ should "output escaped double quotes when it's wrapped in them" do
86
+ job = new_job(
87
+ :template => 'before ":foo" after',
88
+ :foo => 'quote -> " <- quote'
89
+ )
90
+ assert_equal %q(before "quote -> \" <- quote" after), job.output
91
+ end
92
+ end
93
+
94
+ class JobWithJobTemplateTest < Whenever::TestCase
95
+ should "use the job template" do
96
+ job = new_job(:template => ':task', :task => 'abc123', :job_template => 'left :job right')
97
+ assert_equal 'left abc123 right', job.output
98
+ end
99
+
100
+ should "reuse parameter in the job template" do
101
+ job = new_job(:template => ':path :task', :path => 'path', :task => "abc123", :job_template => ':path left :job right')
102
+ assert_equal 'path left path abc123 right', job.output
103
+ end
104
+
105
+ should "escape single quotes" do
106
+ job = new_job(:template => "before ':task' after", :task => "quote -> ' <- quote", :job_template => "left ':job' right")
107
+ assert_equal %q(left 'before '\''quote -> '\\''\\'\\'''\\'' <- quote'\'' after' right), job.output
108
+ end
109
+
110
+ should "escape double quotes" do
111
+ job = new_job(:template => 'before ":task" after', :task => 'quote -> " <- quote', :job_template => 'left ":job" right')
112
+ assert_equal %q(left "before \"quote -> \\\" <- quote\" after" right), job.output
113
+ end
120
114
  end
data/whenever.gemspec CHANGED
@@ -8,18 +8,21 @@ Gem::Specification.new do |s|
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Javan Makhmali"]
10
10
  s.email = ["javan@javan.us"]
11
- s.homepage = ""
11
+ s.license = "MIT"
12
+ s.homepage = "https://github.com/javan/whenever"
12
13
  s.summary = %q{Cron jobs in ruby.}
13
14
  s.description = %q{Clean ruby syntax for writing and deploying cron jobs.}
14
15
  s.files = `git ls-files`.split("\n")
15
16
  s.test_files = `git ls-files -- test/{functional,unit}/*`.split("\n")
16
17
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
18
  s.require_paths = ["lib"]
19
+ s.required_ruby_version = ">= 1.9.3"
18
20
 
19
21
  s.add_dependency "chronic", ">= 0.6.3"
20
- s.add_dependency "activesupport", ">= 2.3.4"
21
22
 
22
- s.add_development_dependency "shoulda", ">= 2.1.1"
23
- s.add_development_dependency "mocha", ">= 0.9.5"
23
+ s.add_development_dependency "bundler"
24
24
  s.add_development_dependency "rake"
25
+ s.add_development_dependency "mocha", ">= 0.9.5"
26
+ s.add_development_dependency "minitest"
27
+ s.add_development_dependency "appraisal"
25
28
  end
metadata CHANGED
@@ -1,94 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whenever
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Javan Makhmali
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-01-10 00:00:00.000000000 Z
11
+ date: 2019-06-13 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: chronic
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: 0.6.3
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: 0.6.3
30
27
  - !ruby/object:Gem::Dependency
31
- name: activesupport
28
+ name: bundler
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
- version: 2.3.4
38
- type: :runtime
33
+ version: '0'
34
+ type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
- version: 2.3.4
40
+ version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
- name: shoulda
42
+ name: rake
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
- version: 2.1.1
47
+ version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
- version: 2.1.1
54
+ version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: mocha
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: 0.9.5
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ">="
76
67
  - !ruby/object:Gem::Version
77
68
  version: 0.9.5
78
69
  - !ruby/object:Gem::Dependency
79
- name: rake
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: appraisal
80
85
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
86
  requirements:
83
- - - ! '>='
87
+ - - ">="
84
88
  - !ruby/object:Gem::Version
85
89
  version: '0'
86
90
  type: :development
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
- - - ! '>='
94
+ - - ">="
92
95
  - !ruby/object:Gem::Version
93
96
  version: '0'
94
97
  description: Clean ruby syntax for writing and deploying cron jobs.
@@ -100,8 +103,9 @@ executables:
100
103
  extensions: []
101
104
  extra_rdoc_files: []
102
105
  files:
103
- - .gitignore
104
- - .travis.yml
106
+ - ".gitignore"
107
+ - ".travis.yml"
108
+ - Appraisals
105
109
  - CHANGELOG.md
106
110
  - Gemfile
107
111
  - LICENSE
@@ -109,14 +113,24 @@ files:
109
113
  - Rakefile
110
114
  - bin/whenever
111
115
  - bin/wheneverize
116
+ - gemfiles/activesupport4.1.gemfile
117
+ - gemfiles/activesupport4.2.gemfile
118
+ - gemfiles/activesupport5.0.gemfile
119
+ - gemfiles/activesupport5.1.gemfile
120
+ - gemfiles/activesupport5.2.gemfile
112
121
  - lib/whenever.rb
113
122
  - lib/whenever/capistrano.rb
114
- - lib/whenever/capistrano/recipes.rb
115
- - lib/whenever/capistrano/support.rb
123
+ - lib/whenever/capistrano/v2/hooks.rb
124
+ - lib/whenever/capistrano/v2/recipes.rb
125
+ - lib/whenever/capistrano/v2/support.rb
126
+ - lib/whenever/capistrano/v3/tasks/whenever.rake
116
127
  - lib/whenever/command_line.rb
117
128
  - lib/whenever/cron.rb
118
129
  - lib/whenever/job.rb
119
130
  - lib/whenever/job_list.rb
131
+ - lib/whenever/numeric.rb
132
+ - lib/whenever/numeric_seconds.rb
133
+ - lib/whenever/os.rb
120
134
  - lib/whenever/output_redirection.rb
121
135
  - lib/whenever/setup.rb
122
136
  - lib/whenever/version.rb
@@ -126,35 +140,38 @@ files:
126
140
  - test/functional/output_defined_job_test.rb
127
141
  - test/functional/output_env_test.rb
128
142
  - test/functional/output_jobs_for_roles_test.rb
143
+ - test/functional/output_jobs_with_mailto_test.rb
129
144
  - test/functional/output_redirection_test.rb
145
+ - test/test_case.rb
130
146
  - test/test_helper.rb
131
147
  - test/unit/capistrano_support_test.rb
132
148
  - test/unit/cron_test.rb
149
+ - test/unit/executable_test.rb
133
150
  - test/unit/job_test.rb
134
151
  - whenever.gemspec
135
- homepage: ''
136
- licenses: []
152
+ homepage: https://github.com/javan/whenever
153
+ licenses:
154
+ - MIT
155
+ metadata: {}
137
156
  post_install_message:
138
157
  rdoc_options: []
139
158
  require_paths:
140
159
  - lib
141
160
  required_ruby_version: !ruby/object:Gem::Requirement
142
- none: false
143
161
  requirements:
144
- - - ! '>='
162
+ - - ">="
145
163
  - !ruby/object:Gem::Version
146
- version: '0'
164
+ version: 1.9.3
147
165
  required_rubygems_version: !ruby/object:Gem::Requirement
148
- none: false
149
166
  requirements:
150
- - - ! '>='
167
+ - - ">="
151
168
  - !ruby/object:Gem::Version
152
169
  version: '0'
153
170
  requirements: []
154
171
  rubyforge_project:
155
- rubygems_version: 1.8.23
172
+ rubygems_version: 2.7.3
156
173
  signing_key:
157
- specification_version: 3
174
+ specification_version: 4
158
175
  summary: Cron jobs in ruby.
159
176
  test_files:
160
177
  - test/functional/command_line_test.rb
@@ -163,7 +180,9 @@ test_files:
163
180
  - test/functional/output_defined_job_test.rb
164
181
  - test/functional/output_env_test.rb
165
182
  - test/functional/output_jobs_for_roles_test.rb
183
+ - test/functional/output_jobs_with_mailto_test.rb
166
184
  - test/functional/output_redirection_test.rb
167
185
  - test/unit/capistrano_support_test.rb
168
186
  - test/unit/cron_test.rb
187
+ - test/unit/executable_test.rb
169
188
  - test/unit/job_test.rb