whenever 0.5.2 → 0.5.3

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.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,10 @@
1
+ == 0.5.3 / September 24th, 2010
2
+
3
+ * Better regexes for replacing Whenever blocks in the crontab. #45 [Javan Makhmali]
4
+
5
+ * Preserving backslashes when updating existing crontab. #82 [Javan Makhmali]
6
+
7
+
1
8
  == 0.5.2 / September 15th, 2010
2
9
 
3
10
  * Quotes automatically escaped in jobs. [Jay Adkisson]
@@ -85,25 +85,26 @@ module Whenever
85
85
  end
86
86
  end
87
87
 
88
- def updated_crontab
88
+ def updated_crontab
89
89
  # Check for unopened or unclosed identifier blocks
90
- if read_crontab.index(comment_open) && !read_crontab.index(comment_close)
90
+ if read_crontab =~ Regexp.new("^#{comment_open}$") && (read_crontab =~ Regexp.new("^#{comment_close}$")).nil?
91
91
  warn "[fail] Unclosed indentifier; Your crontab file contains '#{comment_open}', but no '#{comment_close}'"
92
92
  exit(1)
93
- elsif !read_crontab.index(comment_open) && read_crontab.index(comment_close)
93
+ elsif (read_crontab =~ Regexp.new("^#{comment_open}$")).nil? && read_crontab =~ Regexp.new("^#{comment_close}$")
94
94
  warn "[fail] Unopened indentifier; Your crontab file contains '#{comment_close}', but no '#{comment_open}'"
95
95
  exit(1)
96
96
  end
97
97
 
98
98
  # If an existing identier block is found, replace it with the new cron entries
99
- if read_crontab.index(comment_open) && read_crontab.index(comment_close)
100
- read_crontab.gsub(Regexp.new("#{comment_open}.+#{comment_close}", Regexp::MULTILINE), whenever_cron.chomp)
99
+ if read_crontab =~ Regexp.new("^#{comment_open}$") && read_crontab =~ Regexp.new("^#{comment_close}$")
100
+ # If the existing crontab file contains backslashes they get lost going through gsub.
101
+ # .gsub('\\', '\\\\\\') preserves them. Go figure.
102
+ read_crontab.gsub(Regexp.new("^#{comment_open}$.+^#{comment_close}$", Regexp::MULTILINE), whenever_cron.chomp.gsub('\\', '\\\\\\'))
101
103
  else # Otherwise, append the new cron entries after any existing ones
102
104
  [read_crontab, whenever_cron].join("\n\n")
103
105
  end
104
106
  end
105
107
 
106
- #
107
108
  def prepare(contents)
108
109
  contents.split("\n")[@options[:cut]..-1].join("\n")
109
110
  end
@@ -1,3 +1,3 @@
1
1
  module Whenever
2
- VERSION = '0.5.2'
2
+ VERSION = '0.5.3'
3
3
  end unless defined?(Whenever::VERSION)
@@ -65,8 +65,6 @@ This shouldn't get replaced
65
65
  # End Whenever generated tasks for: Other identifier
66
66
  EXISTING_CRON
67
67
 
68
- @command.expects(:read_crontab).at_least_once.returns(existing)
69
-
70
68
  new_cron = <<-NEW_CRON
71
69
  # Something
72
70
 
@@ -79,12 +77,52 @@ This shouldn't get replaced
79
77
  # End Whenever generated tasks for: Other identifier
80
78
  NEW_CRON
81
79
 
80
+ @command.expects(:read_crontab).at_least_once.returns(existing)
82
81
  assert_equal new_cron, @command.send(:updated_crontab)
83
82
 
84
83
  @command.expects(:write_crontab).with(new_cron).returns(true)
85
84
  assert @command.run
86
85
  end
87
86
  end
87
+
88
+ context "A command line update that contains backslashes" do
89
+ setup do
90
+ @existing = <<-EXISTING_CRON
91
+ # Begin Whenever generated tasks for: My identifier
92
+ script/runner -e production 'puts '\\''hello'\\'''
93
+ # End Whenever generated tasks for: My identifier
94
+ EXISTING_CRON
95
+ File.expects(:exists?).with('config/schedule.rb').returns(true)
96
+ @command = Whenever::CommandLine.new(:update => true, :identifier => 'My identifier')
97
+ @command.expects(:read_crontab).at_least_once.returns(@existing)
98
+ @command.expects(:whenever_cron).returns(@existing)
99
+ end
100
+
101
+ should "replace the existing block with the backslashes in tact" do
102
+ assert_equal @existing, @command.send(:updated_crontab)
103
+ end
104
+ end
105
+
106
+ context "A command line update with an identifier similar to an existing one in the crontab already" do
107
+ setup do
108
+ @existing = <<-EXISTING_CRON
109
+ # Begin Whenever generated tasks for: WheneverExisting
110
+ # End Whenever generated tasks for: WheneverExisting
111
+ EXISTING_CRON
112
+ @new = <<-NEW_CRON
113
+ # Begin Whenever generated tasks for: Whenever
114
+ # End Whenever generated tasks for: Whenever
115
+ NEW_CRON
116
+ File.expects(:exists?).with('config/schedule.rb').returns(true)
117
+ @command = Whenever::CommandLine.new(:update => true, :identifier => 'Whenever')
118
+ @command.expects(:read_crontab).at_least_once.returns(@existing)
119
+ @command.expects(:whenever_cron).returns(@new)
120
+ end
121
+
122
+ should "append the similarly named command" do
123
+ assert_equal @existing + "\n\n" + @new, @command.send(:updated_crontab)
124
+ end
125
+ end
88
126
 
89
127
  context "A command line delete" do
90
128
  setup do
data/whenever.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{whenever}
8
- s.version = "0.5.2"
8
+ s.version = "0.5.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Javan Makhmali"]
12
- s.date = %q{2010-09-15}
12
+ s.date = %q{2010-09-24}
13
13
  s.description = %q{Clean ruby syntax for defining and deploying messy cron jobs.}
14
14
  s.email = %q{javan@javan.us}
15
15
  s.executables = ["whenever", "wheneverize"]
@@ -46,7 +46,7 @@ Gem::Specification.new do |s|
46
46
  s.homepage = %q{http://github.com/javan/whenever}
47
47
  s.rdoc_options = ["--charset=UTF-8"]
48
48
  s.require_paths = ["lib"]
49
- s.rubygems_version = %q{1.3.6}
49
+ s.rubygems_version = %q{1.3.7}
50
50
  s.summary = %q{Clean ruby syntax for defining and deploying messy cron jobs.}
51
51
  s.test_files = [
52
52
  "test/functional/command_line_test.rb",
@@ -64,7 +64,7 @@ Gem::Specification.new do |s|
64
64
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
65
65
  s.specification_version = 3
66
66
 
67
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
67
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
68
68
  s.add_runtime_dependency(%q<aaronh-chronic>, [">= 0.3.9"])
69
69
  s.add_runtime_dependency(%q<activesupport>, [">= 2.3.4"])
70
70
  s.add_development_dependency(%q<shoulda>, [">= 2.1.1"])
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whenever
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 13
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 5
8
- - 2
9
- version: 0.5.2
9
+ - 3
10
+ version: 0.5.3
10
11
  platform: ruby
11
12
  authors:
12
13
  - Javan Makhmali
@@ -14,16 +15,18 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-09-15 00:00:00 -04:00
18
+ date: 2010-09-24 00:00:00 -04:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: aaronh-chronic
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 1
27
30
  segments:
28
31
  - 0
29
32
  - 3
@@ -35,9 +38,11 @@ dependencies:
35
38
  name: activesupport
36
39
  prerelease: false
37
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
38
42
  requirements:
39
43
  - - ">="
40
44
  - !ruby/object:Gem::Version
45
+ hash: 11
41
46
  segments:
42
47
  - 2
43
48
  - 3
@@ -49,9 +54,11 @@ dependencies:
49
54
  name: shoulda
50
55
  prerelease: false
51
56
  requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
52
58
  requirements:
53
59
  - - ">="
54
60
  - !ruby/object:Gem::Version
61
+ hash: 9
55
62
  segments:
56
63
  - 2
57
64
  - 1
@@ -63,9 +70,11 @@ dependencies:
63
70
  name: mocha
64
71
  prerelease: false
65
72
  requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
66
74
  requirements:
67
75
  - - ">="
68
76
  - !ruby/object:Gem::Version
77
+ hash: 49
69
78
  segments:
70
79
  - 0
71
80
  - 9
@@ -118,23 +127,27 @@ rdoc_options:
118
127
  require_paths:
119
128
  - lib
120
129
  required_ruby_version: !ruby/object:Gem::Requirement
130
+ none: false
121
131
  requirements:
122
132
  - - ">="
123
133
  - !ruby/object:Gem::Version
134
+ hash: 3
124
135
  segments:
125
136
  - 0
126
137
  version: "0"
127
138
  required_rubygems_version: !ruby/object:Gem::Requirement
139
+ none: false
128
140
  requirements:
129
141
  - - ">="
130
142
  - !ruby/object:Gem::Version
143
+ hash: 3
131
144
  segments:
132
145
  - 0
133
146
  version: "0"
134
147
  requirements: []
135
148
 
136
149
  rubyforge_project:
137
- rubygems_version: 1.3.6
150
+ rubygems_version: 1.3.7
138
151
  signing_key:
139
152
  specification_version: 3
140
153
  summary: Clean ruby syntax for defining and deploying messy cron jobs.