gaspar 0.1.2 → 0.1.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.
- checksums.yaml +7 -0
- data/.travis.yml +11 -0
- data/Gemfile +1 -3
- data/README.md +2 -0
- data/gaspar.gemspec +2 -2
- data/lib/gaspar.rb +5 -3
- data/lib/gaspar/version.rb +1 -1
- data/spec/gaspar/gaspar_spec.rb +21 -13
- metadata +46 -66
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c12c3ef6f672a4e636b5e9f5db8f41c04d442673
|
4
|
+
data.tar.gz: d72ecff4e60ee556faad42471b09a7d033ce1284
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3454c89c6923e2951f3a9d4b17c3ba9ff4fb240d6a0d40bdfd4885d26298563a19c871e8beb68d050a4ec30679ff39bfd785f1a73e573f2f5a3fcde09d99cb0d
|
7
|
+
data.tar.gz: c90eea4803ba83482ea61394ea3e12de0af3156607112a042696168f9064c11e8d88452fe55dfb7ac2512c27377bf3bf7de7e23001d4132758677f3e71234419
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
data/gaspar.gemspec
CHANGED
@@ -17,10 +17,10 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
|
-
gem.add_dependency('rufus-scheduler')
|
20
|
+
gem.add_dependency('rufus-scheduler', "~> 2.0")
|
21
21
|
gem.add_dependency('redis', '>= 2.2.0')
|
22
22
|
gem.add_dependency('colorize')
|
23
23
|
gem.add_dependency('activesupport')
|
24
|
-
gem.add_development_dependency('rspec')
|
24
|
+
gem.add_development_dependency('rspec', "~> 2.0")
|
25
25
|
gem.add_development_dependency('timecop')
|
26
26
|
end
|
data/lib/gaspar.rb
CHANGED
@@ -92,9 +92,11 @@ class Gaspar
|
|
92
92
|
|
93
93
|
def cron(timing, *args, &block)
|
94
94
|
options = args.extract_options!
|
95
|
-
|
95
|
+
cron = Rufus::CronLine.new(timing)
|
96
|
+
next_fire = cron.next_time
|
97
|
+
next_next_fire = cron.next_time(next_fire + 0.001)
|
96
98
|
|
97
|
-
options[:period] =
|
99
|
+
options[:period] = next_next_fire.to_i - next_fire.to_i
|
98
100
|
schedule :cron, timing, args, options, &block
|
99
101
|
end
|
100
102
|
|
@@ -147,7 +149,7 @@ class Gaspar
|
|
147
149
|
lock { @running_jobs += 1 }
|
148
150
|
@redis.expire key, expiry.to_i
|
149
151
|
# ...and then run the job
|
150
|
-
run_callbacks(:run
|
152
|
+
run_callbacks(:run, &block)
|
151
153
|
lock { @running_jobs -= 1 }
|
152
154
|
end
|
153
155
|
end
|
data/lib/gaspar/version.rb
CHANGED
data/spec/gaspar/gaspar_spec.rb
CHANGED
@@ -48,11 +48,11 @@ describe Gaspar do
|
|
48
48
|
Gaspar.configure do
|
49
49
|
before_each { callbacks.push "before" }
|
50
50
|
after_each { callbacks.push "after" }
|
51
|
-
around_each {
|
51
|
+
around_each {|gaspar, blk| callbacks.push "around"; blk.call }
|
52
52
|
|
53
|
-
every("
|
53
|
+
every("1s", "run callbacks") { callbacks.push "inside" }
|
54
54
|
end.start!(redis)
|
55
|
-
sleep(
|
55
|
+
sleep(1.5)
|
56
56
|
|
57
57
|
callbacks.should == %w(before around inside after)
|
58
58
|
end
|
@@ -66,7 +66,7 @@ describe Gaspar do
|
|
66
66
|
end
|
67
67
|
|
68
68
|
it "should enqueue a job" do
|
69
|
-
Time.stub
|
69
|
+
Time.stub(:now).and_return Time.at(1351061802)
|
70
70
|
Gaspar.any_instance.stub(:drift).and_return(0)
|
71
71
|
Gaspar.configure do
|
72
72
|
every "5m", :Foobar
|
@@ -84,8 +84,15 @@ describe Gaspar do
|
|
84
84
|
end.start!(redis)
|
85
85
|
end
|
86
86
|
|
87
|
+
it "should properly calculate the period for a #cron invocation" do
|
88
|
+
Gaspar.any_instance.should_receive(:schedule).with(:cron, "59 * * * *", [], {period: 3600})
|
89
|
+
Gaspar.configure do
|
90
|
+
cron("59 * * * *") { puts "Doing stuff" }
|
91
|
+
end.start!(redis)
|
92
|
+
end
|
93
|
+
|
87
94
|
it "should quantitize #every to the next timeslice" do
|
88
|
-
Time.stub
|
95
|
+
Time.stub(:now).and_return Time.at(1351061802)
|
89
96
|
Gaspar.any_instance.stub(:drift).and_return(0)
|
90
97
|
Gaspar.any_instance.should_receive(:schedule).with(:every, "5m", [], {:first_at => Time.at(1351062000), :period => 300.0})
|
91
98
|
Gaspar.configure do
|
@@ -114,13 +121,14 @@ describe Gaspar do
|
|
114
121
|
it "should process jobs" do
|
115
122
|
value = 0
|
116
123
|
sleep 0.4
|
117
|
-
Gaspar.configure do
|
124
|
+
g = Gaspar.configure do
|
118
125
|
every "0.35s", "update variable" do
|
119
126
|
value += 1
|
120
127
|
end
|
121
|
-
end
|
128
|
+
end
|
122
129
|
value.should == 0
|
123
|
-
|
130
|
+
g.start!(redis)
|
131
|
+
sleep(1.5)
|
124
132
|
value.should > 0
|
125
133
|
end
|
126
134
|
|
@@ -128,12 +136,12 @@ describe Gaspar do
|
|
128
136
|
value = 0
|
129
137
|
sleep 0.4
|
130
138
|
Gaspar.configure do
|
131
|
-
every("
|
132
|
-
every("
|
133
|
-
every("
|
139
|
+
every("1s", "update variable with lock") { value += 1 }
|
140
|
+
every("1s", "update variable with lock") { value += 1 }
|
141
|
+
every("1s", "update variable with lock") { value += 1 }
|
134
142
|
end.start!(redis)
|
135
143
|
value.should == 0
|
136
|
-
sleep(
|
144
|
+
sleep(1.5)
|
137
145
|
value.should == 1
|
138
146
|
end
|
139
147
|
|
@@ -184,7 +192,7 @@ describe Gaspar do
|
|
184
192
|
context "instance methods" do
|
185
193
|
describe "#sync_watches" do
|
186
194
|
it "should compute drift" do
|
187
|
-
Time.stub
|
195
|
+
Time.stub(:now).and_return(150)
|
188
196
|
redis = double :redis, :setnx => false, :get => "100", :ttl => (3.2e8.to_i - 25)
|
189
197
|
instance = Gaspar.send(:new)
|
190
198
|
instance.instance_variable_set(:@redis, redis)
|
metadata
CHANGED
@@ -1,114 +1,100 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gaspar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Chris Heald
|
9
|
-
autorequire:
|
8
|
+
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-12-01 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ! '>='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
none: false
|
21
|
-
type: :runtime
|
22
14
|
name: rufus-scheduler
|
23
15
|
version_requirements: !ruby/object:Gem::Requirement
|
24
16
|
requirements:
|
25
|
-
- -
|
17
|
+
- - ~>
|
26
18
|
- !ruby/object:Gem::Version
|
27
|
-
version: '0'
|
28
|
-
none: false
|
29
|
-
prerelease: false
|
30
|
-
- !ruby/object:Gem::Dependency
|
19
|
+
version: '2.0'
|
31
20
|
requirement: !ruby/object:Gem::Requirement
|
32
21
|
requirements:
|
33
|
-
- -
|
22
|
+
- - ~>
|
34
23
|
- !ruby/object:Gem::Version
|
35
|
-
version: 2.
|
36
|
-
|
24
|
+
version: '2.0'
|
25
|
+
prerelease: false
|
37
26
|
type: :runtime
|
27
|
+
- !ruby/object:Gem::Dependency
|
38
28
|
name: redis
|
39
29
|
version_requirements: !ruby/object:Gem::Requirement
|
40
30
|
requirements:
|
41
|
-
- -
|
31
|
+
- - '>='
|
42
32
|
- !ruby/object:Gem::Version
|
43
33
|
version: 2.2.0
|
44
|
-
none: false
|
45
|
-
prerelease: false
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
34
|
requirement: !ruby/object:Gem::Requirement
|
48
35
|
requirements:
|
49
|
-
- -
|
36
|
+
- - '>='
|
50
37
|
- !ruby/object:Gem::Version
|
51
|
-
version:
|
52
|
-
|
38
|
+
version: 2.2.0
|
39
|
+
prerelease: false
|
53
40
|
type: :runtime
|
41
|
+
- !ruby/object:Gem::Dependency
|
54
42
|
name: colorize
|
55
43
|
version_requirements: !ruby/object:Gem::Requirement
|
56
44
|
requirements:
|
57
|
-
- -
|
45
|
+
- - '>='
|
58
46
|
- !ruby/object:Gem::Version
|
59
47
|
version: '0'
|
60
|
-
none: false
|
61
|
-
prerelease: false
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
48
|
requirement: !ruby/object:Gem::Requirement
|
64
49
|
requirements:
|
65
|
-
- -
|
50
|
+
- - '>='
|
66
51
|
- !ruby/object:Gem::Version
|
67
52
|
version: '0'
|
68
|
-
|
53
|
+
prerelease: false
|
69
54
|
type: :runtime
|
55
|
+
- !ruby/object:Gem::Dependency
|
70
56
|
name: activesupport
|
71
57
|
version_requirements: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
|
-
- -
|
59
|
+
- - '>='
|
74
60
|
- !ruby/object:Gem::Version
|
75
61
|
version: '0'
|
76
|
-
none: false
|
77
|
-
prerelease: false
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
62
|
requirement: !ruby/object:Gem::Requirement
|
80
63
|
requirements:
|
81
|
-
- -
|
64
|
+
- - '>='
|
82
65
|
- !ruby/object:Gem::Version
|
83
66
|
version: '0'
|
84
|
-
|
85
|
-
type: :
|
67
|
+
prerelease: false
|
68
|
+
type: :runtime
|
69
|
+
- !ruby/object:Gem::Dependency
|
86
70
|
name: rspec
|
87
71
|
version_requirements: !ruby/object:Gem::Requirement
|
88
72
|
requirements:
|
89
|
-
- -
|
73
|
+
- - ~>
|
90
74
|
- !ruby/object:Gem::Version
|
91
|
-
version: '0'
|
92
|
-
none: false
|
93
|
-
prerelease: false
|
94
|
-
- !ruby/object:Gem::Dependency
|
75
|
+
version: '2.0'
|
95
76
|
requirement: !ruby/object:Gem::Requirement
|
96
77
|
requirements:
|
97
|
-
- -
|
78
|
+
- - ~>
|
98
79
|
- !ruby/object:Gem::Version
|
99
|
-
version: '0'
|
100
|
-
|
80
|
+
version: '2.0'
|
81
|
+
prerelease: false
|
101
82
|
type: :development
|
83
|
+
- !ruby/object:Gem::Dependency
|
102
84
|
name: timecop
|
103
85
|
version_requirements: !ruby/object:Gem::Requirement
|
104
86
|
requirements:
|
105
|
-
- -
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
requirement: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - '>='
|
106
93
|
- !ruby/object:Gem::Version
|
107
94
|
version: '0'
|
108
|
-
none: false
|
109
95
|
prerelease: false
|
110
|
-
|
111
|
-
|
96
|
+
type: :development
|
97
|
+
description: Gaspar is an in-process recurring job manager. It is intended to be used in place of cron when you don't want a separate daemon.
|
112
98
|
email:
|
113
99
|
- cheald@mashable.com
|
114
100
|
executables: []
|
@@ -116,6 +102,7 @@ extensions: []
|
|
116
102
|
extra_rdoc_files: []
|
117
103
|
files:
|
118
104
|
- .gitignore
|
105
|
+
- .travis.yml
|
119
106
|
- Gemfile
|
120
107
|
- LICENSE.txt
|
121
108
|
- README.md
|
@@ -127,33 +114,26 @@ files:
|
|
127
114
|
- spec/spec_helper.rb
|
128
115
|
homepage: http://github.com/mashable/gaspar
|
129
116
|
licenses: []
|
130
|
-
|
117
|
+
metadata: {}
|
118
|
+
post_install_message:
|
131
119
|
rdoc_options: []
|
132
120
|
require_paths:
|
133
121
|
- lib
|
134
122
|
required_ruby_version: !ruby/object:Gem::Requirement
|
135
123
|
requirements:
|
136
|
-
- -
|
124
|
+
- - '>='
|
137
125
|
- !ruby/object:Gem::Version
|
138
|
-
hash: -546882929324832144
|
139
126
|
version: '0'
|
140
|
-
segments:
|
141
|
-
- 0
|
142
|
-
none: false
|
143
127
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
128
|
requirements:
|
145
|
-
- -
|
129
|
+
- - '>='
|
146
130
|
- !ruby/object:Gem::Version
|
147
|
-
hash: -546882929324832144
|
148
131
|
version: '0'
|
149
|
-
segments:
|
150
|
-
- 0
|
151
|
-
none: false
|
152
132
|
requirements: []
|
153
|
-
rubyforge_project:
|
154
|
-
rubygems_version: 1.
|
155
|
-
signing_key:
|
156
|
-
specification_version:
|
133
|
+
rubyforge_project:
|
134
|
+
rubygems_version: 2.1.9
|
135
|
+
signing_key:
|
136
|
+
specification_version: 4
|
157
137
|
summary: Gaspar is an in-process recurring job manager.
|
158
138
|
test_files:
|
159
139
|
- spec/gaspar/gaspar_spec.rb
|