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 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: