tty-prompt 0.18.1 → 0.19.0
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/CHANGELOG.md +23 -0
- data/README.md +174 -63
- data/Rakefile +2 -2
- data/examples/ask_blank.rb +9 -0
- data/examples/enum_select_disabled.rb +1 -1
- data/examples/enum_select_paged.rb +1 -1
- data/examples/expand_auto.rb +29 -0
- data/examples/mask.rb +1 -1
- data/examples/multi_select.rb +1 -1
- data/examples/multi_select_disabled_paged.rb +22 -0
- data/examples/multi_select_paged.rb +1 -1
- data/examples/select_disabled_paged.rb +22 -0
- data/examples/select_paginated.rb +1 -1
- data/lib/tty/prompt.rb +46 -10
- data/lib/tty/prompt/{enum_paginator.rb → block_paginator.rb} +19 -18
- data/lib/tty/prompt/choice.rb +1 -3
- data/lib/tty/prompt/enum_list.rb +31 -9
- data/lib/tty/prompt/expander.rb +19 -1
- data/lib/tty/prompt/keypress.rb +30 -35
- data/lib/tty/prompt/list.rb +112 -40
- data/lib/tty/prompt/mask_question.rb +2 -3
- data/lib/tty/prompt/multi_list.rb +36 -12
- data/lib/tty/prompt/paginator.rb +37 -25
- data/lib/tty/prompt/question.rb +29 -5
- data/lib/tty/prompt/slider.rb +16 -8
- data/lib/tty/prompt/symbols.rb +30 -6
- data/lib/tty/prompt/timer.rb +75 -0
- data/lib/tty/prompt/version.rb +1 -1
- data/spec/spec_helper.rb +18 -2
- data/spec/unit/ask_spec.rb +45 -4
- data/spec/unit/{enum_paginator_spec.rb → block_paginator_spec.rb} +14 -5
- data/spec/unit/choice/from_spec.rb +16 -0
- data/spec/unit/enum_select_spec.rb +104 -32
- data/spec/unit/expand_spec.rb +104 -12
- data/spec/unit/keypress_spec.rb +2 -8
- data/spec/unit/mask_spec.rb +9 -1
- data/spec/unit/multi_select_spec.rb +348 -118
- data/spec/unit/paginator_spec.rb +29 -10
- data/spec/unit/select_spec.rb +390 -108
- data/spec/unit/slider_spec.rb +48 -6
- data/spec/unit/timer_spec.rb +29 -0
- data/tty-prompt.gemspec +4 -6
- metadata +17 -46
- data/lib/tty/prompt/timeout.rb +0 -78
data/spec/unit/slider_spec.rb
CHANGED
@@ -13,7 +13,7 @@ RSpec.describe TTY::Prompt, '#slider' do
|
|
13
13
|
expect(prompt.output.string).to eq([
|
14
14
|
"\e[?25lWhat size? ",
|
15
15
|
symbols[:line] * 6,
|
16
|
-
"\e[32m#{symbols[:
|
16
|
+
"\e[32m#{symbols[:bullet]}\e[0m",
|
17
17
|
"#{symbols[:line] * 5} 44",
|
18
18
|
"\n\e[90m(Use arrow keys, press Enter to select)\e[0m",
|
19
19
|
"\e[2K\e[1G\e[1A\e[2K\e[1G",
|
@@ -28,7 +28,7 @@ RSpec.describe TTY::Prompt, '#slider' do
|
|
28
28
|
expect(prompt.output.string).to eq([
|
29
29
|
"\e[?25lWhat size? ",
|
30
30
|
symbols[:line] * 3,
|
31
|
-
"\e[32m#{symbols[:
|
31
|
+
"\e[32m#{symbols[:bullet]}\e[0m",
|
32
32
|
"#{symbols[:line] * 8} 38",
|
33
33
|
"\n\e[90m(Use arrow keys, press Enter to select)\e[0m",
|
34
34
|
"\e[2K\e[1G\e[1A\e[2K\e[1G",
|
@@ -50,7 +50,7 @@ RSpec.describe TTY::Prompt, '#slider' do
|
|
50
50
|
expect(prompt.output.string).to eq([
|
51
51
|
"\e[?25lWhat size? ",
|
52
52
|
symbols[:pipe] + symbols[:line] * 3,
|
53
|
-
"\e[32m#{symbols[:
|
53
|
+
"\e[32m#{symbols[:bullet]}\e[0m",
|
54
54
|
"#{symbols[:line] * 7 + symbols[:pipe]} 6%",
|
55
55
|
"\n\e[90m(Use arrow keys, press Enter to select)\e[0m",
|
56
56
|
"\e[2K\e[1G\e[1A\e[2K\e[1G",
|
@@ -66,7 +66,7 @@ RSpec.describe TTY::Prompt, '#slider' do
|
|
66
66
|
expect(prompt.output.string).to eq([
|
67
67
|
"\e[?25lWhat size? ",
|
68
68
|
symbols[:line] * 5,
|
69
|
-
"\e[31m#{symbols[:
|
69
|
+
"\e[31m#{symbols[:bullet]}\e[0m",
|
70
70
|
"#{symbols[:line] * 5} 5",
|
71
71
|
"\n\e[36m(Use arrow keys, press Enter to select)\e[0m",
|
72
72
|
"\e[2K\e[1G\e[1A\e[2K\e[1G",
|
@@ -87,14 +87,56 @@ RSpec.describe TTY::Prompt, '#slider' do
|
|
87
87
|
expect(prompt.output.string).to eq([
|
88
88
|
"\e[?25lWhat size? ",
|
89
89
|
symbols[:line] * 10,
|
90
|
-
"\e[32m#{symbols[:
|
90
|
+
"\e[32m#{symbols[:bullet]}\e[0m 10",
|
91
91
|
"\n\e[90m(Use arrow keys, press Enter to select)\e[0m",
|
92
92
|
"\e[2K\e[1G\e[1A\e[2K\e[1G",
|
93
93
|
"What size? ",
|
94
94
|
symbols[:line] * 10,
|
95
|
-
"\e[32m#{symbols[:
|
95
|
+
"\e[32m#{symbols[:bullet]}\e[0m 10",
|
96
96
|
"\e[2K\e[1G",
|
97
97
|
"What size? \e[32m10\e[0m\n\e[?25h"
|
98
98
|
].join)
|
99
99
|
end
|
100
|
+
|
101
|
+
it "changes all display symbols" do
|
102
|
+
prompt = TTY::TestPrompt.new(symbols: {
|
103
|
+
bullet: 'x',
|
104
|
+
line: '_'
|
105
|
+
})
|
106
|
+
prompt.input << "\r"
|
107
|
+
prompt.input.rewind
|
108
|
+
|
109
|
+
expect(prompt.slider('What size?', min: 32, max: 54, step: 2)).to eq(44)
|
110
|
+
|
111
|
+
expect(prompt.output.string).to eq([
|
112
|
+
"\e[?25lWhat size? ",
|
113
|
+
'_' * 6,
|
114
|
+
"\e[32mx\e[0m",
|
115
|
+
"#{'_' * 5} 44",
|
116
|
+
"\n\e[90m(Use arrow keys, press Enter to select)\e[0m",
|
117
|
+
"\e[2K\e[1G\e[1A\e[2K\e[1G",
|
118
|
+
"What size? \e[32m44\e[0m\n\e[?25h"
|
119
|
+
].join)
|
120
|
+
end
|
121
|
+
|
122
|
+
it "changes all display symbols per instance" do
|
123
|
+
prompt = TTY::TestPrompt.new
|
124
|
+
prompt.input << "\r"
|
125
|
+
prompt.input.rewind
|
126
|
+
|
127
|
+
answer = prompt.slider('What size?', min: 32, max: 54, step: 2) do |range|
|
128
|
+
range.symbols bullet: 'x', line: '_'
|
129
|
+
end
|
130
|
+
|
131
|
+
expect(answer).to eq(44)
|
132
|
+
expect(prompt.output.string).to eq([
|
133
|
+
"\e[?25lWhat size? ",
|
134
|
+
'_' * 6,
|
135
|
+
"\e[32mx\e[0m",
|
136
|
+
"#{'_' * 5} 44",
|
137
|
+
"\n\e[90m(Use arrow keys, press Enter to select)\e[0m",
|
138
|
+
"\e[2K\e[1G\e[1A\e[2K\e[1G",
|
139
|
+
"What size? \e[32m44\e[0m\n\e[?25h"
|
140
|
+
].join)
|
141
|
+
end
|
100
142
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe TTY::Prompt::Timer do
|
4
|
+
it "times out loop execution" do
|
5
|
+
timer = TTY::Prompt::Timer.new(0.03, 0.01)
|
6
|
+
yielded = []
|
7
|
+
|
8
|
+
timer.while_remaining do |remaining|
|
9
|
+
expect(remaining).to be_within(0.1).of(timer.duration - yielded.size * 0.01)
|
10
|
+
yielded << remaining
|
11
|
+
sleep(0.01)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it "registers a tick event" do
|
16
|
+
timer = TTY::Prompt::Timer.new(0.03, 0.01)
|
17
|
+
yielded = []
|
18
|
+
|
19
|
+
timer.on_tick do |time|
|
20
|
+
yielded << time
|
21
|
+
end
|
22
|
+
|
23
|
+
timer.while_remaining do
|
24
|
+
# busy work
|
25
|
+
end
|
26
|
+
|
27
|
+
expect(yielded.size).to be >= 2
|
28
|
+
end
|
29
|
+
end
|
data/tty-prompt.gemspec
CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |spec|
|
|
6
6
|
spec.name = "tty-prompt"
|
7
7
|
spec.version = TTY::Prompt::VERSION
|
8
8
|
spec.authors = ["Piotr Murach"]
|
9
|
-
spec.email = [""]
|
9
|
+
spec.email = ["me@piotrmurach.com"]
|
10
10
|
spec.summary = %q{A beautiful and powerful interactive command line prompt.}
|
11
11
|
spec.description = %q{A beautiful and powerful interactive command line prompt with a robust API for getting and validating complex inputs.}
|
12
12
|
spec.homepage = "https://piotrmurach.github.io/tty"
|
@@ -21,13 +21,11 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.required_ruby_version = '>= 2.0.0'
|
23
23
|
|
24
|
-
spec.add_dependency 'necromancer', '~> 0.
|
24
|
+
spec.add_dependency 'necromancer', '~> 0.5.0'
|
25
25
|
spec.add_dependency 'pastel', '~> 0.7.0'
|
26
|
-
spec.add_dependency '
|
27
|
-
spec.add_dependency 'tty-cursor', '~> 0.6.0'
|
28
|
-
spec.add_dependency 'tty-reader', '~> 0.5.0'
|
26
|
+
spec.add_dependency 'tty-reader', '~> 0.6.0'
|
29
27
|
|
30
|
-
spec.add_development_dependency 'bundler', '>= 1.5.0'
|
28
|
+
spec.add_development_dependency 'bundler', '>= 1.5.0'
|
31
29
|
spec.add_development_dependency 'rake'
|
32
30
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
33
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tty-prompt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.19.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Murach
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: necromancer
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.5.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.5.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: pastel
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,21 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.7.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '4.0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '4.0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: tty-cursor
|
42
|
+
name: tty-reader
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
45
|
- - "~>"
|
@@ -66,20 +52,6 @@ dependencies:
|
|
66
52
|
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
54
|
version: 0.6.0
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: tty-reader
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 0.5.0
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 0.5.0
|
83
55
|
- !ruby/object:Gem::Dependency
|
84
56
|
name: bundler
|
85
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,9 +59,6 @@ dependencies:
|
|
87
59
|
- - ">="
|
88
60
|
- !ruby/object:Gem::Version
|
89
61
|
version: 1.5.0
|
90
|
-
- - "<"
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
version: '2.0'
|
93
62
|
type: :development
|
94
63
|
prerelease: false
|
95
64
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -97,9 +66,6 @@ dependencies:
|
|
97
66
|
- - ">="
|
98
67
|
- !ruby/object:Gem::Version
|
99
68
|
version: 1.5.0
|
100
|
-
- - "<"
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: '2.0'
|
103
69
|
- !ruby/object:Gem::Dependency
|
104
70
|
name: rake
|
105
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -131,7 +97,7 @@ dependencies:
|
|
131
97
|
description: A beautiful and powerful interactive command line prompt with a robust
|
132
98
|
API for getting and validating complex inputs.
|
133
99
|
email:
|
134
|
-
-
|
100
|
+
- me@piotrmurach.com
|
135
101
|
executables: []
|
136
102
|
extensions: []
|
137
103
|
extra_rdoc_files: []
|
@@ -141,6 +107,7 @@ files:
|
|
141
107
|
- README.md
|
142
108
|
- Rakefile
|
143
109
|
- examples/ask.rb
|
110
|
+
- examples/ask_blank.rb
|
144
111
|
- examples/ask_valid.rb
|
145
112
|
- examples/collect.rb
|
146
113
|
- examples/echo.rb
|
@@ -149,6 +116,7 @@ files:
|
|
149
116
|
- examples/enum_select_paged.rb
|
150
117
|
- examples/enum_select_wrapped.rb
|
151
118
|
- examples/expand.rb
|
119
|
+
- examples/expand_auto.rb
|
152
120
|
- examples/in.rb
|
153
121
|
- examples/inputs.rb
|
154
122
|
- examples/key_events.rb
|
@@ -156,12 +124,14 @@ files:
|
|
156
124
|
- examples/mask.rb
|
157
125
|
- examples/multi_select.rb
|
158
126
|
- examples/multi_select_disabled.rb
|
127
|
+
- examples/multi_select_disabled_paged.rb
|
159
128
|
- examples/multi_select_paged.rb
|
160
129
|
- examples/multi_select_wrapped.rb
|
161
130
|
- examples/multiline.rb
|
162
131
|
- examples/pause.rb
|
163
132
|
- examples/select.rb
|
164
133
|
- examples/select_disabled.rb
|
134
|
+
- examples/select_disabled_paged.rb
|
165
135
|
- examples/select_enum.rb
|
166
136
|
- examples/select_filtered.rb
|
167
137
|
- examples/select_paginated.rb
|
@@ -172,6 +142,7 @@ files:
|
|
172
142
|
- lib/tty-prompt.rb
|
173
143
|
- lib/tty/prompt.rb
|
174
144
|
- lib/tty/prompt/answers_collector.rb
|
145
|
+
- lib/tty/prompt/block_paginator.rb
|
175
146
|
- lib/tty/prompt/choice.rb
|
176
147
|
- lib/tty/prompt/choices.rb
|
177
148
|
- lib/tty/prompt/confirm_question.rb
|
@@ -180,7 +151,6 @@ files:
|
|
180
151
|
- lib/tty/prompt/converters.rb
|
181
152
|
- lib/tty/prompt/distance.rb
|
182
153
|
- lib/tty/prompt/enum_list.rb
|
183
|
-
- lib/tty/prompt/enum_paginator.rb
|
184
154
|
- lib/tty/prompt/evaluator.rb
|
185
155
|
- lib/tty/prompt/expander.rb
|
186
156
|
- lib/tty/prompt/keypress.rb
|
@@ -199,12 +169,13 @@ files:
|
|
199
169
|
- lib/tty/prompt/statement.rb
|
200
170
|
- lib/tty/prompt/suggestion.rb
|
201
171
|
- lib/tty/prompt/symbols.rb
|
202
|
-
- lib/tty/prompt/
|
172
|
+
- lib/tty/prompt/timer.rb
|
203
173
|
- lib/tty/prompt/utils.rb
|
204
174
|
- lib/tty/prompt/version.rb
|
205
175
|
- lib/tty/test_prompt.rb
|
206
176
|
- spec/spec_helper.rb
|
207
177
|
- spec/unit/ask_spec.rb
|
178
|
+
- spec/unit/block_paginator_spec.rb
|
208
179
|
- spec/unit/choice/eql_spec.rb
|
209
180
|
- spec/unit/choice/from_spec.rb
|
210
181
|
- spec/unit/choices/add_spec.rb
|
@@ -225,7 +196,6 @@ files:
|
|
225
196
|
- spec/unit/converters/convert_string_spec.rb
|
226
197
|
- spec/unit/converters/on_error_spec.rb
|
227
198
|
- spec/unit/distance/distance_spec.rb
|
228
|
-
- spec/unit/enum_paginator_spec.rb
|
229
199
|
- spec/unit/enum_select_spec.rb
|
230
200
|
- spec/unit/error_spec.rb
|
231
201
|
- spec/unit/evaluator_spec.rb
|
@@ -257,6 +227,7 @@ files:
|
|
257
227
|
- spec/unit/statement/initialize_spec.rb
|
258
228
|
- spec/unit/subscribe_spec.rb
|
259
229
|
- spec/unit/suggest_spec.rb
|
230
|
+
- spec/unit/timer_spec.rb
|
260
231
|
- spec/unit/warn_spec.rb
|
261
232
|
- spec/unit/yes_no_spec.rb
|
262
233
|
- tasks/console.rake
|
@@ -282,14 +253,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
282
253
|
- !ruby/object:Gem::Version
|
283
254
|
version: '0'
|
284
255
|
requirements: []
|
285
|
-
|
286
|
-
rubygems_version: 2.7.3
|
256
|
+
rubygems_version: 3.0.3
|
287
257
|
signing_key:
|
288
258
|
specification_version: 4
|
289
259
|
summary: A beautiful and powerful interactive command line prompt.
|
290
260
|
test_files:
|
291
261
|
- spec/spec_helper.rb
|
292
262
|
- spec/unit/ask_spec.rb
|
263
|
+
- spec/unit/block_paginator_spec.rb
|
293
264
|
- spec/unit/choice/eql_spec.rb
|
294
265
|
- spec/unit/choice/from_spec.rb
|
295
266
|
- spec/unit/choices/add_spec.rb
|
@@ -310,7 +281,6 @@ test_files:
|
|
310
281
|
- spec/unit/converters/convert_string_spec.rb
|
311
282
|
- spec/unit/converters/on_error_spec.rb
|
312
283
|
- spec/unit/distance/distance_spec.rb
|
313
|
-
- spec/unit/enum_paginator_spec.rb
|
314
284
|
- spec/unit/enum_select_spec.rb
|
315
285
|
- spec/unit/error_spec.rb
|
316
286
|
- spec/unit/evaluator_spec.rb
|
@@ -342,5 +312,6 @@ test_files:
|
|
342
312
|
- spec/unit/statement/initialize_spec.rb
|
343
313
|
- spec/unit/subscribe_spec.rb
|
344
314
|
- spec/unit/suggest_spec.rb
|
315
|
+
- spec/unit/timer_spec.rb
|
345
316
|
- spec/unit/warn_spec.rb
|
346
317
|
- spec/unit/yes_no_spec.rb
|
data/lib/tty/prompt/timeout.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'timers'
|
4
|
-
|
5
|
-
module TTY
|
6
|
-
class Prompt
|
7
|
-
class Timeout
|
8
|
-
# A class responsible for measuring interval
|
9
|
-
#
|
10
|
-
# @api private
|
11
|
-
def initialize(options = {})
|
12
|
-
@interval_handler = options.fetch(:interval_handler) { proc {} }
|
13
|
-
@lock = Mutex.new
|
14
|
-
@running = true
|
15
|
-
@timers = Timers::Group.new
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.timeout(time, interval, &block)
|
19
|
-
(@scheduler ||= new).timeout(time, interval, &block)
|
20
|
-
end
|
21
|
-
|
22
|
-
# Evalute block and time it
|
23
|
-
#
|
24
|
-
# @param [Float] time
|
25
|
-
# the time by which to stop
|
26
|
-
# @param [Float] interval
|
27
|
-
# the interval time for each tick
|
28
|
-
#
|
29
|
-
# @api public
|
30
|
-
def timeout(time, interval, &job)
|
31
|
-
input_thread = Thread.new { job.() }
|
32
|
-
timing_thread = measure_intervals(time, interval, input_thread)
|
33
|
-
[input_thread, timing_thread].each(&:join)
|
34
|
-
end
|
35
|
-
|
36
|
-
# Cancel this timeout measurement
|
37
|
-
#
|
38
|
-
# @api public
|
39
|
-
def cancel
|
40
|
-
return unless @running
|
41
|
-
@running = false
|
42
|
-
end
|
43
|
-
|
44
|
-
# Measure intervals and terminate input
|
45
|
-
#
|
46
|
-
# @api private
|
47
|
-
def measure_intervals(time, interval, input_thread)
|
48
|
-
Thread.new do
|
49
|
-
Thread.current.abort_on_exception = true
|
50
|
-
start = Time.now
|
51
|
-
|
52
|
-
interval_timer = @timers.every(interval) do
|
53
|
-
runtime = Time.now - start
|
54
|
-
delta = time - runtime
|
55
|
-
if delta.round >= 0
|
56
|
-
@interval_handler.(delta.round)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
while @running
|
61
|
-
@lock.synchronize {
|
62
|
-
@timers.wait
|
63
|
-
runtime = Time.now - start
|
64
|
-
delta = time - runtime
|
65
|
-
|
66
|
-
if delta <= 0.0
|
67
|
-
@running = false
|
68
|
-
end
|
69
|
-
}
|
70
|
-
end
|
71
|
-
|
72
|
-
input_thread.terminate
|
73
|
-
interval_timer.cancel
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end # Scheduler
|
77
|
-
end # Prompt
|
78
|
-
end # TTY
|