timers 1.0.0.pre → 1.0.0.pre2

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