gaspar 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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