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.
@@ -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
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ gemfile:
3
+ - Gemfile
4
+ rvm:
5
+ - 1.9.3
6
+ - 2.0.0
7
+ - 2.1.1
8
+ - jruby-19mode
9
+ notifications:
10
+ email: false
11
+ services: redis-server
data/Gemfile CHANGED
@@ -4,8 +4,6 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  gem 'colorize'
7
- gem 'rspec'
8
7
  gem 'redis'
9
- gem 'active_support'
10
- gem 'timecop'
8
+ gem 'activesupport'
11
9
  gem 'rake'
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ {<img src="https://travis-ci.org/mashable/gaspar.svg" alt="Build Status" />}[https://travis-ci.org/mashable/gaspar]
2
+
1
3
  # Gaspar
2
4
  <img src="http://cdn.wikimg.net/strategywiki/images/0/04/Chrono_Trigger_Sprites_Gaspar.png" align="right" style="margin: 0 0 20px 20px" />
3
5
 
@@ -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
@@ -92,9 +92,11 @@ class Gaspar
92
92
 
93
93
  def cron(timing, *args, &block)
94
94
  options = args.extract_options!
95
- next_fire = Rufus::CronLine.new(timing).next_time
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] = next_fire.to_i - Time.now.to_i
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) { block.call }
152
+ run_callbacks(:run, &block)
151
153
  lock { @running_jobs -= 1 }
152
154
  end
153
155
  end
@@ -1,3 +1,3 @@
1
1
  class Gaspar
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -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 {|&block| callbacks.push "around"; block.call }
51
+ around_each {|gaspar, blk| callbacks.push "around"; blk.call }
52
52
 
53
- every("0.35s", "run callbacks") { callbacks.push "inside" }
53
+ every("1s", "run callbacks") { callbacks.push "inside" }
54
54
  end.start!(redis)
55
- sleep(0.4)
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!(:now).and_return Time.at(1351061802)
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!(:now).and_return Time.at(1351061802)
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.start!(redis)
128
+ end
122
129
  value.should == 0
123
- sleep(0.4)
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("0.35s", "update variable with lock") { value += 1 }
132
- every("0.35s", "update variable with lock") { value += 1 }
133
- every("0.35s", "update variable with lock") { value += 1 }
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(0.4)
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!(:now).and_return(150)
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.2
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: 2013-06-17 00:00:00.000000000 Z
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.2.0
36
- none: false
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: '0'
52
- none: false
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
- none: false
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
- none: false
85
- type: :development
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
- none: false
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
- description: Gaspar is an in-process recurring job manager. It is intended to be used
111
- in place of cron when you don't want a separate daemon.
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
- post_install_message:
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.8.24
155
- signing_key:
156
- specification_version: 3
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