whenever 0.9.2 → 0.10.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 +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +17 -7
- data/CHANGELOG.md +63 -0
- data/Gemfile +0 -5
- data/LICENSE +1 -1
- data/README.md +101 -18
- data/Rakefile +3 -10
- data/bin/whenever +3 -0
- data/bin/wheneverize +8 -5
- data/gemfiles/activesupport4.1.gemfile +5 -0
- data/gemfiles/activesupport4.2.gemfile +5 -0
- data/lib/whenever/capistrano/v2/recipes.rb +4 -3
- data/lib/whenever/capistrano/v3/tasks/whenever.rake +20 -7
- data/lib/whenever/capistrano.rb +1 -1
- data/lib/whenever/command_line.rb +49 -28
- data/lib/whenever/cron.rb +43 -21
- data/lib/whenever/job.rb +4 -3
- 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/setup.rb +5 -1
- data/lib/whenever/version.rb +1 -1
- data/lib/whenever.rb +15 -14
- data/test/functional/command_line_test.rb +379 -255
- data/test/functional/output_at_test.rb +227 -249
- data/test/functional/output_default_defined_jobs_test.rb +239 -288
- 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 -66
- data/test/functional/output_jobs_with_mailto_test.rb +168 -0
- data/test/functional/output_redirection_test.rb +231 -309
- data/test/test_case.rb +32 -0
- data/test/test_helper.rb +44 -15
- data/test/unit/capistrano_support_test.rb +126 -148
- data/test/unit/cron_test.rb +327 -210
- data/test/unit/executable_test.rb +142 -0
- data/test/unit/job_test.rb +111 -121
- data/whenever.gemspec +5 -4
- metadata +37 -28
- data/lib/whenever/tasks/whenever.rake +0 -43
|
@@ -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,124 +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
|
-
)
|
|
84
|
-
assert_equal %q(before 'quote -> '\'' <- quote' after), job.output
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
should "output escaped double quotes when it's wrapped in them" do
|
|
88
|
-
job = new_job(
|
|
89
|
-
:template => 'before ":foo" after',
|
|
90
|
-
:foo => 'quote -> " <- quote'
|
|
91
|
-
)
|
|
92
|
-
assert_equal %q(before "quote -> \" <- quote" after), job.output
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
context "A Job with a job_template" do
|
|
97
|
-
should "use the job template" do
|
|
98
|
-
job = new_job(:template => ':task', :task => 'abc123', :job_template => 'left :job right')
|
|
99
|
-
assert_equal 'left abc123 right', job.output
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
should "reuse parameter in the job template" do
|
|
103
|
-
job = new_job(:template => ':path :task', :path => 'path', :task => "abc123", :job_template => ':path left :job right')
|
|
104
|
-
assert_equal 'path left path abc123 right', job.output
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
should "escape single quotes" do
|
|
108
|
-
job = new_job(:template => "before ':task' after", :task => "quote -> ' <- quote", :job_template => "left ':job' right")
|
|
109
|
-
assert_equal %q(left 'before '\''quote -> '\\''\\'\\'''\\'' <- quote'\'' after' right), job.output
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
should "escape double quotes" do
|
|
113
|
-
job = new_job(:template => 'before ":task" after', :task => 'quote -> " <- quote', :job_template => 'left ":job" right')
|
|
114
|
-
assert_equal %q(left "before \"quote -> \\\" <- quote\" after" right), job.output
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
private
|
|
119
|
-
|
|
120
|
-
def new_job(options={})
|
|
121
|
-
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
|
|
122
83
|
end
|
|
123
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
|
|
124
114
|
end
|
data/whenever.gemspec
CHANGED
|
@@ -9,18 +9,19 @@ Gem::Specification.new do |s|
|
|
|
9
9
|
s.authors = ["Javan Makhmali"]
|
|
10
10
|
s.email = ["javan@javan.us"]
|
|
11
11
|
s.license = "MIT"
|
|
12
|
-
s.homepage = ""
|
|
12
|
+
s.homepage = "https://github.com/javan/whenever"
|
|
13
13
|
s.summary = %q{Cron jobs in ruby.}
|
|
14
14
|
s.description = %q{Clean ruby syntax for writing and deploying cron jobs.}
|
|
15
15
|
s.files = `git ls-files`.split("\n")
|
|
16
16
|
s.test_files = `git ls-files -- test/{functional,unit}/*`.split("\n")
|
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
18
18
|
s.require_paths = ["lib"]
|
|
19
|
+
s.required_ruby_version = ">= 1.9.3"
|
|
19
20
|
|
|
20
21
|
s.add_dependency "chronic", ">= 0.6.3"
|
|
21
|
-
s.add_dependency "activesupport", ">= 2.3.4"
|
|
22
22
|
|
|
23
|
-
s.add_development_dependency "
|
|
24
|
-
s.add_development_dependency "mocha", ">= 0.9.5"
|
|
23
|
+
s.add_development_dependency "bundler"
|
|
25
24
|
s.add_development_dependency "rake"
|
|
25
|
+
s.add_development_dependency "mocha", ">= 0.9.5"
|
|
26
|
+
s.add_development_dependency "minitest"
|
|
26
27
|
end
|
metadata
CHANGED
|
@@ -1,83 +1,83 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: whenever
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.10.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:
|
|
11
|
+
date: 2017-11-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: chronic
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- -
|
|
17
|
+
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: 0.6.3
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- -
|
|
24
|
+
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: 0.6.3
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: bundler
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- -
|
|
31
|
+
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version:
|
|
34
|
-
type: :
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- -
|
|
38
|
+
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version:
|
|
40
|
+
version: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
42
|
+
name: rake
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- -
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
47
|
+
version: '0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- -
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
54
|
+
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: mocha
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- -
|
|
59
|
+
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
61
|
version: 0.9.5
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- -
|
|
66
|
+
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: 0.9.5
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
70
|
+
name: minitest
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- -
|
|
73
|
+
- - ">="
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
75
|
version: '0'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- -
|
|
80
|
+
- - ">="
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '0'
|
|
83
83
|
description: Clean ruby syntax for writing and deploying cron jobs.
|
|
@@ -89,8 +89,8 @@ executables:
|
|
|
89
89
|
extensions: []
|
|
90
90
|
extra_rdoc_files: []
|
|
91
91
|
files:
|
|
92
|
-
- .gitignore
|
|
93
|
-
- .travis.yml
|
|
92
|
+
- ".gitignore"
|
|
93
|
+
- ".travis.yml"
|
|
94
94
|
- CHANGELOG.md
|
|
95
95
|
- Gemfile
|
|
96
96
|
- LICENSE
|
|
@@ -98,6 +98,8 @@ files:
|
|
|
98
98
|
- Rakefile
|
|
99
99
|
- bin/whenever
|
|
100
100
|
- bin/wheneverize
|
|
101
|
+
- gemfiles/activesupport4.1.gemfile
|
|
102
|
+
- gemfiles/activesupport4.2.gemfile
|
|
101
103
|
- lib/whenever.rb
|
|
102
104
|
- lib/whenever/capistrano.rb
|
|
103
105
|
- lib/whenever/capistrano/v2/hooks.rb
|
|
@@ -108,9 +110,11 @@ files:
|
|
|
108
110
|
- lib/whenever/cron.rb
|
|
109
111
|
- lib/whenever/job.rb
|
|
110
112
|
- lib/whenever/job_list.rb
|
|
113
|
+
- lib/whenever/numeric.rb
|
|
114
|
+
- lib/whenever/numeric_seconds.rb
|
|
115
|
+
- lib/whenever/os.rb
|
|
111
116
|
- lib/whenever/output_redirection.rb
|
|
112
117
|
- lib/whenever/setup.rb
|
|
113
|
-
- lib/whenever/tasks/whenever.rake
|
|
114
118
|
- lib/whenever/version.rb
|
|
115
119
|
- test/functional/command_line_test.rb
|
|
116
120
|
- test/functional/output_at_test.rb
|
|
@@ -118,13 +122,16 @@ files:
|
|
|
118
122
|
- test/functional/output_defined_job_test.rb
|
|
119
123
|
- test/functional/output_env_test.rb
|
|
120
124
|
- test/functional/output_jobs_for_roles_test.rb
|
|
125
|
+
- test/functional/output_jobs_with_mailto_test.rb
|
|
121
126
|
- test/functional/output_redirection_test.rb
|
|
127
|
+
- test/test_case.rb
|
|
122
128
|
- test/test_helper.rb
|
|
123
129
|
- test/unit/capistrano_support_test.rb
|
|
124
130
|
- test/unit/cron_test.rb
|
|
131
|
+
- test/unit/executable_test.rb
|
|
125
132
|
- test/unit/job_test.rb
|
|
126
133
|
- whenever.gemspec
|
|
127
|
-
homepage:
|
|
134
|
+
homepage: https://github.com/javan/whenever
|
|
128
135
|
licenses:
|
|
129
136
|
- MIT
|
|
130
137
|
metadata: {}
|
|
@@ -134,17 +141,17 @@ require_paths:
|
|
|
134
141
|
- lib
|
|
135
142
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
136
143
|
requirements:
|
|
137
|
-
- -
|
|
144
|
+
- - ">="
|
|
138
145
|
- !ruby/object:Gem::Version
|
|
139
|
-
version:
|
|
146
|
+
version: 1.9.3
|
|
140
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
148
|
requirements:
|
|
142
|
-
- -
|
|
149
|
+
- - ">="
|
|
143
150
|
- !ruby/object:Gem::Version
|
|
144
151
|
version: '0'
|
|
145
152
|
requirements: []
|
|
146
153
|
rubyforge_project:
|
|
147
|
-
rubygems_version: 2.
|
|
154
|
+
rubygems_version: 2.5.1
|
|
148
155
|
signing_key:
|
|
149
156
|
specification_version: 4
|
|
150
157
|
summary: Cron jobs in ruby.
|
|
@@ -155,7 +162,9 @@ test_files:
|
|
|
155
162
|
- test/functional/output_defined_job_test.rb
|
|
156
163
|
- test/functional/output_env_test.rb
|
|
157
164
|
- test/functional/output_jobs_for_roles_test.rb
|
|
165
|
+
- test/functional/output_jobs_with_mailto_test.rb
|
|
158
166
|
- test/functional/output_redirection_test.rb
|
|
159
167
|
- test/unit/capistrano_support_test.rb
|
|
160
168
|
- test/unit/cron_test.rb
|
|
169
|
+
- test/unit/executable_test.rb
|
|
161
170
|
- test/unit/job_test.rb
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
namespace :whenever do
|
|
2
|
-
def setup_whenever_task(*args, &block)
|
|
3
|
-
args = Array(fetch(:whenever_command)) + args
|
|
4
|
-
|
|
5
|
-
on roles fetch(:whenever_roles) do |host|
|
|
6
|
-
host_args = Array(yield(host))
|
|
7
|
-
within release_path do
|
|
8
|
-
with fetch(:whenever_command_environment_variables) do
|
|
9
|
-
execute *(args + host_args)
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
desc "Update application's crontab entries using Whenever"
|
|
16
|
-
task :update_crontab do
|
|
17
|
-
setup_whenever_task do |host|
|
|
18
|
-
roles = host.roles_array.join(",")
|
|
19
|
-
[fetch(:whenever_update_flags), "--roles=#{roles}"]
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
desc "Clear application's crontab entries using Whenever"
|
|
24
|
-
task :clear_crontab do
|
|
25
|
-
setup_whenever_task(fetch(:whenever_clear_flags))
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
after "deploy:updated", "whenever:update_crontab"
|
|
29
|
-
after "deploy:reverted", "whenever:update_crontab"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
namespace :load do
|
|
33
|
-
task :defaults do
|
|
34
|
-
set :whenever_roles, ->{ :db }
|
|
35
|
-
set :whenever_command, ->{ [:bundle, :exec, :whenever] }
|
|
36
|
-
set :whenever_command_environment_variables, ->{ {} }
|
|
37
|
-
set :whenever_identifier, ->{ fetch :application }
|
|
38
|
-
set :whenever_environment, ->{ fetch :rails_env, "production" }
|
|
39
|
-
set :whenever_variables, ->{ "environment=#{fetch :whenever_environment}" }
|
|
40
|
-
set :whenever_update_flags, ->{ "--update-crontab #{fetch :whenever_identifier} --set #{fetch :whenever_variables}" }
|
|
41
|
-
set :whenever_clear_flags, ->{ "--clear-crontab #{fetch :whenever_identifier}" }
|
|
42
|
-
end
|
|
43
|
-
end
|