timers 1.0.0.pre → 1.0.0.pre2

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.
Files changed (3) hide show
  1. data/lib/timers.rb +17 -12
  2. data/lib/timers/version.rb +1 -1
  3. metadata +5 -5
data/lib/timers.rb CHANGED
@@ -3,9 +3,9 @@ require 'timers/version'
3
3
 
4
4
  # Low precision timers implemented in pure Ruby
5
5
  class Timers
6
- extend Forwardable
7
6
  include Enumerable
8
- def_delegators :@timers, :add, :delete, :each, :empty?
7
+ extend Forwardable
8
+ def_delegators :@timers, :delete, :each, :empty?
9
9
 
10
10
  def initialize
11
11
  @timers = SortedSet.new
@@ -34,18 +34,22 @@ class Timers
34
34
  end
35
35
 
36
36
  # Fire all timers that are ready
37
- def fire
37
+ def fire(now = Time.now)
38
38
  return if @timers.empty?
39
39
 
40
- time = Time.now + 0.001
40
+ time = now + 0.001
41
41
  while not empty? and time >= @timers.first.time
42
42
  timer = @timers.first
43
43
  @timers.delete timer
44
- timer.call
44
+ timer.fire(now)
45
45
  end
46
46
  end
47
47
 
48
- alias_method :insert, :add
48
+ def add(timer)
49
+ raise TypeError, "not a Timers::Timer" unless timer.is_a? Timers::Timer
50
+ @timers.add(timer)
51
+ end
52
+
49
53
  alias_method :cancel, :delete
50
54
 
51
55
  # An individual timer set to fire a given proc at a given time
@@ -56,6 +60,7 @@ class Timers
56
60
  def initialize(timers, interval, recurring = false, &block)
57
61
  @timers, @interval, @recurring = timers, interval, recurring
58
62
  @block = block
63
+ @time = nil
59
64
 
60
65
  reset
61
66
  end
@@ -70,15 +75,15 @@ class Timers
70
75
  end
71
76
 
72
77
  # Reset this timer
73
- def reset
74
- @timers.cancel self if defined?(@time)
75
- @time = Time.now + @interval
76
- @timers.insert self
78
+ def reset(now = Time.now)
79
+ @timers.cancel self if @time
80
+ @time = now + @interval
81
+ @timers.add self
77
82
  end
78
83
 
79
84
  # Fire the block
80
- def fire
81
- reset if recurring
85
+ def fire(now = Time.now)
86
+ reset(now) if recurring
82
87
  @block.call
83
88
  end
84
89
  alias_method :call, :fire
@@ -1,3 +1,3 @@
1
1
  class Timers
2
- VERSION = "1.0.0.pre"
2
+ VERSION = "1.0.0.pre2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre
4
+ version: 1.0.0.pre2
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-07-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70102019350080 !ruby/object:Gem::Requirement
16
+ requirement: &70365568382460 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70102019350080
24
+ version_requirements: *70365568382460
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70102019349180 !ruby/object:Gem::Requirement
27
+ requirement: &70365568381660 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70102019349180
35
+ version_requirements: *70365568381660
36
36
  description: Pure Ruby one-shot and periodic timers
37
37
  email:
38
38
  - tony.arcieri@gmail.com