tty-prompt 0.20.0 → 0.21.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt::Question, '#initialize' do
|
4
|
-
|
5
|
-
subject(:question) { described_class.new(TTY::TestPrompt.new)}
|
6
|
-
|
7
|
-
it { expect(question.echo).to eq(true) }
|
8
|
-
|
9
|
-
it { expect(question.modifier).to eq([]) }
|
10
|
-
|
11
|
-
it { expect(question.validation).to eq(TTY::Prompt::Question::UndefinedSetting) }
|
12
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt::Question::Modifier, '#apply_to' do
|
4
|
-
let(:string) { "text to be modified"}
|
5
|
-
|
6
|
-
it "doesn't apply modifiers" do
|
7
|
-
modifier = described_class.new([])
|
8
|
-
expect(modifier.apply_to(string)).to eq(string)
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'combines whitespace & letter case modifications' do
|
12
|
-
modifiers = [:collapse, :capitalize]
|
13
|
-
modifier = described_class.new(modifiers)
|
14
|
-
modified = modifier.apply_to(string)
|
15
|
-
expect(modified).to eq('Text to be modified')
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'combines letter case & whitespace modifications' do
|
19
|
-
modifiers = [:up, :collapse]
|
20
|
-
modifier = described_class.new(modifiers)
|
21
|
-
modified = modifier.apply_to(string)
|
22
|
-
expect(modified).to eq('TEXT TO BE MODIFIED')
|
23
|
-
end
|
24
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt::Question::Modifier, '#letter_case' do
|
4
|
-
context "string" do
|
5
|
-
let(:string) { 'text to modify' }
|
6
|
-
|
7
|
-
it "changes to uppercase" do
|
8
|
-
modified = described_class.letter_case(:up, string)
|
9
|
-
expect(modified).to eq('TEXT TO MODIFY')
|
10
|
-
end
|
11
|
-
|
12
|
-
it "changes to lower case" do
|
13
|
-
modified = described_class.letter_case(:down, string)
|
14
|
-
expect(modified).to eq('text to modify')
|
15
|
-
end
|
16
|
-
|
17
|
-
it "capitalizes text" do
|
18
|
-
modified = described_class.letter_case(:capitalize, string)
|
19
|
-
expect(modified).to eq('Text to modify')
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "nil (empty user input)" do
|
24
|
-
let(:string) { nil }
|
25
|
-
|
26
|
-
example "up returns nil" do
|
27
|
-
modified = described_class.letter_case(:up, string)
|
28
|
-
expect(modified).to be_nil
|
29
|
-
end
|
30
|
-
|
31
|
-
example "down returns nil" do
|
32
|
-
modified = described_class.letter_case(:down, string)
|
33
|
-
expect(modified).to be_nil
|
34
|
-
end
|
35
|
-
|
36
|
-
example "capitalize returns nil" do
|
37
|
-
modified = described_class.letter_case(:capitalize, string)
|
38
|
-
expect(modified).to be_nil
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt::Question::Modifier, '#whitespace' do
|
4
|
-
context "string with whitespaces" do
|
5
|
-
let(:string) { " text\t \n to\t modify\r\n" }
|
6
|
-
|
7
|
-
it "trims whitespace" do
|
8
|
-
modified = described_class.whitespace(:trim, string)
|
9
|
-
expect(modified).to eq("text\t \n to\t modify")
|
10
|
-
end
|
11
|
-
|
12
|
-
it "chomps whitespace" do
|
13
|
-
modified = described_class.whitespace(:chomp, string)
|
14
|
-
expect(modified).to eq(" text\t \n to\t modify")
|
15
|
-
end
|
16
|
-
|
17
|
-
it "collapses text" do
|
18
|
-
modified = described_class.whitespace(:collapse, string)
|
19
|
-
expect(modified).to eq(" text to modify ")
|
20
|
-
end
|
21
|
-
|
22
|
-
it "removes whitespace" do
|
23
|
-
modified = described_class.whitespace(:remove, string)
|
24
|
-
expect(modified).to eq("texttomodify")
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context "nil (empty user input)" do
|
29
|
-
let(:string) { nil }
|
30
|
-
|
31
|
-
example "trim returns nil" do
|
32
|
-
modified = described_class.whitespace(:trim, string)
|
33
|
-
expect(modified).to be_nil
|
34
|
-
end
|
35
|
-
|
36
|
-
example "chomp returns nil" do
|
37
|
-
modified = described_class.whitespace(:chomp, string)
|
38
|
-
expect(modified).to be_nil
|
39
|
-
end
|
40
|
-
|
41
|
-
example "collapse returns nil" do
|
42
|
-
modified = described_class.whitespace(:collapse, string)
|
43
|
-
expect(modified).to be_nil
|
44
|
-
end
|
45
|
-
|
46
|
-
example "remove returns nil" do
|
47
|
-
modified = described_class.whitespace(:remove, string)
|
48
|
-
expect(modified).to be_nil
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt::Question, '#modify' do
|
4
|
-
|
5
|
-
subject(:prompt) { TTY::TestPrompt.new }
|
6
|
-
|
7
|
-
it 'preserves answer for unkown modification' do
|
8
|
-
prompt.input << 'piotr'
|
9
|
-
prompt.input.rewind
|
10
|
-
answer = prompt.ask("What is your name?") { |q| q.modify(:none) }
|
11
|
-
expect(answer).to eq('piotr')
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'converts to upper case' do
|
15
|
-
prompt.input << 'piotr'
|
16
|
-
prompt.input.rewind
|
17
|
-
answer = prompt.ask("What is your name?") { |q| q.modify(:upcase) }
|
18
|
-
expect(answer).to eq('PIOTR')
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'trims whitespace' do
|
22
|
-
prompt.input << " Some white\t space\t \there! \n"
|
23
|
-
prompt.input.rewind
|
24
|
-
answer = prompt.ask('Enter some text: ') { |q| q.modify(:trim) }
|
25
|
-
expect(answer).to eq("Some white\t space\t \there!")
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'collapses whitespace' do
|
29
|
-
prompt.input << " Some white\t space\t \there! \n"
|
30
|
-
prompt.input.rewind
|
31
|
-
answer = prompt.ask('Enter some text: ') { |q| q.modify(:collapse) }
|
32
|
-
expect(answer).to eq(' Some white space here! ')
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'strips and collapses whitespace' do
|
36
|
-
prompt.input << " Some white\t space\t \there! \n"
|
37
|
-
prompt.input.rewind
|
38
|
-
answer = prompt.ask('Enter some text: ') { |q| q.modify(:strip, :collapse) }
|
39
|
-
expect(answer).to eq('Some white space here!')
|
40
|
-
end
|
41
|
-
end
|
@@ -1,92 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt::Question, '#required' do
|
4
|
-
|
5
|
-
subject(:prompt) { TTY::TestPrompt.new }
|
6
|
-
|
7
|
-
it 'requires value to be present' do
|
8
|
-
prompt.input << "Piotr"
|
9
|
-
prompt.input.rewind
|
10
|
-
prompt.ask('What is your name?') { |q| q.required(true) }
|
11
|
-
expect(prompt.output.string).to eq([
|
12
|
-
"What is your name? ",
|
13
|
-
"\e[2K\e[1GWhat is your name? P",
|
14
|
-
"\e[2K\e[1GWhat is your name? Pi",
|
15
|
-
"\e[2K\e[1GWhat is your name? Pio",
|
16
|
-
"\e[2K\e[1GWhat is your name? Piot",
|
17
|
-
"\e[2K\e[1GWhat is your name? Piotr",
|
18
|
-
"\e[1A\e[2K\e[1G",
|
19
|
-
"What is your name? \e[32mPiotr\e[0m\n"
|
20
|
-
].join)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'requires value to be present with option' do
|
24
|
-
prompt.input << " \nPiotr"
|
25
|
-
prompt.input.rewind
|
26
|
-
prompt.ask('What is your name?', required: true)
|
27
|
-
expect(prompt.output.string).to eq([
|
28
|
-
"What is your name? ",
|
29
|
-
"\e[2K\e[1GWhat is your name? ",
|
30
|
-
"\e[2K\e[1GWhat is your name? ",
|
31
|
-
"\e[2K\e[1GWhat is your name? \n",
|
32
|
-
"\e[31m>>\e[0m Value must be provided\e[1A",
|
33
|
-
"\e[2K\e[1G",
|
34
|
-
"What is your name? ",
|
35
|
-
"\e[2K\e[1GWhat is your name? P",
|
36
|
-
"\e[2K\e[1GWhat is your name? Pi",
|
37
|
-
"\e[2K\e[1GWhat is your name? Pio",
|
38
|
-
"\e[2K\e[1GWhat is your name? Piot",
|
39
|
-
"\e[2K\e[1GWhat is your name? Piotr",
|
40
|
-
"\e[2K\e[1G",
|
41
|
-
"\e[1A\e[2K\e[1G",
|
42
|
-
"What is your name? \e[32mPiotr\e[0m\n"
|
43
|
-
].join)
|
44
|
-
end
|
45
|
-
|
46
|
-
it "doesn't require value to be present" do
|
47
|
-
prompt.input << ''
|
48
|
-
prompt.input.rewind
|
49
|
-
answer = prompt.ask('What is your name?') { |q| q.required(false) }
|
50
|
-
expect(answer).to be_nil
|
51
|
-
end
|
52
|
-
|
53
|
-
it "uses required in validation check" do
|
54
|
-
prompt.input << " \nexists\ntest\n"
|
55
|
-
prompt.input.rewind
|
56
|
-
answer = prompt.ask('File name?') do |q|
|
57
|
-
q.required(true)
|
58
|
-
q.validate { |v| !(v =~ /exists/) }
|
59
|
-
q.messages[:required?] = 'File name must not be empty!'
|
60
|
-
q.messages[:valid?] = 'File already exists!'
|
61
|
-
end
|
62
|
-
expect(answer).to eq('test')
|
63
|
-
expect(prompt.output.string).to eq([
|
64
|
-
"File name? ",
|
65
|
-
"\e[2K\e[1GFile name? ",
|
66
|
-
"\e[2K\e[1GFile name? ",
|
67
|
-
"\e[2K\e[1GFile name? \n",
|
68
|
-
"\e[31m>>\e[0m File name must not be empty!",
|
69
|
-
"\e[1A\e[2K\e[1G",
|
70
|
-
"File name? ",
|
71
|
-
"\e[2K\e[1GFile name? e",
|
72
|
-
"\e[2K\e[1GFile name? ex",
|
73
|
-
"\e[2K\e[1GFile name? exi",
|
74
|
-
"\e[2K\e[1GFile name? exis",
|
75
|
-
"\e[2K\e[1GFile name? exist",
|
76
|
-
"\e[2K\e[1GFile name? exists",
|
77
|
-
"\e[2K\e[1GFile name? exists\n",
|
78
|
-
"\e[31m>>\e[0m File already exists!",
|
79
|
-
"\e[1A\e[2K\e[1G",
|
80
|
-
"File name? ",
|
81
|
-
"\e[2K\e[1GFile name? t",
|
82
|
-
"\e[2K\e[1GFile name? te",
|
83
|
-
"\e[2K\e[1GFile name? tes",
|
84
|
-
"\e[2K\e[1GFile name? test",
|
85
|
-
"\e[2K\e[1GFile name? test\n",
|
86
|
-
"\e[2K\e[1G",
|
87
|
-
"\e[1A\e[2K\e[1G",
|
88
|
-
"File name? \e[32mtest\e[0m\n",
|
89
|
-
].join)
|
90
|
-
expect(answer).to eq('test')
|
91
|
-
end
|
92
|
-
end
|
@@ -1,115 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt::Question, '#validate' do
|
4
|
-
|
5
|
-
subject(:prompt) { TTY::TestPrompt.new }
|
6
|
-
|
7
|
-
it 'validates input with regex' do
|
8
|
-
prompt.input << 'p.m'
|
9
|
-
prompt.input.rewind
|
10
|
-
|
11
|
-
answer = prompt.ask('What is your username?') do |q|
|
12
|
-
q.validate(/^[^\.]+\.[^\.]+/)
|
13
|
-
end
|
14
|
-
|
15
|
-
expect(answer).to eq('p.m')
|
16
|
-
expect(prompt.output.string).to eq([
|
17
|
-
"What is your username? ",
|
18
|
-
"\e[2K\e[1GWhat is your username? p",
|
19
|
-
"\e[2K\e[1GWhat is your username? p.",
|
20
|
-
"\e[2K\e[1GWhat is your username? p.m",
|
21
|
-
"\e[1A\e[2K\e[1G",
|
22
|
-
"What is your username? \e[32mp.m\e[0m\n"
|
23
|
-
].join)
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'validates input with proc' do
|
27
|
-
prompt.input << 'piotr.murach'
|
28
|
-
prompt.input.rewind
|
29
|
-
|
30
|
-
answer = prompt.ask('What is your username?') do |q|
|
31
|
-
q.validate { |input| input =~ /^[^\.]+\.[^\.]+/ }
|
32
|
-
end
|
33
|
-
|
34
|
-
expect(answer).to eq('piotr.murach')
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'understands custom validation like :email' do
|
38
|
-
prompt.input << 'piotr@example.com'
|
39
|
-
prompt.input.rewind
|
40
|
-
|
41
|
-
answer = prompt.ask('What is your email?') do |q|
|
42
|
-
q.validate :email
|
43
|
-
end
|
44
|
-
|
45
|
-
expect(answer).to eq('piotr@example.com')
|
46
|
-
end
|
47
|
-
|
48
|
-
it "provides default error message for wrong input" do
|
49
|
-
prompt.input << "wrong\np@m.com\n"
|
50
|
-
prompt.input.rewind
|
51
|
-
|
52
|
-
answer = prompt.ask('What is your email?') do |q|
|
53
|
-
q.validate :email
|
54
|
-
end
|
55
|
-
|
56
|
-
expect(answer).to eq('p@m.com')
|
57
|
-
expect(prompt.output.string).to eq([
|
58
|
-
"What is your email? ",
|
59
|
-
"\e[2K\e[1GWhat is your email? w",
|
60
|
-
"\e[2K\e[1GWhat is your email? wr",
|
61
|
-
"\e[2K\e[1GWhat is your email? wro",
|
62
|
-
"\e[2K\e[1GWhat is your email? wron",
|
63
|
-
"\e[2K\e[1GWhat is your email? wrong",
|
64
|
-
"\e[2K\e[1GWhat is your email? wrong\n",
|
65
|
-
"\e[31m>>\e[0m Your answer is invalid (must match :email)\e[1A",
|
66
|
-
"\e[2K\e[1G",
|
67
|
-
"What is your email? ",
|
68
|
-
"\e[2K\e[1GWhat is your email? p",
|
69
|
-
"\e[2K\e[1GWhat is your email? p@",
|
70
|
-
"\e[2K\e[1GWhat is your email? p@m",
|
71
|
-
"\e[2K\e[1GWhat is your email? p@m.",
|
72
|
-
"\e[2K\e[1GWhat is your email? p@m.c",
|
73
|
-
"\e[2K\e[1GWhat is your email? p@m.co",
|
74
|
-
"\e[2K\e[1GWhat is your email? p@m.com",
|
75
|
-
"\e[2K\e[1GWhat is your email? p@m.com\n",
|
76
|
-
"\e[2K\e[1G",
|
77
|
-
"\e[1A\e[2K\e[1G",
|
78
|
-
"What is your email? \e[32mp@m.com\e[0m\n"
|
79
|
-
].join)
|
80
|
-
end
|
81
|
-
|
82
|
-
it "provides custom error message for wrong input" do
|
83
|
-
prompt.input << "wrong\np@m.com"
|
84
|
-
prompt.input.rewind
|
85
|
-
|
86
|
-
answer = prompt.ask('What is your email?') do |q|
|
87
|
-
q.validate :email
|
88
|
-
q.messages[:valid?] = 'Not an email!'
|
89
|
-
end
|
90
|
-
|
91
|
-
expect(answer).to eq('p@m.com')
|
92
|
-
expect(prompt.output.string).to eq([
|
93
|
-
"What is your email? ",
|
94
|
-
"\e[2K\e[1GWhat is your email? w",
|
95
|
-
"\e[2K\e[1GWhat is your email? wr",
|
96
|
-
"\e[2K\e[1GWhat is your email? wro",
|
97
|
-
"\e[2K\e[1GWhat is your email? wron",
|
98
|
-
"\e[2K\e[1GWhat is your email? wrong",
|
99
|
-
"\e[2K\e[1GWhat is your email? wrong\n",
|
100
|
-
"\e[31m>>\e[0m Not an email!\e[1A",
|
101
|
-
"\e[2K\e[1G",
|
102
|
-
"What is your email? ",
|
103
|
-
"\e[2K\e[1GWhat is your email? p",
|
104
|
-
"\e[2K\e[1GWhat is your email? p@",
|
105
|
-
"\e[2K\e[1GWhat is your email? p@m",
|
106
|
-
"\e[2K\e[1GWhat is your email? p@m.",
|
107
|
-
"\e[2K\e[1GWhat is your email? p@m.c",
|
108
|
-
"\e[2K\e[1GWhat is your email? p@m.co",
|
109
|
-
"\e[2K\e[1GWhat is your email? p@m.com",
|
110
|
-
"\e[2K\e[1G",
|
111
|
-
"\e[1A\e[2K\e[1G",
|
112
|
-
"What is your email? \e[32mp@m.com\e[0m\n"
|
113
|
-
].join)
|
114
|
-
end
|
115
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt::Question::Validation, '#call' do
|
4
|
-
let(:pattern) { /^[^\.]+\.[^\.]+/ }
|
5
|
-
|
6
|
-
it "validates nil input" do
|
7
|
-
validation = described_class.new(pattern)
|
8
|
-
expect(validation.(nil)).to eq(false)
|
9
|
-
end
|
10
|
-
|
11
|
-
it "validates successfully when the value matches pattern" do
|
12
|
-
validation = described_class.new(pattern)
|
13
|
-
expect(validation.('piotr.murach')).to eq(true)
|
14
|
-
end
|
15
|
-
|
16
|
-
it "validates with a proc" do
|
17
|
-
pat = proc { |input| !pattern.match(input).nil? }
|
18
|
-
validation = described_class.new(pat)
|
19
|
-
expect(validation.call('piotr.murach')).to eq(true)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "validates with custom name" do
|
23
|
-
validation = described_class.new(:email)
|
24
|
-
expect(validation.call('piotr@example.com')).to eq(true)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "fails validation when not maching pattern" do
|
28
|
-
validation = described_class.new(pattern)
|
29
|
-
expect(validation.('piotrmurach')).to eq(false)
|
30
|
-
end
|
31
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe TTY::Prompt::Question::Validation, '#coerce' do
|
4
|
-
let(:instance) { described_class.new }
|
5
|
-
|
6
|
-
it "coerces lambda into proc" do
|
7
|
-
pattern = lambda { "^[^\.]+\.[^\.]+" }
|
8
|
-
validation = described_class.new(pattern)
|
9
|
-
expect(validation.pattern).to be_a(Proc)
|
10
|
-
end
|
11
|
-
|
12
|
-
it "doesn't coerce symbols" do
|
13
|
-
pattern = :email
|
14
|
-
validation =described_class.new(pattern)
|
15
|
-
expect(validation.pattern).to eq(:email)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "coerces into regex" do
|
19
|
-
pattern = /^[^\.]+\.[^\.]+/
|
20
|
-
validation = described_class.new(pattern)
|
21
|
-
expect(validation.pattern).to be_a(Regexp)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "fails to coerce pattern into validation" do
|
25
|
-
pattern = Object.new
|
26
|
-
expect {
|
27
|
-
described_class.new(pattern)
|
28
|
-
}.to raise_error(TTY::Prompt::ValidationCoercion)
|
29
|
-
end
|
30
|
-
end
|