clockwork 0.7.5 → 0.7.7

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.
@@ -3,7 +3,7 @@ rvm:
3
3
  - 2.0.0
4
4
  - 2.1.0
5
5
  - jruby-19mode
6
- - rbx
6
+ - # rbx-2.2.7
7
7
  gemfile:
8
8
  - gemfiles/activesupport3.gemfile
9
9
  - gemfiles/activesupport4.gemfile
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "clockwork"
3
- s.version = "0.7.5"
3
+ s.version = "0.7.7"
4
4
 
5
5
  s.authors = ["Adam Wiggins", "tomykaira"]
6
6
  s.license = 'MIT'
@@ -24,5 +24,6 @@ Gem::Specification.new do |s|
24
24
  s.add_development_dependency "rake"
25
25
  s.add_development_dependency "daemons"
26
26
  s.add_development_dependency "contest"
27
+ s.add_development_dependency "minitest", "~> 4.0"
27
28
  s.add_development_dependency "mocha"
28
29
  end
@@ -12,7 +12,7 @@ module Clockwork
12
12
  def self.parse(at)
13
13
  return unless at
14
14
  case at
15
- when /^([[:alpha:]]+)\s(.*)$/
15
+ when /\A([[:alpha:]]+)\s(.*)\z/
16
16
  if wday = WDAYS[$1]
17
17
  parsed_time = parse($2)
18
18
  parsed_time.wday = wday
@@ -20,11 +20,11 @@ module Clockwork
20
20
  else
21
21
  raise FailedToParse, at
22
22
  end
23
- when /^(\d{1,2}):(\d\d)$/
23
+ when /\A(\d{1,2}):(\d\d)\z/
24
24
  new($2.to_i, $1.to_i)
25
- when /^\*{1,2}:(\d\d)$/
25
+ when /\A\*{1,2}:(\d\d)\z/
26
26
  new($1.to_i)
27
- when /^(\d{1,2}):\*\*$/
27
+ when /\A(\d{1,2}):\*\*\z/
28
28
  new(NOT_SPECIFIED, $1.to_i)
29
29
  else
30
30
  raise FailedToParse, at
@@ -33,7 +33,10 @@ module Clockwork
33
33
  @last = convert_timezone(t)
34
34
  if thread?
35
35
  if @manager.thread_available?
36
- Thread.new { execute }
36
+ t = Thread.new do
37
+ execute
38
+ end
39
+ t['creator'] = @manager
37
40
  else
38
41
  @manager.log_error "Threads exhausted; skipping #{self}"
39
42
  end
@@ -12,7 +12,7 @@ module Clockwork
12
12
  end
13
13
 
14
14
  def thread_available?
15
- Thread.list.count < config[:max_threads]
15
+ Thread.list.select { |t| t['creator'] == self }.count < config[:max_threads]
16
16
  end
17
17
 
18
18
  def configure
@@ -97,7 +97,7 @@ module Clockwork
97
97
  end
98
98
 
99
99
  def array_of_ats_for(task, opts={})
100
- if task.at.nil?
100
+ if task.at.to_s.empty?
101
101
  opts[:nil_if_empty] ? nil : []
102
102
  else
103
103
  task.at.split(',').map(&:strip)
@@ -90,4 +90,29 @@ class AtTest < Test::Unit::TestCase
90
90
  Clockwork::At.parse('32:00')
91
91
  end
92
92
  end
93
+
94
+ test 'invalid multi-line with Sat 12:00' do
95
+ assert_raise Clockwork::At::FailedToParse do
96
+ Clockwork::At.parse("sat 12:00\nreally invalid time")
97
+ end
98
+ end
99
+
100
+ test 'invalid multi-line with 8:30' do
101
+ assert_raise Clockwork::At::FailedToParse do
102
+ Clockwork::At.parse("8:30\nreally invalid time")
103
+ end
104
+ end
105
+
106
+ test 'invalid multi-line with *:10' do
107
+ assert_raise Clockwork::At::FailedToParse do
108
+ Clockwork::At.parse("*:10\nreally invalid time")
109
+ end
110
+ end
111
+
112
+ test 'invalid multi-line with 12:**' do
113
+ assert_raise Clockwork::At::FailedToParse do
114
+ Clockwork::At.parse("12:**\nreally invalid time")
115
+ end
116
+ end
117
+
93
118
  end
@@ -247,17 +247,38 @@ class ManagerTest < Test::Unit::TestCase
247
247
  end
248
248
  end
249
249
 
250
- test "should warn about missing jobs upon exhausting threads" do
251
- logger = Logger.new(StringIO.new)
252
- @manager.configure do |config|
253
- config[:max_threads] = 0
254
- config[:logger] = logger
250
+ describe "max_threads" do
251
+ test "should warn when an event tries to generate threads more than max_threads" do
252
+ logger = Logger.new(STDOUT)
253
+ @manager.configure do |config|
254
+ config[:max_threads] = 1
255
+ config[:logger] = logger
256
+ end
257
+
258
+ @manager.every(1.minute, 'myjob1', :thread => true) { sleep 2 }
259
+ @manager.every(1.minute, 'myjob2', :thread => true) { sleep 2 }
260
+ logger.expects(:error).with("Threads exhausted; skipping myjob2")
261
+
262
+ @manager.tick(Time.now)
255
263
  end
256
264
 
257
- @manager.every(1.minute, 'myjob', :thread => true)
258
- logger.expects(:error).with("Threads exhausted; skipping myjob")
265
+ test "should not warn when thread is managed by others" do
266
+ begin
267
+ t = Thread.new { sleep 5 }
268
+ logger = Logger.new(StringIO.new)
269
+ @manager.configure do |config|
270
+ config[:max_threads] = 1
271
+ config[:logger] = logger
272
+ end
259
273
 
260
- @manager.tick(Time.now)
274
+ @manager.every(1.minute, 'myjob', :thread => true)
275
+ logger.expects(:error).never
276
+
277
+ @manager.tick(Time.now)
278
+ ensure
279
+ t.kill
280
+ end
281
+ end
261
282
  end
262
283
 
263
284
  describe "callbacks" do
@@ -259,5 +259,34 @@ class ManagerWithDatabaseTasksTest < Test::Unit::TestCase
259
259
  assert_equal 1, @tasks_run.length
260
260
  end
261
261
  end
262
+
263
+ context "with task with :at as empty string" do
264
+ setup do
265
+ @task_with_empty_string_at = stub(:frequency => 10, :name => 'ScheduledTask:1', :at => '', :id => 1)
266
+ ScheduledTask.stubs(:all).returns([@task_with_empty_string_at])
267
+
268
+ @tasks_run = []
269
+
270
+ @manager.sync_database_tasks(model: ScheduledTask, every: 1.minute) do |job_name|
271
+ @tasks_run << job_name
272
+ end
273
+ end
274
+
275
+ def test_it_does_not_raise_an_error
276
+ begin
277
+ tick_at(Time.now, :and_every_second_for => 10.seconds)
278
+ rescue => e
279
+ assert false, "Raised an error: #{e.message}"
280
+ end
281
+ end
282
+
283
+ def test_it_runs_the_task
284
+ begin
285
+ tick_at(Time.now, :and_every_second_for => 10.seconds)
286
+ rescue => e
287
+ end
288
+ assert_equal 1, @tasks_run.length
289
+ end
290
+ end
262
291
  end
263
292
  end
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clockwork
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.5
4
+ version: 0.7.7
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Adam Wiggins
@@ -9,104 +10,134 @@ authors:
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2014-04-20 00:00:00.000000000 Z
13
+ date: 2014-07-05 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: tzinfo
16
17
  requirement: !ruby/object:Gem::Requirement
18
+ none: false
17
19
  requirements:
18
- - - ">="
20
+ - - ! '>='
19
21
  - !ruby/object:Gem::Version
20
22
  version: '0'
21
23
  type: :runtime
22
24
  prerelease: false
23
25
  version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
24
27
  requirements:
25
- - - ">="
28
+ - - ! '>='
26
29
  - !ruby/object:Gem::Version
27
30
  version: '0'
28
31
  - !ruby/object:Gem::Dependency
29
32
  name: activesupport
30
33
  requirement: !ruby/object:Gem::Requirement
34
+ none: false
31
35
  requirements:
32
- - - ">="
36
+ - - ! '>='
33
37
  - !ruby/object:Gem::Version
34
38
  version: '0'
35
39
  type: :runtime
36
40
  prerelease: false
37
41
  version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
38
43
  requirements:
39
- - - ">="
44
+ - - ! '>='
40
45
  - !ruby/object:Gem::Version
41
46
  version: '0'
42
47
  - !ruby/object:Gem::Dependency
43
48
  name: bundler
44
49
  requirement: !ruby/object:Gem::Requirement
50
+ none: false
45
51
  requirements:
46
- - - "~>"
52
+ - - ~>
47
53
  - !ruby/object:Gem::Version
48
54
  version: '1.3'
49
55
  type: :development
50
56
  prerelease: false
51
57
  version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
52
59
  requirements:
53
- - - "~>"
60
+ - - ~>
54
61
  - !ruby/object:Gem::Version
55
62
  version: '1.3'
56
63
  - !ruby/object:Gem::Dependency
57
64
  name: rake
58
65
  requirement: !ruby/object:Gem::Requirement
66
+ none: false
59
67
  requirements:
60
- - - ">="
68
+ - - ! '>='
61
69
  - !ruby/object:Gem::Version
62
70
  version: '0'
63
71
  type: :development
64
72
  prerelease: false
65
73
  version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
66
75
  requirements:
67
- - - ">="
76
+ - - ! '>='
68
77
  - !ruby/object:Gem::Version
69
78
  version: '0'
70
79
  - !ruby/object:Gem::Dependency
71
80
  name: daemons
72
81
  requirement: !ruby/object:Gem::Requirement
82
+ none: false
73
83
  requirements:
74
- - - ">="
84
+ - - ! '>='
75
85
  - !ruby/object:Gem::Version
76
86
  version: '0'
77
87
  type: :development
78
88
  prerelease: false
79
89
  version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
80
91
  requirements:
81
- - - ">="
92
+ - - ! '>='
82
93
  - !ruby/object:Gem::Version
83
94
  version: '0'
84
95
  - !ruby/object:Gem::Dependency
85
96
  name: contest
86
97
  requirement: !ruby/object:Gem::Requirement
98
+ none: false
87
99
  requirements:
88
- - - ">="
100
+ - - ! '>='
89
101
  - !ruby/object:Gem::Version
90
102
  version: '0'
91
103
  type: :development
92
104
  prerelease: false
93
105
  version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
94
107
  requirements:
95
- - - ">="
108
+ - - ! '>='
96
109
  - !ruby/object:Gem::Version
97
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: minitest
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ~>
117
+ - !ruby/object:Gem::Version
118
+ version: '4.0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ version: '4.0'
98
127
  - !ruby/object:Gem::Dependency
99
128
  name: mocha
100
129
  requirement: !ruby/object:Gem::Requirement
130
+ none: false
101
131
  requirements:
102
- - - ">="
132
+ - - ! '>='
103
133
  - !ruby/object:Gem::Version
104
134
  version: '0'
105
135
  type: :development
106
136
  prerelease: false
107
137
  version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
108
139
  requirements:
109
- - - ">="
140
+ - - ! '>='
110
141
  - !ruby/object:Gem::Version
111
142
  version: '0'
112
143
  description: A scheduler process to replace cron, using a more flexible Ruby syntax
@@ -121,8 +152,8 @@ extensions: []
121
152
  extra_rdoc_files:
122
153
  - README.md
123
154
  files:
124
- - ".gitignore"
125
- - ".travis.yml"
155
+ - .gitignore
156
+ - .travis.yml
126
157
  - Gemfile
127
158
  - README.md
128
159
  - Rakefile
@@ -145,26 +176,33 @@ files:
145
176
  homepage: http://github.com/tomykaira/clockwork
146
177
  licenses:
147
178
  - MIT
148
- metadata: {}
149
179
  post_install_message:
150
180
  rdoc_options: []
151
181
  require_paths:
152
182
  - lib
153
183
  required_ruby_version: !ruby/object:Gem::Requirement
184
+ none: false
154
185
  requirements:
155
- - - ">="
186
+ - - ! '>='
156
187
  - !ruby/object:Gem::Version
157
188
  version: '0'
189
+ segments:
190
+ - 0
191
+ hash: -1006563675732551945
158
192
  required_rubygems_version: !ruby/object:Gem::Requirement
193
+ none: false
159
194
  requirements:
160
- - - ">="
195
+ - - ! '>='
161
196
  - !ruby/object:Gem::Version
162
197
  version: '0'
198
+ segments:
199
+ - 0
200
+ hash: -1006563675732551945
163
201
  requirements: []
164
202
  rubyforge_project:
165
- rubygems_version: 2.2.0
203
+ rubygems_version: 1.8.23
166
204
  signing_key:
167
- specification_version: 4
205
+ specification_version: 3
168
206
  summary: A scheduler process to replace cron.
169
207
  test_files:
170
208
  - test/at_test.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: fe114a0ae00c9b51086eed10fa3f2cf24cbbbda8
4
- data.tar.gz: bf37628fb300af8eee5a21e64ceaf54c625c6e41
5
- SHA512:
6
- metadata.gz: 86fe430ba1581ae9fad955fc603ca72cd534cf79992fb6c7835da5a32de45065e3c1412fb748d0bae6c5fb208b4c660661ca06357a54ffa071377b5327e5bc25
7
- data.tar.gz: b19a6327cc02f83a875cfcb0465eb9e0fb050741007817ec5c7085a1a00a3c184f010bd7beba8bd25188e3d1e0e225c63901af28c90319bc37e2236f2794f049