ActionTimer 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/README.rdoc +94 -25
- data/actiontimer.gemspec +2 -2
- data/lib/actiontimer/Timer.rb +1 -0
- data/test +11 -0
- data/tests/run_tests.rb +13 -2
- metadata +7 -6
data/CHANGELOG
CHANGED
data/README.rdoc
CHANGED
@@ -2,41 +2,110 @@
|
|
2
2
|
|
3
3
|
ActionTimer is a helper for timed events. It allows for single and recurring actions to be executed in an efficient manner. It makes use of a single thread to keep time on registered actions and uses an ActionPool to execute actions. Simple and effective.
|
4
4
|
|
5
|
+
|
5
6
|
=== install (easy):
|
6
7
|
|
7
|
-
gem install
|
8
|
+
gem install actiontimer
|
8
9
|
|
9
10
|
=== install (less easy):
|
10
11
|
|
11
12
|
git clone http://github.com/spox/actiontimer.git
|
12
|
-
cd actiontimer
|
13
|
-
gem build actiontimer.gemspec
|
14
|
-
gem install ./
|
13
|
+
cd actiontimer && gem build *.gemspec && gem install ./
|
15
14
|
|
16
|
-
===
|
15
|
+
=== install (less easy that's a little easier)
|
17
16
|
|
18
|
-
|
17
|
+
{rip}[http://hellorip.com/about.html] makes it easy to install directly from a github repository.
|
19
18
|
|
20
|
-
|
19
|
+
=== Using the timer:
|
21
20
|
|
22
|
-
|
23
|
-
|
21
|
+
==== Simple example:
|
22
|
+
|
23
|
+
require 'actiontimer'
|
24
|
+
timer = ActionTimer::Timer.new
|
25
|
+
timer.add(1){ puts "#{Time.now}: This is timed every 1 second." }
|
26
|
+
timer.add(2){ puts "#{Time.now}: This is timed every 2 seconds." }
|
24
27
|
loop do
|
25
|
-
puts "#{Time.now}: Main loop
|
26
|
-
sleep(
|
28
|
+
puts "#{Time.now}: Main loop sleeps for 3 seconds."
|
29
|
+
sleep(3)
|
27
30
|
end
|
31
|
+
|
32
|
+
=>
|
33
|
+
2010-01-05 17:52:46 -0800: Main loop sleeps for 3 seconds.
|
34
|
+
2010-01-05 17:52:47 -0800: This is timed every 1 second.
|
35
|
+
2010-01-05 17:52:48 -0800: This is timed every 1 second.
|
36
|
+
2010-01-05 17:52:48 -0800: This is timed every 2 seconds.
|
37
|
+
2010-01-05 17:52:49 -0800: Main loop sleeps for 3 seconds.
|
38
|
+
2010-01-05 17:52:49 -0800: This is timed every 1 second.
|
39
|
+
2010-01-05 17:52:50 -0800: This is timed every 1 second.
|
40
|
+
2010-01-05 17:52:50 -0800: This is timed every 2 seconds.
|
41
|
+
2010-01-05 17:52:51 -0800: This is timed every 1 second.
|
42
|
+
2010-01-05 17:52:52 -0800: Main loop sleeps for 3 seconds.
|
43
|
+
|
44
|
+
==== Other examples:
|
45
|
+
|
46
|
+
What if you want to sleep for less than a second? Well, sure we can do that:
|
47
|
+
|
48
|
+
require 'actiontimer'
|
49
|
+
result = 0
|
50
|
+
timer = ActionTimer::Timer.new
|
51
|
+
timer.add(0.1){ result += 1 }
|
52
|
+
sleep(1.01)
|
53
|
+
p result
|
54
|
+
|
55
|
+
=> 10
|
56
|
+
|
57
|
+
How about passing data to your block:
|
58
|
+
|
59
|
+
require 'actiontimer'
|
60
|
+
data = :foobar
|
61
|
+
timer = ActionTimer::Timer.new
|
62
|
+
timer.add(0.01, false, data){|x| puts "Data: #{x}" }
|
63
|
+
data = :fubar
|
64
|
+
p data
|
65
|
+
sleep(0.011)
|
66
|
+
p data
|
67
|
+
|
68
|
+
=>
|
69
|
+
:fubar
|
70
|
+
Data: foobar
|
71
|
+
:fubar
|
72
|
+
|
73
|
+
Or maybe you don't want the timer to start right away:
|
74
|
+
|
75
|
+
require 'actiontimer'
|
76
|
+
timer = ActionTimer::Timer.new(:auto_start => false)
|
77
|
+
output = 0
|
78
|
+
timer.add(0.1){ output += 1 }
|
79
|
+
sleep(1)
|
80
|
+
p output
|
81
|
+
timer.start
|
82
|
+
sleep(1.01)
|
83
|
+
p output
|
84
|
+
|
85
|
+
=>
|
86
|
+
0
|
87
|
+
10
|
88
|
+
|
89
|
+
What if you want to add multiple actions at one time? We can do this:
|
90
|
+
|
91
|
+
require 'actiontimer'
|
92
|
+
timer = ActionTimer::Timer.new
|
93
|
+
result = 0
|
94
|
+
actions = []
|
95
|
+
actions << ActionTimer::Action.new(@timer, 0.1){ result += 1}
|
96
|
+
actions << ActionTimer::Action.new(@timer, 0.2){ result += 1}
|
97
|
+
actions << ActionTimer::Action.new(@timer, 0.3){ result += 1}
|
98
|
+
timer.mass_add(actions)
|
99
|
+
sleep(0.41)
|
100
|
+
p result
|
101
|
+
|
102
|
+
=> 7
|
103
|
+
|
104
|
+
== Last remarks
|
105
|
+
|
106
|
+
If you find any bugs, please report them through {github}[http://github.com/spox/actiontimer/issues]. If you are in need of any help, you can generally find me on DALnet and Freenode.
|
107
|
+
|
108
|
+
== License
|
28
109
|
|
29
|
-
|
30
|
-
|
31
|
-
2009-04-13 17:41:39 -0700: Main loop that sleeps for 5 seconds
|
32
|
-
2009-04-13 17:41:44 -0700: Main loop that sleeps for 5 seconds
|
33
|
-
2009-04-13 17:41:49 -0700: This is timed every 10 seconds
|
34
|
-
2009-04-13 17:41:49 -0700: Main loop that sleeps for 5 seconds
|
35
|
-
2009-04-13 17:41:54 -0700: This is timed every 15 seconds
|
36
|
-
2009-04-13 17:41:54 -0700: Main loop that sleeps for 5 seconds
|
37
|
-
2009-04-13 17:41:59 -0700: This is timed every 10 seconds
|
38
|
-
2009-04-13 17:41:59 -0700: Main loop that sleeps for 5 seconds
|
39
|
-
2009-04-13 17:42:04 -0700: Main loop that sleeps for 5 seconds
|
40
|
-
2009-04-13 17:42:09 -0700: This is timed every 10 seconds
|
41
|
-
2009-04-13 17:42:09 -0700: This is timed every 15 seconds
|
42
|
-
2009-04-13 17:42:09 -0700: Main loop that sleeps for 5 seconds
|
110
|
+
ActionPool is licensed under the LGPLv3
|
111
|
+
Copyright (c) 2009 spox <spox@modspox.com>
|
data/actiontimer.gemspec
CHANGED
@@ -2,7 +2,7 @@ spec = Gem::Specification.new do |s|
|
|
2
2
|
s.name = 'ActionTimer'
|
3
3
|
s.author = 'spox'
|
4
4
|
s.email = 'spox@modspox.com'
|
5
|
-
s.version = '0.1.
|
5
|
+
s.version = '0.1.1'
|
6
6
|
s.summary = 'Simple timer for a complex world'
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
8
|
s.has_rdoc = true
|
@@ -14,4 +14,4 @@ spec = Gem::Specification.new do |s|
|
|
14
14
|
s.required_ruby_version = '>= 1.8.6'
|
15
15
|
s.homepage = 'http://github.com/spox/actiontimer'
|
16
16
|
s.description = 'ActionTimer is a simple timer for recurring actions. It supports single and recurring actions with an easy to use API.'
|
17
|
-
end
|
17
|
+
end
|
data/lib/actiontimer/Timer.rb
CHANGED
data/test
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'actiontimer'
|
2
|
+
timer = ActionTimer::Timer.new
|
3
|
+
result = 0
|
4
|
+
actions = []
|
5
|
+
actions << ActionTimer::Action.new(@timer, 0.1){ result += 1}
|
6
|
+
actions << ActionTimer::Action.new(@timer, 0.2){ result += 1}
|
7
|
+
actions << ActionTimer::Action.new(@timer, 0.3){ result += 1}
|
8
|
+
timer.mass_add(actions)
|
9
|
+
sleep(0.41)
|
10
|
+
p result
|
11
|
+
|
data/tests/run_tests.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path("#{__FILE__}/../../lib"))
|
2
|
+
|
1
3
|
require 'test/unit'
|
2
4
|
require 'actiontimer'
|
3
5
|
|
@@ -25,6 +27,15 @@ class TimerTests < Test::Unit::TestCase
|
|
25
27
|
@timer.stop
|
26
28
|
assert(!@timer.running?)
|
27
29
|
end
|
30
|
+
|
31
|
+
# Check that a value 0 < t < 1 works
|
32
|
+
# as expected
|
33
|
+
def test_float
|
34
|
+
result = 0
|
35
|
+
@timer.add(0.1){ result += 1 }
|
36
|
+
sleep(1.01)
|
37
|
+
assert_equal(10, result)
|
38
|
+
end
|
28
39
|
|
29
40
|
# Check that a single iterative action is only
|
30
41
|
# completed once
|
@@ -44,7 +55,7 @@ class TimerTests < Test::Unit::TestCase
|
|
44
55
|
@timer.pause
|
45
56
|
sleep(2)
|
46
57
|
@timer.start
|
47
|
-
sleep(2
|
58
|
+
sleep(2)
|
48
59
|
assert_equal(5, result)
|
49
60
|
end
|
50
61
|
|
@@ -131,4 +142,4 @@ class TimerTests < Test::Unit::TestCase
|
|
131
142
|
sleep(3.1)
|
132
143
|
assert_equal(result, 3)
|
133
144
|
end
|
134
|
-
end
|
145
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ActionTimer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- spox
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-01-05 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -33,15 +33,16 @@ extra_rdoc_files:
|
|
33
33
|
- LICENSE
|
34
34
|
- CHANGELOG
|
35
35
|
files:
|
36
|
-
- actiontimer.
|
37
|
-
- tests/run_tests.rb
|
38
|
-
- lib/actiontimer.rb
|
36
|
+
- lib/actiontimer/Exceptions.rb
|
39
37
|
- lib/actiontimer/Timer.rb
|
40
38
|
- lib/actiontimer/Action.rb
|
41
|
-
- lib/actiontimer
|
39
|
+
- lib/actiontimer.rb
|
40
|
+
- test
|
41
|
+
- tests/run_tests.rb
|
42
42
|
- CHANGELOG
|
43
43
|
- LICENSE
|
44
44
|
- README.rdoc
|
45
|
+
- actiontimer.gemspec
|
45
46
|
has_rdoc: true
|
46
47
|
homepage: http://github.com/spox/actiontimer
|
47
48
|
licenses: []
|