lps 0.1.0 → 0.1.1
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.
- data/README.md +7 -0
- data/lib/lps.rb +31 -7
- data/lib/lps/version.rb +1 -1
- data/test/test_lps.rb +11 -0
- metadata +25 -9
data/README.md
CHANGED
@@ -29,11 +29,18 @@ LPS.freq(10).while { Time.now - now < 10 }.loop do
|
|
29
29
|
# do something
|
30
30
|
end
|
31
31
|
|
32
|
+
|
32
33
|
# - Loops 10 times per second
|
33
34
|
# - Loops indefinitely
|
34
35
|
LPS.freq(10).loop do
|
35
36
|
# do something
|
36
37
|
end
|
38
|
+
|
39
|
+
|
40
|
+
# Every 0.1 second
|
41
|
+
LPS.interval(0.1).loop do
|
42
|
+
# do something
|
43
|
+
end
|
37
44
|
```
|
38
45
|
|
39
46
|
Breaking out of the loop
|
data/lib/lps.rb
CHANGED
@@ -1,22 +1,43 @@
|
|
1
1
|
require "lps/version"
|
2
2
|
|
3
3
|
class LPS
|
4
|
+
# @param [Numeric] freq Frequency of loop execution (loops/sec)
|
5
|
+
# @return [LPS]
|
4
6
|
def self.freq freq
|
5
|
-
LPS.new
|
7
|
+
LPS.new.freq freq
|
6
8
|
end
|
7
9
|
|
10
|
+
# @param [Numeric] intv Loop execution interval
|
11
|
+
# @return [LPS]
|
12
|
+
def self.interval intv
|
13
|
+
LPS.new.interval intv
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param [Proc] &cond Loop condition
|
17
|
+
# @return [LPS]
|
8
18
|
def self.while &cond
|
9
|
-
LPS.new
|
19
|
+
LPS.new.while &cond
|
10
20
|
end
|
11
21
|
|
22
|
+
# @param [Numeric] freq Frequency of loop execution (loops/sec)
|
23
|
+
# @return [LPS]
|
12
24
|
def freq freq
|
13
25
|
LPS.new(:freq => freq, :cond => @cond)
|
14
26
|
end
|
15
27
|
|
28
|
+
# @param [Numeric] intv Loop execution interval
|
29
|
+
# @return [LPS]
|
30
|
+
def interval intv
|
31
|
+
freq(intv == 0 ? nil : (1.0 / intv))
|
32
|
+
end
|
33
|
+
|
34
|
+
# @param [Proc] &cond Loop condition
|
35
|
+
# @return [LPS]
|
16
36
|
def while &cond
|
17
37
|
LPS.new(:freq => @freq, :cond => cond)
|
18
38
|
end
|
19
39
|
|
40
|
+
# @param [Proc] &block Loop
|
20
41
|
def loop &block
|
21
42
|
ret = nil
|
22
43
|
if @freq.nil?
|
@@ -44,17 +65,20 @@ class LPS
|
|
44
65
|
ret
|
45
66
|
end
|
46
67
|
|
68
|
+
# @param [Hash] opts Options Hash.
|
69
|
+
# @option opts [Numeric] :freq Frequency of loop execution (loops/sec)
|
70
|
+
# @option opts [#call] :cond Loop condition
|
47
71
|
def initialize opts = {}
|
48
|
-
raise ArgumentError
|
72
|
+
raise ArgumentError, 'Not a Hash' unless opts.is_a?(Hash)
|
49
73
|
|
50
74
|
@freq = opts[:freq]
|
51
|
-
raise ArgumentError
|
52
|
-
|
75
|
+
raise ArgumentError,
|
76
|
+
'Frequency must be a positive number (or nil)' unless
|
53
77
|
@freq.nil? || (@freq.is_a?(Numeric) && @freq > 0)
|
54
78
|
|
55
79
|
@cond = opts[:cond] || proc { true }
|
56
|
-
raise ArgumentError
|
57
|
-
@cond.
|
80
|
+
raise ArgumentError, 'Invalid condition block' unless
|
81
|
+
@cond.respond_to?(:call)
|
58
82
|
end
|
59
83
|
end
|
60
84
|
|
data/lib/lps/version.rb
CHANGED
data/test/test_lps.rb
CHANGED
@@ -66,5 +66,16 @@ class TestLPS < Test::Unit::TestCase
|
|
66
66
|
puts [ps, cnt].join ' => '
|
67
67
|
end
|
68
68
|
end
|
69
|
+
|
70
|
+
def test_lps_interval
|
71
|
+
20.times.map { |i| 1 << i }.each do |ps|
|
72
|
+
cnt = 0
|
73
|
+
|
74
|
+
now = Time.now
|
75
|
+
LPS.interval(1.0 / ps).while { Time.now - now <= 1 }.loop { cnt += 1 }
|
76
|
+
|
77
|
+
puts [ps, cnt].join ' => '
|
78
|
+
end
|
79
|
+
end
|
69
80
|
end
|
70
81
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: test-unit
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: guard
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: guard-test
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,7 +53,12 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
description: Rate-controlled loop execution
|
48
63
|
email:
|
49
64
|
- junegunn.c@gmail.com
|
@@ -81,9 +96,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
96
|
version: '0'
|
82
97
|
requirements: []
|
83
98
|
rubyforge_project:
|
84
|
-
rubygems_version: 1.8.
|
99
|
+
rubygems_version: 1.8.24
|
85
100
|
signing_key:
|
86
101
|
specification_version: 3
|
87
102
|
summary: Rate-controlled loop execution
|
88
103
|
test_files:
|
89
104
|
- test/test_lps.rb
|
105
|
+
has_rdoc:
|