rufus-scheduler 3.0.0 → 3.0.9
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.txt +63 -0
- data/CREDITS.txt +16 -0
- data/LICENSE.txt +1 -1
- data/README.md +389 -7
- data/Rakefile +0 -1
- data/TODO.txt +4 -0
- data/lib/rufus/scheduler/cronline.rb +109 -28
- data/lib/rufus/scheduler/job_array.rb +8 -1
- data/lib/rufus/scheduler/jobs.rb +127 -43
- data/lib/rufus/scheduler/locks.rb +95 -0
- data/lib/rufus/scheduler/util.rb +39 -28
- data/lib/rufus/scheduler.rb +150 -46
- data/rufus-scheduler.gemspec +2 -1
- data/spec/basics_spec.rb +54 -0
- data/spec/cronline_spec.rb +349 -92
- data/spec/error_spec.rb +30 -7
- data/spec/job_array_spec.rb +2 -2
- data/spec/job_at_spec.rb +4 -4
- data/spec/job_cron_spec.rb +42 -3
- data/spec/job_every_spec.rb +24 -5
- data/spec/job_interval_spec.rb +5 -5
- data/spec/job_repeat_spec.rb +86 -38
- data/spec/job_spec.rb +172 -55
- data/spec/lock_custom_spec.rb +47 -0
- data/spec/lock_flock_spec.rb +47 -0
- data/spec/{lockfile_spec.rb → lock_lockfile_spec.rb} +5 -5
- data/spec/lock_spec.rb +59 -0
- data/spec/parse_spec.rb +138 -76
- data/spec/schedule_at_spec.rb +46 -17
- data/spec/schedule_cron_spec.rb +6 -6
- data/spec/schedule_every_spec.rb +12 -12
- data/spec/schedule_in_spec.rb +8 -8
- data/spec/schedule_interval_spec.rb +13 -13
- data/spec/scheduler_spec.rb +213 -119
- data/spec/spec_helper.rb +62 -1
- data/spec/threads_spec.rb +24 -3
- metadata +58 -37
data/spec/spec_helper.rb
CHANGED
|
@@ -5,12 +5,26 @@
|
|
|
5
5
|
# Wed Apr 17 06:00:59 JST 2013
|
|
6
6
|
#
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
puts "RUBY_VERSION: #{RUBY_VERSION}"
|
|
9
|
+
puts "RUBY_PLATFORM: #{RUBY_PLATFORM}"
|
|
9
10
|
|
|
11
|
+
Thread.abort_on_exception = true
|
|
10
12
|
|
|
11
13
|
require 'stringio'
|
|
12
14
|
require 'rufus-scheduler'
|
|
13
15
|
|
|
16
|
+
#
|
|
17
|
+
# misc helper methods
|
|
18
|
+
|
|
19
|
+
def ruby18?
|
|
20
|
+
|
|
21
|
+
!! RUBY_VERSION.match(/^1\.8\./)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def jruby?
|
|
25
|
+
|
|
26
|
+
!! RUBY_PLATFORM.match(/java/)
|
|
27
|
+
end
|
|
14
28
|
|
|
15
29
|
def local(*args)
|
|
16
30
|
|
|
@@ -23,6 +37,16 @@ def utc(*args)
|
|
|
23
37
|
Time.utc(*args)
|
|
24
38
|
end
|
|
25
39
|
|
|
40
|
+
def ltz(tz, *args)
|
|
41
|
+
|
|
42
|
+
in_zone(tz) { Time.local(*args) }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def ltu(tz, *args)
|
|
46
|
+
|
|
47
|
+
in_zone(tz) { Time.local(*args) }.getutc
|
|
48
|
+
end
|
|
49
|
+
|
|
26
50
|
def sleep_until_next_minute
|
|
27
51
|
|
|
28
52
|
min = Time.now.min
|
|
@@ -35,6 +59,40 @@ def sleep_until_next_second
|
|
|
35
59
|
while Time.now.sec == sec; sleep 0.2; end
|
|
36
60
|
end
|
|
37
61
|
|
|
62
|
+
def in_zone(zone_name, &block)
|
|
63
|
+
|
|
64
|
+
prev_tz = ENV['TZ']
|
|
65
|
+
ENV['TZ'] = zone_name
|
|
66
|
+
|
|
67
|
+
block.call
|
|
68
|
+
|
|
69
|
+
ensure
|
|
70
|
+
|
|
71
|
+
ENV['TZ'] = prev_tz
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def with_chronic(&block)
|
|
75
|
+
|
|
76
|
+
require 'chronic'
|
|
77
|
+
|
|
78
|
+
Object.const_set(:Khronic, Chronic) unless defined?(Khronic)
|
|
79
|
+
Object.const_set(:Chronic, Khronic) unless defined?(Chronic)
|
|
80
|
+
|
|
81
|
+
block.call
|
|
82
|
+
|
|
83
|
+
ensure
|
|
84
|
+
|
|
85
|
+
Object.send(:remove_const, :Chronic)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def without_chronic(&block) # for quick counter-tests ;-)
|
|
89
|
+
|
|
90
|
+
block.call
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
#
|
|
95
|
+
# matchers
|
|
38
96
|
|
|
39
97
|
#require 'rspec/expectations'
|
|
40
98
|
|
|
@@ -60,6 +118,9 @@ RSpec::Matchers.define :be_within_1s_of do |expected|
|
|
|
60
118
|
end
|
|
61
119
|
|
|
62
120
|
|
|
121
|
+
#
|
|
122
|
+
# configure
|
|
123
|
+
|
|
63
124
|
#RSpec.configure do |config|
|
|
64
125
|
#end
|
|
65
126
|
|
data/spec/threads_spec.rb
CHANGED
|
@@ -21,7 +21,7 @@ describe Rufus::Scheduler do
|
|
|
21
21
|
|
|
22
22
|
it 'starts with an empty thread pool' do
|
|
23
23
|
|
|
24
|
-
@scheduler.work_threads.size.
|
|
24
|
+
expect(@scheduler.work_threads.size).to eq(0)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
it 'does not cross the max_work_threads threshold' do
|
|
@@ -42,7 +42,28 @@ describe Rufus::Scheduler do
|
|
|
42
42
|
# p t[:rufus_scheduler_job].class
|
|
43
43
|
#end
|
|
44
44
|
|
|
45
|
-
@scheduler.work_threads.size.
|
|
45
|
+
expect(@scheduler.work_threads.size).to eq(5)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'does not cross the max_work_threads threshold (overlap: false)' do
|
|
49
|
+
|
|
50
|
+
#@scheduler.min_work_threads = 2
|
|
51
|
+
@scheduler.max_work_threads = 5
|
|
52
|
+
|
|
53
|
+
10.times do
|
|
54
|
+
@scheduler.in '0s', :overlap => false do
|
|
55
|
+
sleep 5
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
sleep 0.5
|
|
60
|
+
|
|
61
|
+
#@scheduler.job_threads.each do |t|
|
|
62
|
+
# p t.keys
|
|
63
|
+
# p t[:rufus_scheduler_job].class
|
|
64
|
+
#end
|
|
65
|
+
|
|
66
|
+
expect(@scheduler.work_threads.size).to eq(5)
|
|
46
67
|
end
|
|
47
68
|
|
|
48
69
|
it 'does not execute unscheduled jobs' do
|
|
@@ -68,7 +89,7 @@ describe Rufus::Scheduler do
|
|
|
68
89
|
|
|
69
90
|
sleep(2)
|
|
70
91
|
|
|
71
|
-
counter.
|
|
92
|
+
expect(counter).to eq(1)
|
|
72
93
|
end
|
|
73
94
|
end
|
|
74
95
|
end
|
metadata
CHANGED
|
@@ -1,64 +1,80 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rufus-scheduler
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
version: 3.0.9
|
|
5
|
+
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- John Mettraux
|
|
9
|
-
autorequire:
|
|
9
|
+
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2014-08-29 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: tzinfo
|
|
16
|
-
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
17
18
|
requirements:
|
|
18
|
-
- - '>='
|
|
19
|
+
- - ! '>='
|
|
19
20
|
- !ruby/object:Gem::Version
|
|
20
21
|
version: '0'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
21
25
|
none: false
|
|
22
|
-
requirement: !ruby/object:Gem::Requirement
|
|
23
26
|
requirements:
|
|
24
|
-
- - '>='
|
|
27
|
+
- - ! '>='
|
|
25
28
|
- !ruby/object:Gem::Version
|
|
26
29
|
version: '0'
|
|
27
|
-
none: false
|
|
28
|
-
prerelease: false
|
|
29
|
-
type: :runtime
|
|
30
30
|
- !ruby/object:Gem::Dependency
|
|
31
31
|
name: rake
|
|
32
|
-
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
none: false
|
|
33
34
|
requirements:
|
|
34
|
-
- - '>='
|
|
35
|
+
- - ! '>='
|
|
35
36
|
- !ruby/object:Gem::Version
|
|
36
37
|
version: '0'
|
|
38
|
+
type: :development
|
|
39
|
+
prerelease: false
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
41
|
none: false
|
|
38
|
-
requirement: !ruby/object:Gem::Requirement
|
|
39
42
|
requirements:
|
|
40
|
-
- - '>='
|
|
43
|
+
- - ! '>='
|
|
41
44
|
- !ruby/object:Gem::Version
|
|
42
45
|
version: '0'
|
|
43
|
-
none: false
|
|
44
|
-
prerelease: false
|
|
45
|
-
type: :development
|
|
46
46
|
- !ruby/object:Gem::Dependency
|
|
47
47
|
name: rspec
|
|
48
|
-
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
none: false
|
|
49
50
|
requirements:
|
|
50
|
-
- - '>='
|
|
51
|
+
- - ! '>='
|
|
51
52
|
- !ruby/object:Gem::Version
|
|
52
53
|
version: 2.13.0
|
|
54
|
+
type: :development
|
|
55
|
+
prerelease: false
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
53
57
|
none: false
|
|
54
|
-
requirement: !ruby/object:Gem::Requirement
|
|
55
58
|
requirements:
|
|
56
|
-
- - '>='
|
|
59
|
+
- - ! '>='
|
|
57
60
|
- !ruby/object:Gem::Version
|
|
58
61
|
version: 2.13.0
|
|
62
|
+
- !ruby/object:Gem::Dependency
|
|
63
|
+
name: chronic
|
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
|
59
65
|
none: false
|
|
60
|
-
|
|
66
|
+
requirements:
|
|
67
|
+
- - ! '>='
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: '0'
|
|
61
70
|
type: :development
|
|
71
|
+
prerelease: false
|
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
+
none: false
|
|
74
|
+
requirements:
|
|
75
|
+
- - ! '>='
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: '0'
|
|
62
78
|
description: job scheduler for Ruby (at, cron, in and every jobs).
|
|
63
79
|
email:
|
|
64
80
|
- jmettraux@gmail.com
|
|
@@ -69,6 +85,7 @@ files:
|
|
|
69
85
|
- Rakefile
|
|
70
86
|
- lib/rufus-scheduler.rb
|
|
71
87
|
- lib/rufus/scheduler.rb
|
|
88
|
+
- lib/rufus/scheduler/locks.rb
|
|
72
89
|
- lib/rufus/scheduler/cronline.rb
|
|
73
90
|
- lib/rufus/scheduler/util.rb
|
|
74
91
|
- lib/rufus/scheduler/jobs.rb
|
|
@@ -81,18 +98,22 @@ files:
|
|
|
81
98
|
- spec/job_at_spec.rb
|
|
82
99
|
- spec/schedule_at_spec.rb
|
|
83
100
|
- spec/error_spec.rb
|
|
101
|
+
- spec/lock_spec.rb
|
|
84
102
|
- spec/schedule_cron_spec.rb
|
|
85
103
|
- spec/job_interval_spec.rb
|
|
86
104
|
- spec/job_repeat_spec.rb
|
|
87
|
-
- spec/lockfile_spec.rb
|
|
88
105
|
- spec/schedule_every_spec.rb
|
|
89
106
|
- spec/threads_spec.rb
|
|
90
107
|
- spec/cronline_spec.rb
|
|
108
|
+
- spec/lock_lockfile_spec.rb
|
|
91
109
|
- spec/job_in_spec.rb
|
|
92
110
|
- spec/parse_spec.rb
|
|
93
111
|
- spec/scheduler_spec.rb
|
|
112
|
+
- spec/lock_custom_spec.rb
|
|
113
|
+
- spec/basics_spec.rb
|
|
94
114
|
- spec/job_cron_spec.rb
|
|
95
115
|
- spec/job_every_spec.rb
|
|
116
|
+
- spec/lock_flock_spec.rb
|
|
96
117
|
- rufus-scheduler.gemspec
|
|
97
118
|
- CHANGELOG.txt
|
|
98
119
|
- TODO.txt
|
|
@@ -102,32 +123,32 @@ files:
|
|
|
102
123
|
homepage: http://github.com/jmettraux/rufus-scheduler
|
|
103
124
|
licenses:
|
|
104
125
|
- MIT
|
|
105
|
-
post_install_message: "\n***\n\nThanks for installing rufus-scheduler 3.0.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
\
|
|
126
|
+
post_install_message: ! "\n***\n\nThanks for installing rufus-scheduler 3.0.9\n\nIt
|
|
127
|
+
might not be 100% compatible with rufus-scheduler 2.x.\n\nIf you encounter issues
|
|
128
|
+
with this new rufus-scheduler, especially\nif your app worked fine with previous
|
|
129
|
+
versions of it, you can\n\nA) Forget it and peg your Gemfile to rufus-scheduler
|
|
130
|
+
2.0.24\n\nand / or\n\nB) Take some time to carefully report the issue at\n https://github.com/jmettraux/rufus-scheduler/issues\n\nFor
|
|
131
|
+
general help about rufus-scheduler, ask via:\nhttp://stackoverflow.com/questions/ask?tags=rufus-scheduler+ruby\n\nCheers.\n\n***\n
|
|
132
|
+
\ "
|
|
112
133
|
rdoc_options: []
|
|
113
134
|
require_paths:
|
|
114
135
|
- lib
|
|
115
136
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
137
|
+
none: false
|
|
116
138
|
requirements:
|
|
117
|
-
- - '>='
|
|
139
|
+
- - ! '>='
|
|
118
140
|
- !ruby/object:Gem::Version
|
|
119
141
|
version: '0'
|
|
120
|
-
none: false
|
|
121
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
|
+
none: false
|
|
122
144
|
requirements:
|
|
123
|
-
- - '>='
|
|
145
|
+
- - ! '>='
|
|
124
146
|
- !ruby/object:Gem::Version
|
|
125
147
|
version: '0'
|
|
126
|
-
none: false
|
|
127
148
|
requirements: []
|
|
128
149
|
rubyforge_project: rufus
|
|
129
|
-
rubygems_version: 1.8.
|
|
130
|
-
signing_key:
|
|
150
|
+
rubygems_version: 1.8.23
|
|
151
|
+
signing_key:
|
|
131
152
|
specification_version: 3
|
|
132
153
|
summary: job scheduler for Ruby (at, cron, in and every jobs)
|
|
133
154
|
test_files: []
|