whenever 0.8.2 → 1.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 +7 -0
- data/.gitignore +1 -0
- data/.travis.yml +20 -7
- data/Appraisals +19 -0
- data/CHANGELOG.md +116 -3
- data/Gemfile +3 -3
- data/LICENSE +2 -2
- data/README.md +133 -32
- data/Rakefile +3 -10
- data/bin/whenever +3 -0
- data/bin/wheneverize +8 -5
- data/gemfiles/activesupport4.1.gemfile +7 -0
- data/gemfiles/activesupport4.2.gemfile +7 -0
- data/gemfiles/activesupport5.0.gemfile +7 -0
- data/gemfiles/activesupport5.1.gemfile +7 -0
- data/gemfiles/activesupport5.2.gemfile +7 -0
- data/lib/whenever/capistrano/v2/hooks.rb +8 -0
- data/lib/whenever/capistrano/{recipes.rb → v2/recipes.rb} +7 -13
- data/lib/whenever/capistrano/{support.rb → v2/support.rb} +12 -0
- data/lib/whenever/capistrano/v3/tasks/whenever.rake +56 -0
- data/lib/whenever/capistrano.rb +5 -6
- data/lib/whenever/command_line.rb +69 -48
- data/lib/whenever/cron.rb +54 -25
- data/lib/whenever/job.rb +13 -14
- data/lib/whenever/job_list.rb +54 -24
- data/lib/whenever/numeric.rb +13 -0
- data/lib/whenever/numeric_seconds.rb +48 -0
- data/lib/whenever/os.rb +7 -0
- data/lib/whenever/output_redirection.rb +1 -0
- data/lib/whenever/setup.rb +19 -15
- data/lib/whenever/version.rb +2 -2
- data/lib/whenever.rb +19 -14
- data/test/functional/command_line_test.rb +379 -243
- data/test/functional/output_at_test.rb +227 -249
- data/test/functional/output_default_defined_jobs_test.rb +251 -193
- data/test/functional/output_defined_job_test.rb +65 -91
- data/test/functional/output_env_test.rb +22 -26
- data/test/functional/output_jobs_for_roles_test.rb +46 -65
- data/test/functional/output_jobs_with_mailto_test.rb +168 -0
- data/test/functional/output_redirection_test.rb +232 -291
- data/test/test_case.rb +32 -0
- data/test/test_helper.rb +44 -15
- data/test/unit/capistrano_support_test.rb +128 -134
- data/test/unit/cron_test.rb +373 -208
- data/test/unit/executable_test.rb +142 -0
- data/test/unit/job_test.rb +111 -117
- data/whenever.gemspec +7 -4
- 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
|
data/test/unit/job_test.rb
CHANGED
@@ -1,120 +1,114 @@
|
|
1
|
-
require
|
2
|
-
|
3
|
-
class JobTest <
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
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.
|
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 "
|
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.
|
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:
|
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:
|
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:
|
38
|
-
type: :
|
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:
|
40
|
+
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
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:
|
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:
|
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:
|
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/
|
115
|
-
- lib/whenever/capistrano/
|
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:
|
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:
|
172
|
+
rubygems_version: 2.7.3
|
156
173
|
signing_key:
|
157
|
-
specification_version:
|
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
|