eventmachinealignedperiodic 2.1.1 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,6 +1,6 @@
1
1
  History.txt
2
2
  Manifest.txt
3
- README.txt
3
+ README.md
4
4
  LICENSE.txt
5
5
  Rakefile
6
6
  lib/eventmachine_alignedperiodic.rb
File without changes
data/Rakefile CHANGED
@@ -6,6 +6,7 @@ Hoe.plugin :bundler
6
6
 
7
7
  Hoe.spec 'eventmachinealignedperiodic' do
8
8
  developer("James FitzGibbon", "james@nadt.net")
9
+ developer("Gregory Hill", "gregoryhilluk@gmail.com")
9
10
  license "MIT"
10
11
  dependency 'eventmachine', '~> 1.0.3'
11
12
  dependency 'hoe', '~> 3.7.1', :dev
@@ -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.1.20131112160551"
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.authors = ["James FitzGibbon"]
9
- s.date = "2013-11-13"
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", "Manifest.txt", "README.txt", "LICENSE.txt"]
13
- s.files = ["History.txt", "Manifest.txt", "README.txt", "LICENSE.txt", "Rakefile", "lib/eventmachine_alignedperiodic.rb", "eventmachinealignedperiodic.gemspec", "test/test_eventmachine_alignedperiodic.rb", ".gemtest"]
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.txt"]
17
- s.require_paths = ["lib"]
18
+ s.rdoc_options = ["--main", "README.md"]
18
19
  s.rubyforge_project = "eventmachinealignedperiodic"
19
- s.rubygems_version = "1.8.23"
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 = 3
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.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
- @mutex.synchronize {
46
- EventMachine.cancel_timer(@timer)
47
- @running = false
48
- @p.call(true)
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
- def test_constructor
5
- aligned = EventMachine::AlignedPeriodic.new(900, proc { puts "foo" })
6
- assert_instance_of EventMachine::AlignedPeriodic, aligned, "constructor works"
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.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: 2013-11-13 00:00:00.000000000 Z
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: ! 'EventMachineAlignedPeriodic helps to kick off a block of code on a
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.txt
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: 1.8.23
187
+ rubygems_version: 2.4.6
209
188
  signing_key:
210
- specification_version: 3
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: