eventmachinealignedperiodic 2.1.1 → 2.1.2
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/Manifest.txt +1 -1
- data/{README.txt → README.md} +0 -0
- data/Rakefile +1 -0
- data/eventmachinealignedperiodic.gemspec +11 -10
- data/lib/eventmachine_alignedperiodic.rb +18 -14
- data/test/test_eventmachine_alignedperiodic.rb +66 -3
- metadata +38 -59
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0f1502dd5d02b96ce82393ba287206d5e5b90e52
|
4
|
+
data.tar.gz: 32b94631815197cf3b1e557a011a2c46ebfca613
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d272223531926975d338b480406c307004c8626c23c6c337f3932954f9ffa9dd390f02fdbf470e8190740723a3e5c07b9fad95a357717c19199122adb5aeaaee
|
7
|
+
data.tar.gz: 8ee2335aa06748d38f2a63c660f7286c6ddc4174addcb02b006331b52c3fa9cfa9b159880dc6e96c69a2eb16234656bdf8ac203455b8c5a150f0028a071c89ff
|
data/Manifest.txt
CHANGED
data/{README.txt → README.md}
RENAMED
File without changes
|
data/Rakefile
CHANGED
@@ -1,27 +1,28 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
# stub: eventmachinealignedperiodic 2.1.2.20151204094310 ruby lib
|
2
3
|
|
3
4
|
Gem::Specification.new do |s|
|
4
5
|
s.name = "eventmachinealignedperiodic"
|
5
|
-
s.version = "2.1.
|
6
|
+
s.version = "2.1.2.20151204094310"
|
6
7
|
|
7
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.
|
9
|
-
s.
|
9
|
+
s.require_paths = ["lib"]
|
10
|
+
s.authors = ["James FitzGibbon", "Gregory Hill"]
|
11
|
+
s.date = "2015-12-04"
|
10
12
|
s.description = "EventMachineAlignedPeriodic helps to kick off a block of code on a periodic\nschedule aligned with a time period. Rather than have something starting at\n2 seconds, 17 seconds, 32 seconds and so on you can have it consistently\nlaunch at 0, 15, 30."
|
11
|
-
s.email = ["james@nadt.net"]
|
12
|
-
s.extra_rdoc_files = ["History.txt", "
|
13
|
-
s.files = ["
|
13
|
+
s.email = ["james@nadt.net", "gregoryhilluk@gmail.com"]
|
14
|
+
s.extra_rdoc_files = ["History.txt", "LICENSE.txt", "Manifest.txt", "README.md"]
|
15
|
+
s.files = [".gemtest", "History.txt", "LICENSE.txt", "Manifest.txt", "README.md", "Rakefile", "eventmachinealignedperiodic.gemspec", "lib/eventmachine_alignedperiodic.rb", "test/test_eventmachine_alignedperiodic.rb"]
|
14
16
|
s.homepage = "https://github.com/jf647/EventMachineAlignedPeriodic"
|
15
17
|
s.licenses = ["MIT"]
|
16
|
-
s.rdoc_options = ["--main", "README.
|
17
|
-
s.require_paths = ["lib"]
|
18
|
+
s.rdoc_options = ["--main", "README.md"]
|
18
19
|
s.rubyforge_project = "eventmachinealignedperiodic"
|
19
|
-
s.rubygems_version = "
|
20
|
+
s.rubygems_version = "2.4.6"
|
20
21
|
s.summary = "EventMachineAlignedPeriodic helps to kick off a block of code on a periodic schedule aligned with a time period"
|
21
22
|
s.test_files = ["test/test_eventmachine_alignedperiodic.rb"]
|
22
23
|
|
23
24
|
if s.respond_to? :specification_version then
|
24
|
-
s.specification_version =
|
25
|
+
s.specification_version = 4
|
25
26
|
|
26
27
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
27
28
|
s.add_runtime_dependency(%q<eventmachine>, ["~> 1.0.3"])
|
@@ -6,8 +6,8 @@ module EventMachine
|
|
6
6
|
|
7
7
|
class AlignedPeriodic
|
8
8
|
|
9
|
-
VERSION = '2.1.
|
10
|
-
|
9
|
+
VERSION = '2.1.2'
|
10
|
+
|
11
11
|
attr_reader :nextevent
|
12
12
|
|
13
13
|
def initialize(interval, p, offset = 0, logger = nil)
|
@@ -40,17 +40,21 @@ module EventMachine
|
|
40
40
|
schedule_next_event
|
41
41
|
}
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
def stop
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
#Changed as per https://github.com/eventmachine/eventmachine/issues/418
|
46
|
+
if EM.reactor_running?
|
47
|
+
EM.add_timer(0) {
|
48
|
+
EventMachine.cancel_timer(@timer) if !@timer.nil?
|
49
|
+
}
|
50
|
+
end
|
51
|
+
@running = false
|
52
|
+
@timer = nil
|
53
|
+
@p.call(true)
|
50
54
|
end
|
51
|
-
|
55
|
+
|
52
56
|
private
|
53
|
-
|
57
|
+
|
54
58
|
def do_periodic
|
55
59
|
@mutex.synchronize {
|
56
60
|
# we can't remove shutdown hooks, so if we aren't running, do nothing
|
@@ -67,7 +71,7 @@ module EventMachine
|
|
67
71
|
schedule_next_event
|
68
72
|
}
|
69
73
|
end
|
70
|
-
|
74
|
+
|
71
75
|
def schedule_first_event
|
72
76
|
now = Time.now
|
73
77
|
if @lastevent.nil?
|
@@ -79,12 +83,12 @@ module EventMachine
|
|
79
83
|
@nextevent = @lastevent + @interval
|
80
84
|
schedule
|
81
85
|
end
|
82
|
-
|
86
|
+
|
83
87
|
def schedule_next_event
|
84
88
|
@nextevent = @lastevent + @interval
|
85
89
|
schedule
|
86
90
|
end
|
87
|
-
|
91
|
+
|
88
92
|
def schedule
|
89
93
|
if ! @logger.nil?
|
90
94
|
@logger.debug("next event is at #{@nextevent}")
|
@@ -92,7 +96,7 @@ module EventMachine
|
|
92
96
|
nextevent_in = @nextevent - Time.now
|
93
97
|
@timer = EventMachine.add_timer(nextevent_in) { do_periodic() }
|
94
98
|
end
|
95
|
-
|
99
|
+
|
96
100
|
end
|
97
101
|
|
98
102
|
end
|
@@ -1,8 +1,71 @@
|
|
1
1
|
require 'minitest_helper'
|
2
|
+
require 'logger'
|
2
3
|
|
3
4
|
class TestEVMAAlignedPeriodic < Minitest::Test
|
4
|
-
|
5
|
-
|
6
|
-
|
5
|
+
def test_constructor
|
6
|
+
aligned = EventMachine::AlignedPeriodic.new(900, proc { puts "foo" })
|
7
|
+
assert_instance_of EventMachine::AlignedPeriodic, aligned, "constructor works"
|
8
|
+
end
|
9
|
+
def test_destructor_trap_context
|
10
|
+
aligned = EventMachine::AlignedPeriodic.new(900, proc { puts "foo" })
|
11
|
+
assert_instance_of EventMachine::AlignedPeriodic, aligned, "constructor works"
|
12
|
+
|
13
|
+
#This specifically tests stopping in a trap context.
|
14
|
+
#Issue #418
|
15
|
+
shutdownproc = Proc.new {
|
16
|
+
aligned.stop
|
17
|
+
}
|
18
|
+
Signal.trap("TERM", shutdownproc)
|
19
|
+
Process.kill("TERM", $$)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_destructor_reactor_not_running
|
23
|
+
aligned = EventMachine::AlignedPeriodic.new(900, proc { puts "foo" })
|
24
|
+
assert_instance_of EventMachine::AlignedPeriodic, aligned, "constructor works"
|
25
|
+
out, err = capture_io do
|
26
|
+
aligned.stop
|
27
|
+
end
|
28
|
+
assert_match "foo", out
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_poke_not_running
|
32
|
+
aligned = EventMachine::AlignedPeriodic.new(900, proc { puts "foo" })
|
33
|
+
e = assert_raises(RuntimeError) { aligned.poke }
|
34
|
+
assert_equal e.message, "periodic schedulder not running; can't be poked"
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_poke_running
|
38
|
+
aligned = nil
|
39
|
+
t = nil
|
40
|
+
out, err = capture_io {
|
41
|
+
log = Logger.new($stdout)
|
42
|
+
aligned = EventMachine::AlignedPeriodic.new(900, proc { puts "foo" },0,log)
|
43
|
+
t = Thread.new() do
|
44
|
+
EM.run
|
45
|
+
end
|
46
|
+
sleep 1 #pause to give eventmachine time to initialise
|
47
|
+
aligned.start
|
48
|
+
}
|
49
|
+
assert_match %r{next event is at}, out
|
50
|
+
out, err = capture_io { aligned.poke }
|
51
|
+
assert_equal "foo\n", out
|
52
|
+
aligned.stop
|
53
|
+
EM.stop
|
54
|
+
t.join
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_periodic_output #no assertions yet but does run lines of code! :)
|
58
|
+
log = Logger.new(STDOUT)
|
59
|
+
aligned = EventMachine::AlignedPeriodic.new(5, proc { puts "foo" },0,log)
|
60
|
+
t = Thread.new() do
|
61
|
+
EM.run
|
7
62
|
end
|
63
|
+
sleep 1 #pause to give eventmachine time to initialise
|
64
|
+
aligned.start
|
65
|
+
sleep 5
|
66
|
+
#assert_match "foo", out
|
67
|
+
aligned.stop
|
68
|
+
EM.stop
|
69
|
+
t.join
|
70
|
+
end
|
8
71
|
end
|
metadata
CHANGED
@@ -1,213 +1,192 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventmachinealignedperiodic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
5
|
-
prerelease:
|
4
|
+
version: 2.1.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- James FitzGibbon
|
8
|
+
- Gregory Hill
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-12-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
17
|
requirements:
|
19
|
-
- - ~>
|
18
|
+
- - "~>"
|
20
19
|
- !ruby/object:Gem::Version
|
21
20
|
version: 1.0.3
|
22
21
|
type: :runtime
|
23
22
|
prerelease: false
|
24
23
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
24
|
requirements:
|
27
|
-
- - ~>
|
25
|
+
- - "~>"
|
28
26
|
- !ruby/object:Gem::Version
|
29
27
|
version: 1.0.3
|
30
28
|
- !ruby/object:Gem::Dependency
|
31
29
|
name: rdoc
|
32
30
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
31
|
requirements:
|
35
|
-
- - ~>
|
32
|
+
- - "~>"
|
36
33
|
- !ruby/object:Gem::Version
|
37
34
|
version: '4.0'
|
38
35
|
type: :development
|
39
36
|
prerelease: false
|
40
37
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
38
|
requirements:
|
43
|
-
- - ~>
|
39
|
+
- - "~>"
|
44
40
|
- !ruby/object:Gem::Version
|
45
41
|
version: '4.0'
|
46
42
|
- !ruby/object:Gem::Dependency
|
47
43
|
name: hoe
|
48
44
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
45
|
requirements:
|
51
|
-
- - ~>
|
46
|
+
- - "~>"
|
52
47
|
- !ruby/object:Gem::Version
|
53
48
|
version: 3.7.1
|
54
49
|
type: :development
|
55
50
|
prerelease: false
|
56
51
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
52
|
requirements:
|
59
|
-
- - ~>
|
53
|
+
- - "~>"
|
60
54
|
- !ruby/object:Gem::Version
|
61
55
|
version: 3.7.1
|
62
56
|
- !ruby/object:Gem::Dependency
|
63
57
|
name: hoe-gemspec
|
64
58
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
59
|
requirements:
|
67
|
-
- - ~>
|
60
|
+
- - "~>"
|
68
61
|
- !ruby/object:Gem::Version
|
69
62
|
version: 1.0.0
|
70
63
|
type: :development
|
71
64
|
prerelease: false
|
72
65
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
66
|
requirements:
|
75
|
-
- - ~>
|
67
|
+
- - "~>"
|
76
68
|
- !ruby/object:Gem::Version
|
77
69
|
version: 1.0.0
|
78
70
|
- !ruby/object:Gem::Dependency
|
79
71
|
name: hoe-bundler
|
80
72
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
73
|
requirements:
|
83
|
-
- - ~>
|
74
|
+
- - "~>"
|
84
75
|
- !ruby/object:Gem::Version
|
85
76
|
version: 1.2.0
|
86
77
|
type: :development
|
87
78
|
prerelease: false
|
88
79
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
80
|
requirements:
|
91
|
-
- - ~>
|
81
|
+
- - "~>"
|
92
82
|
- !ruby/object:Gem::Version
|
93
83
|
version: 1.2.0
|
94
84
|
- !ruby/object:Gem::Dependency
|
95
85
|
name: simplecov
|
96
86
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
87
|
requirements:
|
99
|
-
- - ~>
|
88
|
+
- - "~>"
|
100
89
|
- !ruby/object:Gem::Version
|
101
90
|
version: 0.7.1
|
102
91
|
type: :development
|
103
92
|
prerelease: false
|
104
93
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
94
|
requirements:
|
107
|
-
- - ~>
|
95
|
+
- - "~>"
|
108
96
|
- !ruby/object:Gem::Version
|
109
97
|
version: 0.7.1
|
110
98
|
- !ruby/object:Gem::Dependency
|
111
99
|
name: simplecov-console
|
112
100
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
101
|
requirements:
|
115
|
-
- - ~>
|
102
|
+
- - "~>"
|
116
103
|
- !ruby/object:Gem::Version
|
117
104
|
version: 0.1.1
|
118
105
|
type: :development
|
119
106
|
prerelease: false
|
120
107
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
108
|
requirements:
|
123
|
-
- - ~>
|
109
|
+
- - "~>"
|
124
110
|
- !ruby/object:Gem::Version
|
125
111
|
version: 0.1.1
|
126
112
|
- !ruby/object:Gem::Dependency
|
127
113
|
name: minitest
|
128
114
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
115
|
requirements:
|
131
|
-
- - ~>
|
116
|
+
- - "~>"
|
132
117
|
- !ruby/object:Gem::Version
|
133
118
|
version: 5.0.8
|
134
119
|
type: :development
|
135
120
|
prerelease: false
|
136
121
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
122
|
requirements:
|
139
|
-
- - ~>
|
123
|
+
- - "~>"
|
140
124
|
- !ruby/object:Gem::Version
|
141
125
|
version: 5.0.8
|
142
126
|
- !ruby/object:Gem::Dependency
|
143
127
|
name: minitest-debugger
|
144
128
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
129
|
requirements:
|
147
|
-
- - ~>
|
130
|
+
- - "~>"
|
148
131
|
- !ruby/object:Gem::Version
|
149
132
|
version: 1.0.2
|
150
133
|
type: :development
|
151
134
|
prerelease: false
|
152
135
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
136
|
requirements:
|
155
|
-
- - ~>
|
137
|
+
- - "~>"
|
156
138
|
- !ruby/object:Gem::Version
|
157
139
|
version: 1.0.2
|
158
|
-
description:
|
159
|
-
periodic
|
160
|
-
|
140
|
+
description: |-
|
141
|
+
EventMachineAlignedPeriodic helps to kick off a block of code on a periodic
|
161
142
|
schedule aligned with a time period. Rather than have something starting at
|
162
|
-
|
163
143
|
2 seconds, 17 seconds, 32 seconds and so on you can have it consistently
|
164
|
-
|
165
|
-
launch at 0, 15, 30.'
|
144
|
+
launch at 0, 15, 30.
|
166
145
|
email:
|
167
146
|
- james@nadt.net
|
147
|
+
- gregoryhilluk@gmail.com
|
168
148
|
executables: []
|
169
149
|
extensions: []
|
170
150
|
extra_rdoc_files:
|
171
151
|
- History.txt
|
172
|
-
- Manifest.txt
|
173
|
-
- README.txt
|
174
152
|
- LICENSE.txt
|
153
|
+
- Manifest.txt
|
154
|
+
- README.md
|
175
155
|
files:
|
156
|
+
- ".gemtest"
|
176
157
|
- History.txt
|
177
|
-
- Manifest.txt
|
178
|
-
- README.txt
|
179
158
|
- LICENSE.txt
|
159
|
+
- Manifest.txt
|
160
|
+
- README.md
|
180
161
|
- Rakefile
|
181
|
-
- lib/eventmachine_alignedperiodic.rb
|
182
162
|
- eventmachinealignedperiodic.gemspec
|
163
|
+
- lib/eventmachine_alignedperiodic.rb
|
183
164
|
- test/test_eventmachine_alignedperiodic.rb
|
184
|
-
- .gemtest
|
185
165
|
homepage: https://github.com/jf647/EventMachineAlignedPeriodic
|
186
166
|
licenses:
|
187
167
|
- MIT
|
168
|
+
metadata: {}
|
188
169
|
post_install_message:
|
189
170
|
rdoc_options:
|
190
|
-
- --main
|
191
|
-
- README.
|
171
|
+
- "--main"
|
172
|
+
- README.md
|
192
173
|
require_paths:
|
193
174
|
- lib
|
194
175
|
required_ruby_version: !ruby/object:Gem::Requirement
|
195
|
-
none: false
|
196
176
|
requirements:
|
197
|
-
- -
|
177
|
+
- - ">="
|
198
178
|
- !ruby/object:Gem::Version
|
199
179
|
version: '0'
|
200
180
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
201
|
-
none: false
|
202
181
|
requirements:
|
203
|
-
- -
|
182
|
+
- - ">="
|
204
183
|
- !ruby/object:Gem::Version
|
205
184
|
version: '0'
|
206
185
|
requirements: []
|
207
186
|
rubyforge_project: eventmachinealignedperiodic
|
208
|
-
rubygems_version:
|
187
|
+
rubygems_version: 2.4.6
|
209
188
|
signing_key:
|
210
|
-
specification_version:
|
189
|
+
specification_version: 4
|
211
190
|
summary: EventMachineAlignedPeriodic helps to kick off a block of code on a periodic
|
212
191
|
schedule aligned with a time period
|
213
192
|
test_files:
|