whenever 0.6.2 → 0.6.6

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  pkg
3
3
  doc
4
4
  .*.sw[a-z]
5
+ Gemfile.lock
@@ -1,3 +1,17 @@
1
+ ### 0.6.6 / March 8th, 2011
2
+
3
+ * Fix unclosed identifier bug. #119 [Javan Makhmali]
4
+
5
+
6
+ ### 0.6.5 / March 8th, 2011
7
+
8
+ * Preserve whitespace at the end of crontab file. #95 [Rich Meyers]
9
+
10
+ * Setting nil or blank environment variables now properly formats output. [T.J. VanSlyke]
11
+
12
+ * Allow raw cron sytax, added -i to bash job template, general cleanup. [Javan Makhmali]
13
+
14
+
1
15
  ### 0.6.2 / October 26th, 2010
2
16
 
3
17
  * --clear-crontab option completely removes entries. #63 [Javan Makhmali]
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in newever.gemspec
4
+ gemspec
data/README.md CHANGED
@@ -37,6 +37,10 @@ This will create an initial "config/schedule.rb" file you.
37
37
  runner "Task.do_something_great"
38
38
  end
39
39
 
40
+ every '0 0 27-31 * *' do
41
+ command "echo 'you can use raw cron sytax too'"
42
+ end
43
+
40
44
  More examples on the wiki: <http://wiki.github.com/javan/whenever/instructions-and-examples>
41
45
 
42
46
  ### Define your own job types
@@ -100,7 +104,7 @@ This will simply show you your schedule.rb file converted to cron syntax. It doe
100
104
 
101
105
  ### Credit
102
106
 
103
- Whenever was created for use at Inkling (<http://inklingmarkets.com>) where I work. Their take on it: <http://blog.inklingmarkets.com/2009/02/whenever-easy-way-to-do-cron-jobs-from.html>
107
+ Whenever was created for use at Inkling (<http://inklingmarkets.com>). Their take on it: <http://blog.inklingmarkets.com/2009/02/whenever-easy-way-to-do-cron-jobs-from.html>
104
108
 
105
109
  Thanks to all the contributors who have made it even better: <http://github.com/javan/whenever/contributors>
106
110
 
data/Rakefile CHANGED
@@ -1,35 +1,11 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
- require File.expand_path(File.dirname(__FILE__) + "/lib/whenever/version")
5
-
6
- begin
7
- require 'jeweler'
8
- Jeweler::Tasks.new do |gemspec|
9
- gemspec.name = "whenever"
10
- gemspec.version = Whenever::VERSION
11
- gemspec.summary = "Write your cron jobs in ruby."
12
- gemspec.description = "Clean ruby syntax for writing and deploying cron jobs."
13
- gemspec.email = "javan@javan.us"
14
- gemspec.homepage = "http://github.com/javan/whenever"
15
- gemspec.authors = ["Javan Makhmali"]
16
- gemspec.add_dependency 'aaronh-chronic', '>= 0.3.9'
17
- gemspec.add_dependency 'activesupport', '>= 2.3.4'
18
- gemspec.add_development_dependency 'shoulda', '>= 2.1.1'
19
- gemspec.add_development_dependency 'mocha', '>= 0.9.5'
20
- end
21
- Jeweler::GemcutterTasks.new
22
- rescue LoadError
23
- puts "Jeweler not available. Install it with: sudo gem install jeweler -s http://gemcutter.org"
24
- end
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
25
3
 
26
4
  require 'rake/testtask'
27
5
  Rake::TestTask.new(:test) do |test|
28
- test.libs << 'lib' << 'test'
29
- test.pattern = 'test/{functional,unit}/**/*_test.rb'
30
- test.verbose = true
31
- end
32
-
33
- task :test => :check_dependencies
6
+ test.libs << 'lib' << 'test'
7
+ test.pattern = 'test/{functional,unit}/**/*_test.rb'
8
+ test.verbose = true
9
+ end
34
10
 
35
11
  task :default => :test
File without changes
File without changes
@@ -3,7 +3,8 @@ Capistrano::Configuration.instance(:must_exist).load do
3
3
  _cset(:whenever_roles) { :db }
4
4
  _cset(:whenever_command) { "whenever" }
5
5
  _cset(:whenever_identifier) { application }
6
- _cset(:whenever_update_flags) { "--update-crontab #{whenever_identifier}" }
6
+ _cset(:whenever_environment) { "production" }
7
+ _cset(:whenever_update_flags) { "--update-crontab #{whenever_identifier} --set environment=#{whenever_environment}" }
7
8
  _cset(:whenever_clear_flags) { "--clear-crontab #{whenever_identifier}" }
8
9
 
9
10
  # Disable cron jobs at the begining of a deploy.
@@ -39,6 +39,8 @@ module Whenever
39
39
  write_crontab(whenever_cron)
40
40
  else
41
41
  puts Whenever.cron(@options)
42
+ puts "[message] Above is your schedule file converted to cron syntax; your crontab file was not updated."
43
+ puts "[message] Run `whenever --help' for more options."
42
44
  exit(0)
43
45
  end
44
46
  end
@@ -87,10 +89,10 @@ module Whenever
87
89
 
88
90
  def updated_crontab
89
91
  # Check for unopened or unclosed identifier blocks
90
- if read_crontab =~ Regexp.new("^#{comment_open}$") && (read_crontab =~ Regexp.new("^#{comment_close}$")).nil?
92
+ if read_crontab =~ Regexp.new("^#{comment_open}$") && (read_crontab =~ Regexp.new("^#{comment_close}")).nil?
91
93
  warn "[fail] Unclosed indentifier; Your crontab file contains '#{comment_open}', but no '#{comment_close}'"
92
94
  exit(1)
93
- elsif (read_crontab =~ Regexp.new("^#{comment_open}$")).nil? && read_crontab =~ Regexp.new("^#{comment_close}$")
95
+ elsif (read_crontab =~ Regexp.new("^#{comment_open}$")).nil? && read_crontab =~ Regexp.new("^#{comment_close}")
94
96
  warn "[fail] Unopened indentifier; Your crontab file contains '#{comment_close}', but no '#{comment_open}'"
95
97
  exit(1)
96
98
  end
@@ -106,7 +108,11 @@ module Whenever
106
108
  end
107
109
 
108
110
  def prepare(contents)
109
- contents.split("\n")[@options[:cut]..-1].join("\n")
111
+ # Some cron implementations require all non-comment lines to be newline-terminated.
112
+ # Preserve any whitespace at the end of contents. (issue #95)
113
+ stripped_contents = contents.strip
114
+ tail = contents[stripped_contents.length..-1]
115
+ stripped_contents.split("\n")[@options[:cut]..-1].join("\n") + tail
110
116
  end
111
117
 
112
118
  def comment_base
@@ -34,6 +34,7 @@ module Whenever
34
34
 
35
35
  def time_in_cron_syntax
36
36
  case @time
37
+ when /^.+ .+ .+ .+ .+.?$/ then @time # raw cron sytax given
37
38
  when Symbol then parse_symbol
38
39
  when String then parse_as_string
39
40
  else parse_time
@@ -88,7 +88,7 @@ module Whenever
88
88
 
89
89
  output = []
90
90
  @env.each do |key, val|
91
- output << "#{key}=#{val}\n"
91
+ output << "#{key}=#{val.blank? ? '""' : val}\n"
92
92
  end
93
93
  output << "\n"
94
94
 
@@ -5,7 +5,7 @@ set :path, Whenever.path
5
5
 
6
6
  # All jobs are wrapped in this template.
7
7
  # http://blog.scoutapp.com/articles/2010/09/07/rvm-and-cron-in-production
8
- set :job_template, "/bin/bash -l -c ':job'"
8
+ set :job_template, "/bin/bash -i -l -c ':job'"
9
9
 
10
10
  job_type :command, ":task :output"
11
11
  job_type :rake, "cd :path && RAILS_ENV=:environment rake :task --silent :output"
@@ -1,3 +1,3 @@
1
1
  module Whenever
2
- VERSION = '0.6.2'
3
- end unless defined?(Whenever::VERSION)
2
+ VERSION = '0.6.6'
3
+ end
@@ -281,8 +281,7 @@ My whenever job that was already here
281
281
  # End Whenever generated tasks for: My identifier
282
282
  EXISTING_CRON
283
283
 
284
- # here-doc adds an extra newline we need removed
285
- assert_equal existing.strip, @command.send(:prepare, existing)
284
+ assert_equal existing, @command.send(:prepare, existing)
286
285
  end
287
286
 
288
287
  should "trim off the top lines of the file" do
@@ -302,8 +301,21 @@ My whenever job that was already here
302
301
  # End Whenever generated tasks for: My identifier
303
302
  NEW_CRON
304
303
 
305
- # here-doc adds an extra newline we need removed
306
- assert_equal new_cron.strip, @command.send(:prepare, existing)
304
+ assert_equal new_cron, @command.send(:prepare, existing)
305
+ end
306
+
307
+ should "preserve terminating newlines in files" do
308
+ @command = Whenever::CommandLine.new(:update => true, :identifier => 'My identifier')
309
+ existing = <<-EXISTING_CRON
310
+ # Begin Whenever generated tasks for: My identifier
311
+ My whenever job that was already here
312
+ # End Whenever generated tasks for: My identifier
313
+
314
+ # A non-Whenever task
315
+ My non-whenever job that was already here
316
+ EXISTING_CRON
317
+
318
+ assert_equal existing, @command.send(:prepare, existing)
307
319
  end
308
320
  end
309
321
 
@@ -248,4 +248,21 @@ class OutputAtTest < Test::Unit::TestCase
248
248
  assert_match '27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59 * * * * blahblah', @output
249
249
  end
250
250
  end
251
+
252
+ context "using raw cron syntax" do
253
+ setup do
254
+ @output = Whenever.cron \
255
+ <<-file
256
+ set :job_template, nil
257
+ every '0 0 27-31 * *' do
258
+ command "blahblah"
259
+ end
260
+ file
261
+ end
262
+
263
+ should "output the command using the same cron syntax" do
264
+ assert_match '0 0 27-31 * * blahblah', @output
265
+ end
266
+ end
267
+
251
268
  end
@@ -31,7 +31,7 @@ class OutputDefaultDefinedJobsTest < Test::Unit::TestCase
31
31
  end
32
32
 
33
33
  should "output the command with the default job template" do
34
- assert_match /^.+ .+ .+ .+ \/bin\/bash -l -c 'blahblah'$/, @output
34
+ assert_match /^.+ .+ .+ .+ \/bin\/bash -i -l -c 'blahblah'$/, @output
35
35
  end
36
36
  end
37
37
 
@@ -8,6 +8,8 @@ class OutputEnvTest < Test::Unit::TestCase
8
8
  <<-file
9
9
  env :MYVAR, 'blah'
10
10
  env 'MAILTO', "someone@example.com"
11
+ env :BLANKVAR, ''
12
+ env :NILVAR, nil
11
13
  file
12
14
  end
13
15
 
@@ -18,6 +20,14 @@ class OutputEnvTest < Test::Unit::TestCase
18
20
  should "output MAILTO environment variable" do
19
21
  assert_match "MAILTO=someone@example.com", @output
20
22
  end
23
+
24
+ should "output BLANKVAR environment variable" do
25
+ assert_match "BLANKVAR=\"\"", @output
26
+ end
27
+
28
+ should "output NILVAR environment variable" do
29
+ assert_match "NILVAR=\"\"", @output
30
+ end
21
31
  end
22
32
 
23
- end
33
+ end
@@ -199,6 +199,15 @@ class CronTest < Test::Unit::TestCase
199
199
  end
200
200
  end
201
201
  end
202
+
203
+ context "When given raw cron sytax" do
204
+ should "return the same cron sytax" do
205
+ crons = ['0 0 27-31 * *', '* * * * *', '2/3 1,9,22 11-26 1-6 *']
206
+ crons.each do |cron|
207
+ assert_equal cron, parse_time(cron)
208
+ end
209
+ end
210
+ end
202
211
 
203
212
  private
204
213
 
@@ -1,85 +1,22 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
1
  # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "whenever/version"
5
4
 
6
5
  Gem::Specification.new do |s|
7
- s.name = %q{whenever}
8
- s.version = "0.6.2"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Javan Makhmali"]
12
- s.date = %q{2010-10-26}
6
+ s.name = "whenever"
7
+ s.version = Whenever::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Javan Makhmali"]
10
+ s.email = ["javan@javan.us"]
11
+ s.homepage = ""
12
+ s.summary = %q{Cron jobs in ruby.}
13
13
  s.description = %q{Clean ruby syntax for writing and deploying cron jobs.}
14
- s.email = %q{javan@javan.us}
15
- s.executables = ["whenever", "wheneverize"]
16
- s.extra_rdoc_files = [
17
- "README.md"
18
- ]
19
- s.files = [
20
- ".gitignore",
21
- "CHANGELOG.md",
22
- "README.md",
23
- "Rakefile",
24
- "bin/whenever",
25
- "bin/wheneverize",
26
- "lib/whenever.rb",
27
- "lib/whenever/capistrano.rb",
28
- "lib/whenever/command_line.rb",
29
- "lib/whenever/cron.rb",
30
- "lib/whenever/job.rb",
31
- "lib/whenever/job_list.rb",
32
- "lib/whenever/output_redirection.rb",
33
- "lib/whenever/setup.rb",
34
- "lib/whenever/version.rb",
35
- "test/functional/command_line_test.rb",
36
- "test/functional/output_at_test.rb",
37
- "test/functional/output_default_defined_jobs_test.rb",
38
- "test/functional/output_defined_job_test.rb",
39
- "test/functional/output_env_test.rb",
40
- "test/functional/output_redirection_test.rb",
41
- "test/test_helper.rb",
42
- "test/unit/cron_test.rb",
43
- "test/unit/job_test.rb",
44
- "whenever.gemspec"
45
- ]
46
- s.homepage = %q{http://github.com/javan/whenever}
47
- s.rdoc_options = ["--charset=UTF-8"]
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- test/{functional,unit}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
48
17
  s.require_paths = ["lib"]
49
- s.rubygems_version = %q{1.3.7}
50
- s.summary = %q{Write your cron jobs in ruby.}
51
- s.test_files = [
52
- "test/functional/command_line_test.rb",
53
- "test/functional/output_at_test.rb",
54
- "test/functional/output_default_defined_jobs_test.rb",
55
- "test/functional/output_defined_job_test.rb",
56
- "test/functional/output_env_test.rb",
57
- "test/functional/output_redirection_test.rb",
58
- "test/test_helper.rb",
59
- "test/unit/cron_test.rb",
60
- "test/unit/job_test.rb"
61
- ]
62
-
63
- if s.respond_to? :specification_version then
64
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
65
- s.specification_version = 3
66
-
67
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
68
- s.add_runtime_dependency(%q<aaronh-chronic>, [">= 0.3.9"])
69
- s.add_runtime_dependency(%q<activesupport>, [">= 2.3.4"])
70
- s.add_development_dependency(%q<shoulda>, [">= 2.1.1"])
71
- s.add_development_dependency(%q<mocha>, [">= 0.9.5"])
72
- else
73
- s.add_dependency(%q<aaronh-chronic>, [">= 0.3.9"])
74
- s.add_dependency(%q<activesupport>, [">= 2.3.4"])
75
- s.add_dependency(%q<shoulda>, [">= 2.1.1"])
76
- s.add_dependency(%q<mocha>, [">= 0.9.5"])
77
- end
78
- else
79
- s.add_dependency(%q<aaronh-chronic>, [">= 0.3.9"])
80
- s.add_dependency(%q<activesupport>, [">= 2.3.4"])
81
- s.add_dependency(%q<shoulda>, [">= 2.1.1"])
82
- s.add_dependency(%q<mocha>, [">= 0.9.5"])
83
- end
18
+ s.add_runtime_dependency(%q<aaronh-chronic>, [">= 0.3.9"])
19
+ s.add_runtime_dependency(%q<activesupport>, [">= 2.3.4"])
20
+ s.add_development_dependency(%q<shoulda>, [">= 2.1.1"])
21
+ s.add_development_dependency(%q<mocha>, [">= 0.9.5"])
84
22
  end
85
-
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whenever
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
5
- prerelease: false
4
+ hash: 11
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 6
9
- - 2
10
- version: 0.6.2
9
+ - 6
10
+ version: 0.6.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Javan Makhmali
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-26 00:00:00 -04:00
18
+ date: 2011-03-08 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -83,17 +83,19 @@ dependencies:
83
83
  type: :development
84
84
  version_requirements: *id004
85
85
  description: Clean ruby syntax for writing and deploying cron jobs.
86
- email: javan@javan.us
86
+ email:
87
+ - javan@javan.us
87
88
  executables:
88
89
  - whenever
89
90
  - wheneverize
90
91
  extensions: []
91
92
 
92
- extra_rdoc_files:
93
- - README.md
93
+ extra_rdoc_files: []
94
+
94
95
  files:
95
96
  - .gitignore
96
97
  - CHANGELOG.md
98
+ - Gemfile
97
99
  - README.md
98
100
  - Rakefile
99
101
  - bin/whenever
@@ -118,12 +120,12 @@ files:
118
120
  - test/unit/job_test.rb
119
121
  - whenever.gemspec
120
122
  has_rdoc: true
121
- homepage: http://github.com/javan/whenever
123
+ homepage: ""
122
124
  licenses: []
123
125
 
124
126
  post_install_message:
125
- rdoc_options:
126
- - --charset=UTF-8
127
+ rdoc_options: []
128
+
127
129
  require_paths:
128
130
  - lib
129
131
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -147,10 +149,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
149
  requirements: []
148
150
 
149
151
  rubyforge_project:
150
- rubygems_version: 1.3.7
152
+ rubygems_version: 1.6.0
151
153
  signing_key:
152
154
  specification_version: 3
153
- summary: Write your cron jobs in ruby.
155
+ summary: Cron jobs in ruby.
154
156
  test_files:
155
157
  - test/functional/command_line_test.rb
156
158
  - test/functional/output_at_test.rb
@@ -158,6 +160,5 @@ test_files:
158
160
  - test/functional/output_defined_job_test.rb
159
161
  - test/functional/output_env_test.rb
160
162
  - test/functional/output_redirection_test.rb
161
- - test/test_helper.rb
162
163
  - test/unit/cron_test.rb
163
164
  - test/unit/job_test.rb