atdo 0.4 → 0.5
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 +4 -4
- data/README.md +42 -2
- data/lib/atdo.rb +8 -1
- data/test/test-atdo.rb +11 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce5b3c549e91ce0834c69acc4becba2b11e5bb98
|
4
|
+
data.tar.gz: 78eba666d55525e0f22f7932f618f4cf1dbad4c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ec3c9c9c67d364f9f1b054357a21c33bd8171ef862b33ef6dcfe9f0759e719ec77646d63cba853508da2cacfb18e0a85b0ead6aa05c227339148792a4a2c4be
|
7
|
+
data.tar.gz: 5e8b2d638380995afee556a3aa4459c89791bf2f66bebdd648c86d9524f1371de01f7c2aa32f9c666fe084f414f9663243c7a6ee01ca65e99ff4533c25f96166
|
data/README.md
CHANGED
@@ -1,4 +1,44 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
atdo
|
2
|
+
====
|
3
3
|
|
4
4
|
At time, do code. That is all.
|
5
|
+
|
6
|
+
Oh, ok, if you insist, here's a little example:
|
7
|
+
|
8
|
+
```ruby
|
9
|
+
require 'atdo'
|
10
|
+
|
11
|
+
scheduler = AtDo.new
|
12
|
+
scheduler.at Time.now + 2 do
|
13
|
+
puts "hello"
|
14
|
+
end
|
15
|
+
scheduler.at Time.now + 2 do
|
16
|
+
puts "world"
|
17
|
+
end
|
18
|
+
sleep 3
|
19
|
+
```
|
20
|
+
|
21
|
+
And with rbtree storage instead of array:
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
require 'atdo'
|
25
|
+
require 'rbtree'
|
26
|
+
|
27
|
+
scheduler = AtDo.new storage: MultiRBTree
|
28
|
+
scheduler.at Time.now + 2 do
|
29
|
+
puts "hello"
|
30
|
+
end
|
31
|
+
scheduler.at Time.now + 2 do
|
32
|
+
puts "world"
|
33
|
+
end
|
34
|
+
sleep 3
|
35
|
+
```
|
36
|
+
|
37
|
+
Both of these output
|
38
|
+
|
39
|
+
hello
|
40
|
+
world
|
41
|
+
|
42
|
+
See the unit tests for more examples.
|
43
|
+
|
44
|
+
The rbtree option is better for larger lists of tasks, especially with random inserts.
|
data/lib/atdo.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'thread'
|
2
2
|
|
3
3
|
class AtDo
|
4
|
-
VERSION = "0.
|
4
|
+
VERSION = "0.5"
|
5
5
|
|
6
6
|
# Storage classes known to work: Array (default), MultiRBTree.
|
7
7
|
def initialize storage: Array
|
@@ -11,6 +11,7 @@ class AtDo
|
|
11
11
|
@mon = Monitor.new
|
12
12
|
@cvar = @mon.new_cond
|
13
13
|
@thread = nil
|
14
|
+
@t0 = Time.now
|
14
15
|
end
|
15
16
|
|
16
17
|
def stop
|
@@ -23,8 +24,13 @@ class AtDo
|
|
23
24
|
@thread.kill if @thread
|
24
25
|
end
|
25
26
|
|
27
|
+
def wait
|
28
|
+
@thread.join
|
29
|
+
end
|
30
|
+
|
26
31
|
def at time, &action
|
27
32
|
thread
|
33
|
+
time < @t0
|
28
34
|
@mon.synchronize do
|
29
35
|
if @sorted
|
30
36
|
@events[time] = action
|
@@ -40,6 +46,7 @@ class AtDo
|
|
40
46
|
|
41
47
|
def thread
|
42
48
|
@thread ||= Thread.new do
|
49
|
+
Thread.current.abort_on_exception = true
|
43
50
|
@mon.synchronize do
|
44
51
|
loop do
|
45
52
|
duration =
|
data/test/test-atdo.rb
CHANGED
@@ -45,7 +45,7 @@ module AtDoTests
|
|
45
45
|
q.pop
|
46
46
|
end
|
47
47
|
|
48
|
-
def
|
48
|
+
def test_at_with_no_events
|
49
49
|
q = Queue.new
|
50
50
|
@s.at Time.now + 0.1 do
|
51
51
|
q << true
|
@@ -65,7 +65,7 @@ module AtDoTests
|
|
65
65
|
assert_equal "sleep", @s.thread.status
|
66
66
|
end
|
67
67
|
|
68
|
-
def
|
68
|
+
def test_at_negative
|
69
69
|
q = Queue.new
|
70
70
|
@s.at Time.now - 1 do
|
71
71
|
q << true
|
@@ -76,6 +76,15 @@ module AtDoTests
|
|
76
76
|
assert_empty events
|
77
77
|
assert_equal "sleep", @s.thread.status
|
78
78
|
end
|
79
|
+
|
80
|
+
def test_incomparable
|
81
|
+
assert_raises ArgumentError do
|
82
|
+
@s.at(1) {}
|
83
|
+
end
|
84
|
+
assert_raises ArgumentError do
|
85
|
+
@s.at("foo") {}
|
86
|
+
end
|
87
|
+
end
|
79
88
|
end
|
80
89
|
|
81
90
|
class TestAtDo < Minitest::Test
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atdo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.5'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel VanderWerf
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: At time, do code.
|
14
14
|
email: vjoel@users.sourceforge.net
|