tty-prompt 0.20.0 → 0.21.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 +11 -0
- data/README.md +29 -4
- data/lib/tty/prompt.rb +3 -3
- data/lib/tty/prompt/multi_list.rb +33 -10
- data/lib/tty/prompt/version.rb +1 -1
- metadata +11 -175
- data/Rakefile +0 -8
- data/examples/ask.rb +0 -7
- data/examples/ask_blank.rb +0 -9
- data/examples/ask_multiline.rb +0 -7
- data/examples/ask_valid.rb +0 -12
- data/examples/collect.rb +0 -21
- data/examples/echo.rb +0 -11
- data/examples/enum_select.rb +0 -7
- data/examples/enum_select_disabled.rb +0 -16
- data/examples/enum_select_paged.rb +0 -9
- data/examples/enum_select_wrapped.rb +0 -15
- data/examples/expand.rb +0 -29
- data/examples/expand_auto.rb +0 -29
- data/examples/in.rb +0 -9
- data/examples/inputs.rb +0 -10
- data/examples/key_events.rb +0 -15
- data/examples/keypress.rb +0 -9
- data/examples/mask.rb +0 -13
- data/examples/multi_select.rb +0 -8
- data/examples/multi_select_disabled.rb +0 -17
- data/examples/multi_select_disabled_paged.rb +0 -22
- data/examples/multi_select_paged.rb +0 -9
- data/examples/multi_select_wrapped.rb +0 -15
- data/examples/multiline.rb +0 -9
- data/examples/pause.rb +0 -9
- data/examples/select.rb +0 -24
- data/examples/select_disabled.rb +0 -18
- data/examples/select_disabled_paged.rb +0 -22
- data/examples/select_enum.rb +0 -8
- data/examples/select_filtered.rb +0 -11
- data/examples/select_paginated.rb +0 -11
- data/examples/select_wrapped.rb +0 -15
- data/examples/slider.rb +0 -6
- data/examples/validation.rb +0 -9
- data/examples/yes_no.rb +0 -7
- data/spec/spec_helper.rb +0 -61
- data/spec/unit/ask_spec.rb +0 -173
- data/spec/unit/block_paginator_spec.rb +0 -84
- data/spec/unit/choice/eql_spec.rb +0 -22
- data/spec/unit/choice/from_spec.rb +0 -130
- data/spec/unit/choices/add_spec.rb +0 -12
- data/spec/unit/choices/each_spec.rb +0 -13
- data/spec/unit/choices/find_by_spec.rb +0 -10
- data/spec/unit/choices/new_spec.rb +0 -10
- data/spec/unit/choices/pluck_spec.rb +0 -9
- data/spec/unit/collect_spec.rb +0 -96
- data/spec/unit/converters/convert_bool_spec.rb +0 -58
- data/spec/unit/converters/convert_char_spec.rb +0 -11
- data/spec/unit/converters/convert_custom_spec.rb +0 -14
- data/spec/unit/converters/convert_date_spec.rb +0 -34
- data/spec/unit/converters/convert_file_spec.rb +0 -18
- data/spec/unit/converters/convert_number_spec.rb +0 -39
- data/spec/unit/converters/convert_path_spec.rb +0 -15
- data/spec/unit/converters/convert_range_spec.rb +0 -22
- data/spec/unit/converters/convert_regex_spec.rb +0 -12
- data/spec/unit/converters/convert_string_spec.rb +0 -21
- data/spec/unit/converters/on_error_spec.rb +0 -9
- data/spec/unit/distance/distance_spec.rb +0 -73
- data/spec/unit/enum_select_spec.rb +0 -518
- data/spec/unit/error_spec.rb +0 -20
- data/spec/unit/evaluator_spec.rb +0 -67
- data/spec/unit/expand_spec.rb +0 -290
- data/spec/unit/keypress_spec.rb +0 -66
- data/spec/unit/mask_spec.rb +0 -140
- data/spec/unit/multi_select_spec.rb +0 -741
- data/spec/unit/multiline_spec.rb +0 -77
- data/spec/unit/new_spec.rb +0 -20
- data/spec/unit/ok_spec.rb +0 -10
- data/spec/unit/paginator_spec.rb +0 -92
- data/spec/unit/question/checks_spec.rb +0 -97
- data/spec/unit/question/default_spec.rb +0 -31
- data/spec/unit/question/echo_spec.rb +0 -38
- data/spec/unit/question/in_spec.rb +0 -115
- data/spec/unit/question/initialize_spec.rb +0 -12
- data/spec/unit/question/modifier/apply_to_spec.rb +0 -24
- data/spec/unit/question/modifier/letter_case_spec.rb +0 -41
- data/spec/unit/question/modifier/whitespace_spec.rb +0 -51
- data/spec/unit/question/modify_spec.rb +0 -41
- data/spec/unit/question/required_spec.rb +0 -92
- data/spec/unit/question/validate_spec.rb +0 -115
- data/spec/unit/question/validation/call_spec.rb +0 -31
- data/spec/unit/question/validation/coerce_spec.rb +0 -30
- data/spec/unit/result_spec.rb +0 -40
- data/spec/unit/say_spec.rb +0 -67
- data/spec/unit/select_spec.rb +0 -942
- data/spec/unit/slider_spec.rb +0 -142
- data/spec/unit/statement/initialize_spec.rb +0 -15
- data/spec/unit/subscribe_spec.rb +0 -22
- data/spec/unit/suggest_spec.rb +0 -28
- data/spec/unit/timer_spec.rb +0 -29
- data/spec/unit/warn_spec.rb +0 -21
- data/spec/unit/yes_no_spec.rb +0 -285
- data/tasks/console.rake +0 -11
- data/tasks/coverage.rake +0 -11
- data/tasks/spec.rake +0 -29
- data/tty-prompt.gemspec +0 -40
data/spec/unit/slider_spec.rb
DELETED
@@ -1,142 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt, '#slider' do
|
4
|
-
|
5
|
-
subject(:prompt) { TTY::TestPrompt.new }
|
6
|
-
|
7
|
-
let(:symbols) { TTY::Prompt::Symbols.symbols }
|
8
|
-
|
9
|
-
it "specifies ranges & step" do
|
10
|
-
prompt.input << "\r"
|
11
|
-
prompt.input.rewind
|
12
|
-
expect(prompt.slider('What size?', min: 32, max: 54, step: 2)).to eq(44)
|
13
|
-
expect(prompt.output.string).to eq([
|
14
|
-
"\e[?25lWhat size? ",
|
15
|
-
symbols[:line] * 6,
|
16
|
-
"\e[32m#{symbols[:bullet]}\e[0m",
|
17
|
-
"#{symbols[:line] * 5} 44",
|
18
|
-
"\n\e[90m(Use arrow keys, press Enter to select)\e[0m",
|
19
|
-
"\e[2K\e[1G\e[1A\e[2K\e[1G",
|
20
|
-
"What size? \e[32m44\e[0m\n\e[?25h"
|
21
|
-
].join)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "specifies default value" do
|
25
|
-
prompt.input << "\r"
|
26
|
-
prompt.input.rewind
|
27
|
-
expect(prompt.slider('What size?', min: 32, max: 54, step: 2, default: 38)).to eq(38)
|
28
|
-
expect(prompt.output.string).to eq([
|
29
|
-
"\e[?25lWhat size? ",
|
30
|
-
symbols[:line] * 3,
|
31
|
-
"\e[32m#{symbols[:bullet]}\e[0m",
|
32
|
-
"#{symbols[:line] * 8} 38",
|
33
|
-
"\n\e[90m(Use arrow keys, press Enter to select)\e[0m",
|
34
|
-
"\e[2K\e[1G\e[1A\e[2K\e[1G",
|
35
|
-
"What size? \e[32m38\e[0m\n\e[?25h"
|
36
|
-
].join)
|
37
|
-
end
|
38
|
-
|
39
|
-
it "specifies range through DSL" do
|
40
|
-
prompt.input << "\r"
|
41
|
-
prompt.input.rewind
|
42
|
-
value = prompt.slider('What size?') do |range|
|
43
|
-
range.default 6
|
44
|
-
range.min 0
|
45
|
-
range.max 20
|
46
|
-
range.step 2
|
47
|
-
range.format "|:slider| %d%%"
|
48
|
-
end
|
49
|
-
expect(value).to eq(6)
|
50
|
-
expect(prompt.output.string).to eq([
|
51
|
-
"\e[?25lWhat size? ",
|
52
|
-
symbols[:pipe] + symbols[:line] * 3,
|
53
|
-
"\e[32m#{symbols[:bullet]}\e[0m",
|
54
|
-
"#{symbols[:line] * 7 + symbols[:pipe]} 6%",
|
55
|
-
"\n\e[90m(Use arrow keys, press Enter to select)\e[0m",
|
56
|
-
"\e[2K\e[1G\e[1A\e[2K\e[1G",
|
57
|
-
"What size? \e[32m6\e[0m\n\e[?25h"
|
58
|
-
].join)
|
59
|
-
end
|
60
|
-
|
61
|
-
it "changes display colors" do
|
62
|
-
prompt.input << "\r"
|
63
|
-
prompt.input.rewind
|
64
|
-
options = {active_color: :red, help_color: :cyan}
|
65
|
-
expect(prompt.slider('What size?', options)).to eq(5)
|
66
|
-
expect(prompt.output.string).to eq([
|
67
|
-
"\e[?25lWhat size? ",
|
68
|
-
symbols[:line] * 5,
|
69
|
-
"\e[31m#{symbols[:bullet]}\e[0m",
|
70
|
-
"#{symbols[:line] * 5} 5",
|
71
|
-
"\n\e[36m(Use arrow keys, press Enter to select)\e[0m",
|
72
|
-
"\e[2K\e[1G\e[1A\e[2K\e[1G",
|
73
|
-
"What size? \e[31m5\e[0m\n\e[?25h"
|
74
|
-
].join)
|
75
|
-
end
|
76
|
-
|
77
|
-
it "doesn't allow values outside of range" do
|
78
|
-
prompt.input << "l\r"
|
79
|
-
prompt.input.rewind
|
80
|
-
prompt.on(:keypress) do |event|
|
81
|
-
if event.value = 'l'
|
82
|
-
prompt.trigger(:keyright)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
res = prompt.slider('What size?', min: 0, max: 10, step: 1, default: 10)
|
86
|
-
expect(res).to eq(10)
|
87
|
-
expect(prompt.output.string).to eq([
|
88
|
-
"\e[?25lWhat size? ",
|
89
|
-
symbols[:line] * 10,
|
90
|
-
"\e[32m#{symbols[:bullet]}\e[0m 10",
|
91
|
-
"\n\e[90m(Use arrow keys, press Enter to select)\e[0m",
|
92
|
-
"\e[2K\e[1G\e[1A\e[2K\e[1G",
|
93
|
-
"What size? ",
|
94
|
-
symbols[:line] * 10,
|
95
|
-
"\e[32m#{symbols[:bullet]}\e[0m 10",
|
96
|
-
"\e[2K\e[1G",
|
97
|
-
"What size? \e[32m10\e[0m\n\e[?25h"
|
98
|
-
].join)
|
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
|
142
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt::Statement, '#new' do
|
4
|
-
it "forces newline after the prompt message" do
|
5
|
-
prompt = TTY::TestPrompt.new
|
6
|
-
statement = described_class.new(prompt)
|
7
|
-
expect(statement.newline).to eq(true)
|
8
|
-
end
|
9
|
-
|
10
|
-
it "displays prompt message in color" do
|
11
|
-
prompt = TTY::TestPrompt.new
|
12
|
-
statement = described_class.new(prompt)
|
13
|
-
expect(statement.color).to eq(false)
|
14
|
-
end
|
15
|
-
end
|
data/spec/unit/subscribe_spec.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt, '#subscribe' do
|
4
|
-
it "subscribes to key events only for the current prompt" do
|
5
|
-
prompt = TTY::TestPrompt.new
|
6
|
-
uuid = '14c3b412-e0c5-4ff5-9cd8-25ec3f18c702'
|
7
|
-
prompt.input << "3\n#{uuid}\n"
|
8
|
-
prompt.input.rewind
|
9
|
-
keys = []
|
10
|
-
|
11
|
-
prompt.on(:keypress) do |event|
|
12
|
-
keys << :enter if event.key.name == :enter
|
13
|
-
end
|
14
|
-
|
15
|
-
letter = prompt.enum_select('Select something', ('A'..'Z').to_a)
|
16
|
-
id = prompt.ask('Request ID?')
|
17
|
-
|
18
|
-
expect(letter).to eq('C')
|
19
|
-
expect(id).to eq(uuid)
|
20
|
-
expect(keys).to eq([:enter, :enter])
|
21
|
-
end
|
22
|
-
end
|
data/spec/unit/suggest_spec.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt, '#suggest' do
|
4
|
-
let(:possible) { %w(status stage stash commit branch blame) }
|
5
|
-
|
6
|
-
subject(:prompt) { TTY::TestPrompt.new }
|
7
|
-
|
8
|
-
it 'suggests few matches' do
|
9
|
-
prompt.suggest('sta', possible)
|
10
|
-
expect(prompt.output.string).
|
11
|
-
to eql("Did you mean one of these?\n stage\n stash\n")
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'suggests a single match for one character' do
|
15
|
-
prompt.suggest('b', possible)
|
16
|
-
expect(prompt.output.string).to eql("Did you mean this?\n blame\n")
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'suggests a single match for two characters' do
|
20
|
-
prompt.suggest('co', possible)
|
21
|
-
expect(prompt.output.string).to eql("Did you mean this?\n commit\n")
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'suggests with different text and indentation' do
|
25
|
-
prompt.suggest('b', possible, indent: 4, single_text: 'Perhaps you meant?')
|
26
|
-
expect(prompt.output.string).to eql("Perhaps you meant?\n blame\n")
|
27
|
-
end
|
28
|
-
end
|
data/spec/unit/timer_spec.rb
DELETED
@@ -1,29 +0,0 @@
|
|
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/spec/unit/warn_spec.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt, '#warn' do
|
4
|
-
|
5
|
-
subject(:prompt) { TTY::TestPrompt.new }
|
6
|
-
|
7
|
-
it 'displays one message' do
|
8
|
-
prompt.warn "Careful young apprentice!"
|
9
|
-
expect(prompt.output.string).to eql "\e[33mCareful young apprentice!\e[0m\n"
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'displays many messages' do
|
13
|
-
prompt.warn "Careful there!", "It's dangerous!"
|
14
|
-
expect(prompt.output.string).to eql "\e[33mCareful there!\e[0m\n\e[33mIt's dangerous!\e[0m\n"
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'displays message with option' do
|
18
|
-
prompt.warn "Careful young apprentice!", newline: false
|
19
|
-
expect(prompt.output.string).to eql "\e[33mCareful young apprentice!\e[0m"
|
20
|
-
end
|
21
|
-
end
|
data/spec/unit/yes_no_spec.rb
DELETED
@@ -1,285 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt, 'confirmation' do
|
4
|
-
|
5
|
-
subject(:prompt) { TTY::TestPrompt.new }
|
6
|
-
|
7
|
-
context '#yes?' do
|
8
|
-
it 'agrees with question' do
|
9
|
-
prompt.input << 'yes'
|
10
|
-
prompt.input.rewind
|
11
|
-
expect(prompt.yes?("Are you a human?")).to eq(true)
|
12
|
-
expect(prompt.output.string).to eq([
|
13
|
-
"Are you a human? \e[90m(Y/n)\e[0m ",
|
14
|
-
"\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m y",
|
15
|
-
"\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m ye",
|
16
|
-
"\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m yes",
|
17
|
-
"\e[1A\e[2K\e[1G",
|
18
|
-
"Are you a human? \e[32mYes\e[0m\n"
|
19
|
-
].join)
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'disagrees with question' do
|
23
|
-
prompt.input << 'no'
|
24
|
-
prompt.input.rewind
|
25
|
-
expect(prompt.yes?("Are you a human?")).to eq(false)
|
26
|
-
expect(prompt.output.string).to eq([
|
27
|
-
"Are you a human? \e[90m(Y/n)\e[0m ",
|
28
|
-
"\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m n",
|
29
|
-
"\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m no",
|
30
|
-
"\e[1A\e[2K\e[1G",
|
31
|
-
"Are you a human? \e[32mno\e[0m\n"
|
32
|
-
].join)
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'warns about invalid entry when using defaults' do
|
36
|
-
prompt.input << "test"
|
37
|
-
prompt.input.rewind
|
38
|
-
prompt.yes?("Are you a human?")
|
39
|
-
expect(prompt.output.string).to eq([
|
40
|
-
"Are you a human? \e[90m(Y/n)\e[0m ",
|
41
|
-
"\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m t",
|
42
|
-
"\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m te",
|
43
|
-
"\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m tes",
|
44
|
-
"\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m test",
|
45
|
-
"\e[31m>>\e[0m Invalid input.\e[1A",
|
46
|
-
"\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m ",
|
47
|
-
"\e[2K\e[1G\e[1A\e[2K\e[1G",
|
48
|
-
"Are you a human? \e[32mYes\e[0m\n"
|
49
|
-
].join)
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'assumes default true' do
|
53
|
-
prompt.input << "\r"
|
54
|
-
prompt.input.rewind
|
55
|
-
expect(prompt.yes?("Are you a human?")).to eq(true)
|
56
|
-
expect(prompt.output.string).to eq([
|
57
|
-
"Are you a human? \e[90m(Y/n)\e[0m ",
|
58
|
-
"\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m \n",
|
59
|
-
"\e[1A\e[2K\e[1G",
|
60
|
-
"Are you a human? \e[32mYes\e[0m\n"
|
61
|
-
].join)
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'changes default' do
|
65
|
-
prompt.input << "\n"
|
66
|
-
prompt.input.rewind
|
67
|
-
expect(prompt.yes?("Are you a human?", default: false)).to eq(false)
|
68
|
-
expect(prompt.output.string).to eq([
|
69
|
-
"Are you a human? \e[90m(y/N)\e[0m ",
|
70
|
-
"\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m \n",
|
71
|
-
"\e[1A\e[2K\e[1G",
|
72
|
-
"Are you a human? \e[32mNo\e[0m\n"
|
73
|
-
].join)
|
74
|
-
end
|
75
|
-
|
76
|
-
it "defaults suffix and converter" do
|
77
|
-
prompt.input << "Nope\n"
|
78
|
-
prompt.input.rewind
|
79
|
-
result = prompt.yes?("Are you a human?") do |q|
|
80
|
-
q.positive 'Yup'
|
81
|
-
q.negative 'nope'
|
82
|
-
end
|
83
|
-
expect(result).to eq(false)
|
84
|
-
expect(prompt.output.string).to eq([
|
85
|
-
"Are you a human? \e[90m(Yup/nope)\e[0m ",
|
86
|
-
"\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m N",
|
87
|
-
"\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m No",
|
88
|
-
"\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m Nop",
|
89
|
-
"\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m Nope",
|
90
|
-
"\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m Nope\n",
|
91
|
-
"\e[1A\e[2K\e[1G",
|
92
|
-
"Are you a human? \e[32mnope\e[0m\n"
|
93
|
-
].join)
|
94
|
-
end
|
95
|
-
|
96
|
-
it "defaults positive and negative" do
|
97
|
-
prompt.input << "Nope\n"
|
98
|
-
prompt.input.rewind
|
99
|
-
result = prompt.yes?("Are you a human?") do |q|
|
100
|
-
q.suffix 'Yup/nope'
|
101
|
-
end
|
102
|
-
expect(result).to eq(false)
|
103
|
-
expect(prompt.output.string).to eq([
|
104
|
-
"Are you a human? \e[90m(Yup/nope)\e[0m ",
|
105
|
-
"\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m N",
|
106
|
-
"\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m No",
|
107
|
-
"\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m Nop",
|
108
|
-
"\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m Nope",
|
109
|
-
"\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m Nope\n",
|
110
|
-
"\e[1A\e[2K\e[1G",
|
111
|
-
"Are you a human? \e[32mnope\e[0m\n"
|
112
|
-
].join)
|
113
|
-
end
|
114
|
-
|
115
|
-
it "accepts regex conflicting characters as suffix" do
|
116
|
-
prompt.input << "]\n"
|
117
|
-
prompt.input.rewind
|
118
|
-
result = prompt.yes?("Are you a human? [ as yes and ] as no") do |q|
|
119
|
-
q.suffix "[/]"
|
120
|
-
end
|
121
|
-
expect(result).to eq(false)
|
122
|
-
expect(prompt.output.string).to eq([
|
123
|
-
"Are you a human? [ as yes and ] as no \e[90m([/])\e[0m ",
|
124
|
-
"\e[2K\e[1GAre you a human? [ as yes and ] as no \e[90m([/])\e[0m ]",
|
125
|
-
"\e[2K\e[1GAre you a human? [ as yes and ] as no \e[90m([/])\e[0m ]\n",
|
126
|
-
"\e[1A\e[2K\e[1G",
|
127
|
-
"Are you a human? [ as yes and ] as no \e[32m]\e[0m\n"
|
128
|
-
].join)
|
129
|
-
end
|
130
|
-
|
131
|
-
it "customizes question through options" do
|
132
|
-
prompt.input << "\r"
|
133
|
-
prompt.input.rewind
|
134
|
-
result = prompt.yes?("Are you a human?", suffix: 'Agree/Disagree',
|
135
|
-
positive: 'Agree', negative: 'Disagree')
|
136
|
-
expect(result).to eq(true)
|
137
|
-
expect(prompt.output.string).to eq([
|
138
|
-
"Are you a human? \e[90m(Agree/Disagree)\e[0m ",
|
139
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m \n",
|
140
|
-
"\e[1A\e[2K\e[1G",
|
141
|
-
"Are you a human? \e[32mAgree\e[0m\n"
|
142
|
-
].join)
|
143
|
-
end
|
144
|
-
|
145
|
-
it "customizes question through DSL" do
|
146
|
-
prompt.input << "disagree\r"
|
147
|
-
prompt.input.rewind
|
148
|
-
conversion = proc { |input| !input.match(/^agree$/i).nil? }
|
149
|
-
result = prompt.yes?("Are you a human?") do |q|
|
150
|
-
q.suffix 'Agree/Disagree'
|
151
|
-
q.positive 'Agree'
|
152
|
-
q.negative 'Disagree'
|
153
|
-
q.convert conversion
|
154
|
-
end
|
155
|
-
expect(result).to eq(false)
|
156
|
-
expect(prompt.output.string).to eq([
|
157
|
-
"Are you a human? \e[90m(Agree/Disagree)\e[0m ",
|
158
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m d",
|
159
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m di",
|
160
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m dis",
|
161
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m disa",
|
162
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m disag",
|
163
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m disagr",
|
164
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m disagre",
|
165
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m disagree",
|
166
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m disagree\n",
|
167
|
-
"\e[1A\e[2K\e[1G",
|
168
|
-
"Are you a human? \e[32mDisagree\e[0m\n"
|
169
|
-
].join)
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
context '#no?' do
|
174
|
-
it 'agrees with question' do
|
175
|
-
prompt.input << 'no'
|
176
|
-
prompt.input.rewind
|
177
|
-
expect(prompt.no?("Are you a human?")).to eq(true)
|
178
|
-
expect(prompt.output.string).to eq([
|
179
|
-
"Are you a human? \e[90m(y/N)\e[0m ",
|
180
|
-
"\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m n",
|
181
|
-
"\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m no",
|
182
|
-
"\e[1A\e[2K\e[1G",
|
183
|
-
"Are you a human? \e[32mNo\e[0m\n"
|
184
|
-
].join)
|
185
|
-
end
|
186
|
-
|
187
|
-
it 'disagrees with question' do
|
188
|
-
prompt.input << 'yes'
|
189
|
-
prompt.input.rewind
|
190
|
-
expect(prompt.no?("Are you a human?")).to eq(false)
|
191
|
-
expect(prompt.output.string).to eq([
|
192
|
-
"Are you a human? \e[90m(y/N)\e[0m ",
|
193
|
-
"\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m y",
|
194
|
-
"\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m ye",
|
195
|
-
"\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m yes",
|
196
|
-
"\e[1A\e[2K\e[1G",
|
197
|
-
"Are you a human? \e[32myes\e[0m\n"
|
198
|
-
].join)
|
199
|
-
end
|
200
|
-
|
201
|
-
it 'warns about invalid entry when using defaults' do
|
202
|
-
prompt.input << "test"
|
203
|
-
prompt.input.rewind
|
204
|
-
prompt.no?("Are you a human?")
|
205
|
-
expect(prompt.output.string).to eq([
|
206
|
-
"Are you a human? \e[90m(y/N)\e[0m ",
|
207
|
-
"\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m t",
|
208
|
-
"\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m te",
|
209
|
-
"\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m tes",
|
210
|
-
"\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m test",
|
211
|
-
"\e[31m>>\e[0m Invalid input.\e[1A",
|
212
|
-
"\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m ",
|
213
|
-
"\e[2K\e[1G\e[1A\e[2K\e[1G",
|
214
|
-
"Are you a human? \e[32mNo\e[0m\n"
|
215
|
-
].join)
|
216
|
-
end
|
217
|
-
|
218
|
-
it 'assumes default false' do
|
219
|
-
prompt.input << "\r"
|
220
|
-
prompt.input.rewind
|
221
|
-
expect(prompt.no?("Are you a human?")).to eq(true)
|
222
|
-
expect(prompt.output.string).to eq([
|
223
|
-
"Are you a human? \e[90m(y/N)\e[0m ",
|
224
|
-
"\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m \n",
|
225
|
-
"\e[1A\e[2K\e[1G",
|
226
|
-
"Are you a human? \e[32mNo\e[0m\n"
|
227
|
-
].join)
|
228
|
-
end
|
229
|
-
|
230
|
-
it 'changes default' do
|
231
|
-
prompt.input << "\r"
|
232
|
-
prompt.input.rewind
|
233
|
-
expect(prompt.no?("Are you a human?", default: true)).to eq(false)
|
234
|
-
expect(prompt.output.string).to eq([
|
235
|
-
"Are you a human? \e[90m(Y/n)\e[0m ",
|
236
|
-
"\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m \n",
|
237
|
-
"\e[1A\e[2K\e[1G",
|
238
|
-
"Are you a human? \e[32mYes\e[0m\n"
|
239
|
-
].join)
|
240
|
-
end
|
241
|
-
|
242
|
-
it "defaults suffix and converter" do
|
243
|
-
prompt.input << "Yup\n"
|
244
|
-
prompt.input.rewind
|
245
|
-
result = prompt.no?("Are you a human?") do |q|
|
246
|
-
q.positive 'yup'
|
247
|
-
q.negative 'Nope'
|
248
|
-
end
|
249
|
-
expect(result).to eq(false)
|
250
|
-
expect(prompt.output.string).to eq([
|
251
|
-
"Are you a human? \e[90m(yup/Nope)\e[0m ",
|
252
|
-
"\e[2K\e[1GAre you a human? \e[90m(yup/Nope)\e[0m Y",
|
253
|
-
"\e[2K\e[1GAre you a human? \e[90m(yup/Nope)\e[0m Yu",
|
254
|
-
"\e[2K\e[1GAre you a human? \e[90m(yup/Nope)\e[0m Yup",
|
255
|
-
"\e[2K\e[1GAre you a human? \e[90m(yup/Nope)\e[0m Yup\n",
|
256
|
-
"\e[1A\e[2K\e[1G",
|
257
|
-
"Are you a human? \e[32myup\e[0m\n"
|
258
|
-
].join)
|
259
|
-
end
|
260
|
-
|
261
|
-
it "customizes question through DSL" do
|
262
|
-
prompt.input << "agree\r"
|
263
|
-
prompt.input.rewind
|
264
|
-
conversion = proc { |input| !input.match(/^agree$/i).nil? }
|
265
|
-
result = prompt.no?("Are you a human?") do |q|
|
266
|
-
q.suffix 'Agree/Disagree'
|
267
|
-
q.positive 'Agree'
|
268
|
-
q.negative 'Disagree'
|
269
|
-
q.convert conversion
|
270
|
-
end
|
271
|
-
expect(result).to eq(false)
|
272
|
-
expect(prompt.output.string).to eq([
|
273
|
-
"Are you a human? \e[90m(Agree/Disagree)\e[0m ",
|
274
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m a",
|
275
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m ag",
|
276
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m agr",
|
277
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m agre",
|
278
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m agree",
|
279
|
-
"\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m agree\n",
|
280
|
-
"\e[1A\e[2K\e[1G",
|
281
|
-
"Are you a human? \e[32mAgree\e[0m\n"
|
282
|
-
].join)
|
283
|
-
end
|
284
|
-
end
|
285
|
-
end
|