tty-prompt 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +0 -2
  3. data/CHANGELOG.md +12 -0
  4. data/README.md +223 -59
  5. data/lib/tty/prompt/choice.rb +83 -0
  6. data/lib/tty/prompt/choices.rb +92 -0
  7. data/lib/tty/prompt/codes.rb +32 -0
  8. data/lib/tty/prompt/cursor.rb +131 -0
  9. data/lib/tty/prompt/list.rb +209 -0
  10. data/lib/tty/prompt/mode/echo.rb +10 -9
  11. data/lib/tty/prompt/mode/raw.rb +10 -9
  12. data/lib/tty/prompt/multi_list.rb +105 -0
  13. data/lib/tty/prompt/question/validation.rb +12 -27
  14. data/lib/tty/prompt/question.rb +58 -107
  15. data/lib/tty/prompt/reader.rb +44 -11
  16. data/lib/tty/prompt/response.rb +31 -36
  17. data/lib/tty/prompt/response_delegation.rb +3 -2
  18. data/lib/tty/prompt/statement.rb +10 -10
  19. data/lib/tty/prompt/test.rb +15 -0
  20. data/lib/tty/prompt/version.rb +3 -3
  21. data/lib/tty/prompt.rb +72 -9
  22. data/lib/tty-prompt.rb +11 -0
  23. data/spec/unit/ask_spec.rb +32 -35
  24. data/spec/unit/choice/eql_spec.rb +24 -0
  25. data/spec/unit/choice/from_spec.rb +25 -0
  26. data/spec/unit/choices/add_spec.rb +14 -0
  27. data/spec/unit/choices/each_spec.rb +15 -0
  28. data/spec/unit/choices/new_spec.rb +12 -0
  29. data/spec/unit/choices/pluck_spec.rb +11 -0
  30. data/spec/unit/cursor/new_spec.rb +74 -0
  31. data/spec/unit/error_spec.rb +4 -8
  32. data/spec/unit/multi_select_spec.rb +163 -0
  33. data/spec/unit/question/character_spec.rb +5 -16
  34. data/spec/unit/question/default_spec.rb +4 -10
  35. data/spec/unit/question/in_spec.rb +15 -12
  36. data/spec/unit/question/initialize_spec.rb +1 -6
  37. data/spec/unit/question/modify_spec.rb +25 -24
  38. data/spec/unit/question/required_spec.rb +31 -0
  39. data/spec/unit/question/validate_spec.rb +25 -17
  40. data/spec/unit/question/validation/call_spec.rb +22 -0
  41. data/spec/unit/response/read_bool_spec.rb +38 -27
  42. data/spec/unit/response/read_char_spec.rb +5 -8
  43. data/spec/unit/response/read_date_spec.rb +8 -12
  44. data/spec/unit/response/read_email_spec.rb +25 -22
  45. data/spec/unit/response/read_multiple_spec.rb +11 -13
  46. data/spec/unit/response/read_number_spec.rb +12 -16
  47. data/spec/unit/response/read_range_spec.rb +10 -13
  48. data/spec/unit/response/read_spec.rb +39 -38
  49. data/spec/unit/response/read_string_spec.rb +7 -12
  50. data/spec/unit/say_spec.rb +10 -14
  51. data/spec/unit/select_spec.rb +192 -0
  52. data/spec/unit/statement/initialize_spec.rb +0 -4
  53. data/spec/unit/suggest_spec.rb +6 -9
  54. data/spec/unit/warn_spec.rb +4 -8
  55. metadata +32 -8
  56. data/spec/unit/question/argument_spec.rb +0 -30
  57. data/spec/unit/question/valid_spec.rb +0 -46
  58. data/spec/unit/question/validation/valid_value_spec.rb +0 -22
@@ -2,18 +2,13 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- RSpec.describe TTY::Prompt::Question, '#initialize' do
6
- let(:input) { StringIO.new }
7
- let(:output) { StringIO.new }
8
- let(:prompt) { TTY::Prompt.new(input, output) }
9
-
5
+ RSpec.describe TTY::Prompt::Question, '#read_string' do
10
6
  it 'reads string' do
11
- name = "Piotr"
12
- input << name
13
- input.rewind
14
- q = prompt.ask("What is your name?")
15
- answer = q.read_string
16
- expect(answer).to be_kind_of String
17
- expect(answer).to eql name
7
+ prompt = TTY::TestPrompt.new
8
+ prompt.input << 'Piotr'
9
+ prompt.input.rewind
10
+ answer = prompt.ask("What is your name?", read: :string)
11
+ expect(answer).to be_a(String)
12
+ expect(answer).to eq('Piotr')
18
13
  end
19
14
  end
@@ -3,64 +3,60 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  RSpec.describe TTY::Prompt, '#say' do
6
- let(:input) { StringIO.new }
7
- let(:output) { StringIO.new }
8
6
  let(:color) { Pastel.new(enabled: true) }
9
7
 
10
- subject(:prompt) { described_class.new(input, output) }
8
+ subject(:prompt) { TTY::TestPrompt.new }
11
9
 
12
10
  before { allow(Pastel).to receive(:new).and_return(color) }
13
11
 
14
- after { output.rewind }
15
-
16
12
  it 'prints an empty message' do
17
13
  prompt.say ""
18
- expect(output.string).to eql ""
14
+ expect(prompt.output.string).to eql ""
19
15
  end
20
16
 
21
17
  context 'with new line' do
22
18
  it 'prints a message with newline' do
23
19
  prompt.say "Hell yeah!\n"
24
- expect(output.string).to eql "Hell yeah!\n"
20
+ expect(prompt.output.string).to eql "Hell yeah!\n"
25
21
  end
26
22
 
27
23
  it 'prints a message with implicit newline' do
28
24
  prompt.say "Hell yeah!\n"
29
- expect(output.string).to eql "Hell yeah!\n"
25
+ expect(prompt.output.string).to eql "Hell yeah!\n"
30
26
  end
31
27
 
32
28
  it 'prints a message with newline within text' do
33
29
  prompt.say "Hell\n yeah!"
34
- expect(output.string).to eql "Hell\n yeah!\n"
30
+ expect(prompt.output.string).to eql "Hell\n yeah!\n"
35
31
  end
36
32
 
37
33
  it 'prints a message with newline within text and blank space' do
38
34
  prompt.say "Hell\n yeah! "
39
- expect(output.string).to eql "Hell\n yeah! "
35
+ expect(prompt.output.string).to eql "Hell\n yeah! "
40
36
  end
41
37
 
42
38
  it 'prints a message without newline' do
43
39
  prompt.say "Hell yeah!", newline: false
44
- expect(output.string).to eql "Hell yeah!"
40
+ expect(prompt.output.string).to eql "Hell yeah!"
45
41
  end
46
42
  end
47
43
 
48
44
  context 'with tab or space' do
49
45
  it 'prints ' do
50
46
  prompt.say "Hell yeah!\t"
51
- expect(output.string).to eql "Hell yeah!\t"
47
+ expect(prompt.output.string).to eql "Hell yeah!\t"
52
48
  end
53
49
  end
54
50
 
55
51
  context 'with color' do
56
52
  it 'prints message with ansi color' do
57
53
  prompt.say "Hell yeah!", color: :green
58
- expect(output.string).to eql "\e[32mHell yeah!\e[0m\n"
54
+ expect(prompt.output.string).to eql "\e[32mHell yeah!\e[0m\n"
59
55
  end
60
56
 
61
57
  it 'prints message with ansi color without newline' do
62
58
  prompt.say "Hell yeah! ", color: :green
63
- expect(output.string).to eql "\e[32mHell yeah! \e[0m"
59
+ expect(prompt.output.string).to eql "\e[32mHell yeah! \e[0m"
64
60
  end
65
61
  end
66
62
  end
@@ -0,0 +1,192 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe TTY::Prompt, '#select' do
6
+ let(:color) { Pastel.new(enabled: true) }
7
+
8
+ before { allow(Pastel).to receive(:new).and_return(color) }
9
+
10
+ it "selects by default first option" do
11
+ prompt = TTY::TestPrompt.new
12
+ choices = %w(Large Medium Small)
13
+ prompt.input << "\r"
14
+ prompt.input.rewind
15
+ expect(prompt.select('What size?', choices)).to eq('Large')
16
+ expect(prompt.output.string).to eq([
17
+ "\e[?25lWhat size? \e[90m(Use arrow keys, press Enter to select)\e[0m\n",
18
+ "\e[32m‣ Large\e[0m\n",
19
+ " Medium\n",
20
+ " Small\n",
21
+ "\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K",
22
+ "What size? \e[32mLarge\e[0m\n\e[?25h"
23
+ ].join)
24
+ end
25
+
26
+ it "sets choice name and value" do
27
+ prompt = TTY::TestPrompt.new
28
+ choices = {large: 1, medium: 2, small: 3}
29
+ prompt.input << " "
30
+ prompt.input.rewind
31
+ expect(prompt.select('What size?', choices)).to eq(1)
32
+ expect(prompt.output.string).to eq([
33
+ "\e[?25lWhat size? \e[90m(Use arrow keys, press Enter to select)\e[0m\n",
34
+ "\e[32m‣ large\e[0m\n",
35
+ " medium\n",
36
+ " small\n",
37
+ "\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K",
38
+ "What size? \e[32mlarge\e[0m\n\e[?25h"
39
+ ].join)
40
+ end
41
+
42
+ it "sets choice name through DSL" do
43
+ prompt = TTY::TestPrompt.new
44
+ prompt.input << " "
45
+ prompt.input.rewind
46
+ value = prompt.select('What size?') do |menu|
47
+ menu.choice "Large"
48
+ menu.choice "Medium"
49
+ menu.choice "Small"
50
+ end
51
+ expect(value).to eq('Large')
52
+ expect(prompt.output.string).to eq([
53
+ "\e[?25lWhat size? \e[90m(Use arrow keys, press Enter to select)\e[0m\n",
54
+ "\e[32m‣ Large\e[0m\n",
55
+ " Medium\n",
56
+ " Small\n",
57
+ "\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K",
58
+ "What size? \e[32mLarge\e[0m\n\e[?25h"
59
+ ].join)
60
+ end
61
+
62
+ it "sets choice name & value through DSL" do
63
+ prompt = TTY::TestPrompt.new
64
+ prompt.input << " "
65
+ prompt.input.rewind
66
+ value = prompt.select('What size?') do |menu|
67
+ menu.choice :large, 1
68
+ menu.choice :medium, 2
69
+ menu.choice :small, 3
70
+ end
71
+ expect(value).to eq(1)
72
+ expect(prompt.output.string).to eq([
73
+ "\e[?25lWhat size? \e[90m(Use arrow keys, press Enter to select)\e[0m\n",
74
+ "\e[32m‣ large\e[0m\n",
75
+ " medium\n",
76
+ " small\n",
77
+ "\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K",
78
+ "What size? \e[32mlarge\e[0m\n\e[?25h"
79
+ ].join)
80
+ end
81
+
82
+ it "sets choices and single choice through DSL" do
83
+ prompt = TTY::TestPrompt.new
84
+ prompt.input << " "
85
+ prompt.input.rewind
86
+ value = prompt.select('What size?') do |menu|
87
+ menu.choice 'Large'
88
+ menu.choices %w(Medium Small)
89
+ end
90
+ expect(value).to eq('Large')
91
+ expect(prompt.output.string).to eq([
92
+ "\e[?25lWhat size? \e[90m(Use arrow keys, press Enter to select)\e[0m\n",
93
+ "\e[32m‣ Large\e[0m\n",
94
+ " Medium\n",
95
+ " Small\n",
96
+ "\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K",
97
+ "What size? \e[32mLarge\e[0m\n\e[?25h"
98
+ ].join)
99
+ end
100
+
101
+ it "sets choice name & value through DSL" do
102
+ prompt = TTY::TestPrompt.new
103
+ prompt.input << " "
104
+ prompt.input.rewind
105
+ value = prompt.select('What size?') do |menu|
106
+ menu.default 2
107
+
108
+ menu.choice :large, 1
109
+ menu.choice :medium, 2
110
+ menu.choice :small, 3
111
+ end
112
+ expect(value).to eq(2)
113
+ expect(prompt.output.string).to eq([
114
+ "\e[?25lWhat size? \e[90m(Use arrow keys, press Enter to select)\e[0m\n",
115
+ " large\n",
116
+ "\e[32m‣ medium\e[0m\n",
117
+ " small\n",
118
+ "\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K",
119
+ "What size? \e[32mmedium\e[0m\n\e[?25h"
120
+ ].join)
121
+ end
122
+
123
+ it "sets choice value to proc and executes it" do
124
+ prompt = TTY::TestPrompt.new
125
+ prompt.input << " "
126
+ prompt.input.rewind
127
+ value = prompt.select('What size?', default: 2) do |menu|
128
+ menu.choice :large, 1
129
+ menu.choice :medium do 'Good choice!' end
130
+ menu.choice :small, 3
131
+ end
132
+ expect(value).to eq('Good choice!')
133
+ expect(prompt.output.string).to eq([
134
+ "\e[?25lWhat size? \e[90m(Use arrow keys, press Enter to select)\e[0m\n",
135
+ " large\n",
136
+ "\e[32m‣ medium\e[0m\n",
137
+ " small\n",
138
+ "\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K",
139
+ "What size? \e[32mmedium\e[0m\n\e[?25h"
140
+ ].join)
141
+ end
142
+
143
+ it "sets default option through hash syntax" do
144
+ prompt = TTY::TestPrompt.new
145
+ choices = %w(Large Medium Small)
146
+ prompt.input << " "
147
+ prompt.input.rewind
148
+ expect(prompt.select('What size?', choices, default: 2)).to eq('Medium')
149
+ expect(prompt.output.string).to eq([
150
+ "\e[?25lWhat size? \e[90m(Use arrow keys, press Enter to select)\e[0m\n",
151
+ " Large\n",
152
+ "\e[32m‣ Medium\e[0m\n",
153
+ " Small\n",
154
+ "\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K",
155
+ "What size? \e[32mMedium\e[0m\n\e[?25h"
156
+ ].join)
157
+ end
158
+
159
+ it "changes selected item color & marker" do
160
+ prompt = TTY::TestPrompt.new
161
+ choices = %w(Large Medium Small)
162
+ prompt.input << " "
163
+ prompt.input.rewind
164
+ value = prompt.select('What size?', choices, color: :blue, marker: '>')
165
+ expect(value).to eq('Large')
166
+ expect(prompt.output.string).to eq([
167
+ "\e[?25lWhat size? \e[90m(Use arrow keys, press Enter to select)\e[0m\n",
168
+ "\e[34m> Large\e[0m\n",
169
+ " Medium\n",
170
+ " Small\n",
171
+ "\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K",
172
+ "What size? \e[34mLarge\e[0m\n\e[?25h"
173
+ ].join)
174
+ end
175
+
176
+ it "changes help text" do
177
+ prompt = TTY::TestPrompt.new
178
+ choices = %w(Large Medium Small)
179
+ prompt.input << " "
180
+ prompt.input.rewind
181
+ value = prompt.select('What size?', choices, help: "(Bash keyboard)")
182
+ expect(value).to eq('Large')
183
+ expect(prompt.output.string).to eq([
184
+ "\e[?25lWhat size? \e[90m(Bash keyboard)\e[0m\n",
185
+ "\e[32m‣ Large\e[0m\n",
186
+ " Medium\n",
187
+ " Small\n",
188
+ "\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K\e[1A\e[1000D\e[K",
189
+ "What size? \e[32mLarge\e[0m\n\e[?25h"
190
+ ].join)
191
+ end
192
+ end
@@ -3,10 +3,6 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  RSpec.describe TTY::Prompt::Statement, '#new' do
6
- let(:input) { StringIO.new }
7
- let(:output) { StringIO.new }
8
- let(:shell) { TTY::Prompt.new(input, output) }
9
-
10
6
  it "forces newline after the prompt message" do
11
7
  statement = described_class.new
12
8
  expect(statement.newline).to eq(true)
@@ -3,31 +3,28 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  RSpec.describe TTY::Prompt, '#suggest' do
6
- let(:input) { StringIO.new }
7
- let(:output) { StringIO.new }
8
6
  let(:possible) { %w(status stage stash commit branch blame) }
9
7
 
10
- subject(:prompt) { described_class.new(input, output) }
11
-
12
- after { output.rewind }
8
+ subject(:prompt) { TTY::TestPrompt.new }
13
9
 
14
10
  it 'suggests few matches' do
15
11
  prompt.suggest('sta', possible)
16
- expect(output.string).to eql("Did you mean one of these?\n stage\n stash\n")
12
+ expect(prompt.output.string).
13
+ to eql("Did you mean one of these?\n stage\n stash\n")
17
14
  end
18
15
 
19
16
  it 'suggests a single match for one character' do
20
17
  prompt.suggest('b', possible)
21
- expect(output.string).to eql("Did you mean this?\n blame\n")
18
+ expect(prompt.output.string).to eql("Did you mean this?\n blame\n")
22
19
  end
23
20
 
24
21
  it 'suggests a single match for two characters' do
25
22
  prompt.suggest('co', possible)
26
- expect(output.string).to eql("Did you mean this?\n commit\n")
23
+ expect(prompt.output.string).to eql("Did you mean this?\n commit\n")
27
24
  end
28
25
 
29
26
  it 'suggests with different text and indentation' do
30
27
  prompt.suggest('b', possible, indent: 4, single_text: 'Perhaps you meant?')
31
- expect(output.string).to eql("Perhaps you meant?\n blame\n")
28
+ expect(prompt.output.string).to eql("Perhaps you meant?\n blame\n")
32
29
  end
33
30
  end
@@ -3,28 +3,24 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  RSpec.describe TTY::Prompt, '#warn' do
6
- let(:input) { StringIO.new }
7
- let(:output) { StringIO.new }
8
6
  let(:color) { Pastel.new(enabled: true) }
9
7
 
10
- subject(:prompt) { TTY::Prompt.new(input, output) }
8
+ subject(:prompt) { TTY::TestPrompt.new }
11
9
 
12
10
  before { allow(Pastel).to receive(:new).and_return(color) }
13
11
 
14
- after { output.rewind }
15
-
16
12
  it 'displays one message' do
17
13
  prompt.warn "Careful young apprentice!"
18
- expect(output.string).to eql "\e[33mCareful young apprentice!\e[0m\n"
14
+ expect(prompt.output.string).to eql "\e[33mCareful young apprentice!\e[0m\n"
19
15
  end
20
16
 
21
17
  it 'displays many messages' do
22
18
  prompt.warn "Careful there!", "It's dangerous!"
23
- expect(output.string).to eql "\e[33mCareful there!\e[0m\n\e[33mIt's dangerous!\e[0m\n"
19
+ expect(prompt.output.string).to eql "\e[33mCareful there!\e[0m\n\e[33mIt's dangerous!\e[0m\n"
24
20
  end
25
21
 
26
22
  it 'displays message with option' do
27
23
  prompt.warn "Careful young apprentice!", newline: false
28
- expect(output.string).to eql "\e[33mCareful young apprentice!\e[0m"
24
+ expect(prompt.output.string).to eql "\e[33mCareful young apprentice!\e[0m"
29
25
  end
30
26
  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.1.0
4
+ version: 0.2.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: 2015-11-01 00:00:00.000000000 Z
11
+ date: 2015-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: necromancer
@@ -78,18 +78,25 @@ files:
78
78
  - .rspec
79
79
  - .ruby-version
80
80
  - .travis.yml
81
+ - CHANGELOG.md
81
82
  - Gemfile
82
83
  - LICENSE.txt
83
84
  - README.md
84
85
  - Rakefile
85
86
  - lib/tty-prompt.rb
86
87
  - lib/tty/prompt.rb
88
+ - lib/tty/prompt/choice.rb
89
+ - lib/tty/prompt/choices.rb
90
+ - lib/tty/prompt/codes.rb
91
+ - lib/tty/prompt/cursor.rb
87
92
  - lib/tty/prompt/distance.rb
88
93
  - lib/tty/prompt/error.rb
89
94
  - lib/tty/prompt/history.rb
95
+ - lib/tty/prompt/list.rb
90
96
  - lib/tty/prompt/mode.rb
91
97
  - lib/tty/prompt/mode/echo.rb
92
98
  - lib/tty/prompt/mode/raw.rb
99
+ - lib/tty/prompt/multi_list.rb
93
100
  - lib/tty/prompt/question.rb
94
101
  - lib/tty/prompt/question/modifier.rb
95
102
  - lib/tty/prompt/question/validation.rb
@@ -98,13 +105,21 @@ files:
98
105
  - lib/tty/prompt/response_delegation.rb
99
106
  - lib/tty/prompt/statement.rb
100
107
  - lib/tty/prompt/suggestion.rb
108
+ - lib/tty/prompt/test.rb
101
109
  - lib/tty/prompt/utils.rb
102
110
  - lib/tty/prompt/version.rb
103
111
  - spec/spec_helper.rb
104
112
  - spec/unit/ask_spec.rb
113
+ - spec/unit/choice/eql_spec.rb
114
+ - spec/unit/choice/from_spec.rb
115
+ - spec/unit/choices/add_spec.rb
116
+ - spec/unit/choices/each_spec.rb
117
+ - spec/unit/choices/new_spec.rb
118
+ - spec/unit/choices/pluck_spec.rb
119
+ - spec/unit/cursor/new_spec.rb
105
120
  - spec/unit/distance/distance_spec.rb
106
121
  - spec/unit/error_spec.rb
107
- - spec/unit/question/argument_spec.rb
122
+ - spec/unit/multi_select_spec.rb
108
123
  - spec/unit/question/character_spec.rb
109
124
  - spec/unit/question/default_spec.rb
110
125
  - spec/unit/question/in_spec.rb
@@ -113,10 +128,10 @@ files:
113
128
  - spec/unit/question/modifier/letter_case_spec.rb
114
129
  - spec/unit/question/modifier/whitespace_spec.rb
115
130
  - spec/unit/question/modify_spec.rb
116
- - spec/unit/question/valid_spec.rb
131
+ - spec/unit/question/required_spec.rb
117
132
  - spec/unit/question/validate_spec.rb
133
+ - spec/unit/question/validation/call_spec.rb
118
134
  - spec/unit/question/validation/coerce_spec.rb
119
- - spec/unit/question/validation/valid_value_spec.rb
120
135
  - spec/unit/reader/getc_spec.rb
121
136
  - spec/unit/response/read_bool_spec.rb
122
137
  - spec/unit/response/read_char_spec.rb
@@ -128,6 +143,7 @@ files:
128
143
  - spec/unit/response/read_spec.rb
129
144
  - spec/unit/response/read_string_spec.rb
130
145
  - spec/unit/say_spec.rb
146
+ - spec/unit/select_spec.rb
131
147
  - spec/unit/statement/initialize_spec.rb
132
148
  - spec/unit/suggest_spec.rb
133
149
  - spec/unit/warn_spec.rb
@@ -162,9 +178,16 @@ summary: A beautiful and powerful interactive command line prompt.
162
178
  test_files:
163
179
  - spec/spec_helper.rb
164
180
  - spec/unit/ask_spec.rb
181
+ - spec/unit/choice/eql_spec.rb
182
+ - spec/unit/choice/from_spec.rb
183
+ - spec/unit/choices/add_spec.rb
184
+ - spec/unit/choices/each_spec.rb
185
+ - spec/unit/choices/new_spec.rb
186
+ - spec/unit/choices/pluck_spec.rb
187
+ - spec/unit/cursor/new_spec.rb
165
188
  - spec/unit/distance/distance_spec.rb
166
189
  - spec/unit/error_spec.rb
167
- - spec/unit/question/argument_spec.rb
190
+ - spec/unit/multi_select_spec.rb
168
191
  - spec/unit/question/character_spec.rb
169
192
  - spec/unit/question/default_spec.rb
170
193
  - spec/unit/question/in_spec.rb
@@ -173,10 +196,10 @@ test_files:
173
196
  - spec/unit/question/modifier/letter_case_spec.rb
174
197
  - spec/unit/question/modifier/whitespace_spec.rb
175
198
  - spec/unit/question/modify_spec.rb
176
- - spec/unit/question/valid_spec.rb
199
+ - spec/unit/question/required_spec.rb
177
200
  - spec/unit/question/validate_spec.rb
201
+ - spec/unit/question/validation/call_spec.rb
178
202
  - spec/unit/question/validation/coerce_spec.rb
179
- - spec/unit/question/validation/valid_value_spec.rb
180
203
  - spec/unit/reader/getc_spec.rb
181
204
  - spec/unit/response/read_bool_spec.rb
182
205
  - spec/unit/response/read_char_spec.rb
@@ -188,6 +211,7 @@ test_files:
188
211
  - spec/unit/response/read_spec.rb
189
212
  - spec/unit/response/read_string_spec.rb
190
213
  - spec/unit/say_spec.rb
214
+ - spec/unit/select_spec.rb
191
215
  - spec/unit/statement/initialize_spec.rb
192
216
  - spec/unit/suggest_spec.rb
193
217
  - spec/unit/warn_spec.rb
@@ -1,30 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe TTY::Prompt::Question, '#argument' do
6
- let(:input) { StringIO.new }
7
- let(:output) { StringIO.new }
8
- let(:prompt) { TTY::Prompt.new(input, output) }
9
-
10
- it 'requires value to be present with helper' do
11
- input << ''
12
- input.rewind
13
- q = prompt.ask("What is your name?").argument(:required)
14
- expect { q.read }.to raise_error(ArgumentError)
15
- end
16
-
17
- it 'requires value to be present with option' do
18
- input << ''
19
- input.rewind
20
- q = prompt.ask("What is your name?", required: true)
21
- expect { q.read }.to raise_error(ArgumentError)
22
- end
23
-
24
- it "doesn't require value to be present" do
25
- input << ''
26
- input.rewind
27
- q = prompt.ask("What is your name?").argument(:optional)
28
- expect(q.read).to be_nil
29
- end
30
- end
@@ -1,46 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe TTY::Prompt::Question, '#valid' do
6
- let(:input) { StringIO.new }
7
- let(:output) { StringIO.new }
8
- let(:prompt) { TTY::Prompt.new(input, output) }
9
-
10
- let(:cards) { %w[ club diamond spade heart ] }
11
-
12
- it 'reads valid optios with helper' do
13
- input << 'club'
14
- input.rewind
15
- q = prompt.ask("What is your card suit sir?").valid(cards)
16
- expect(q.read_choice).to eq('club')
17
- end
18
-
19
- it 'reads valid options with option hash' do
20
- input << 'club'
21
- input.rewind
22
- q = prompt.ask("What is your card suit sir?", valid: cards)
23
- expect(q.read_choice).to eq('club')
24
- end
25
-
26
- it 'reads invalid option' do
27
- input << 'clover'
28
- input.rewind
29
- q = prompt.ask("What is your card suit sir?").valid(cards)
30
- expect { q.read_choice }.to raise_error(TTY::Prompt::InvalidArgument)
31
- end
32
-
33
- it 'needs argument' do
34
- input << ''
35
- input.rewind
36
- q = prompt.ask("What is your card suit sir?").valid(cards)
37
- expect { q.read_choice }.to raise_error(TTY::Prompt::ArgumentRequired)
38
- end
39
-
40
- it 'reads with default' do
41
- input << ''
42
- input.rewind
43
- q = prompt.ask("What is your card suit sir?").valid(cards).default('club')
44
- expect(q.read_choice).to eq('club')
45
- end
46
- end
@@ -1,22 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe TTY::Prompt::Question::Validation, '#valid_value?' do
6
- let(:validation) { /^[^\.]+\.[^\.]+/ }
7
- let(:instance) { described_class.new validation }
8
-
9
- it "validates nil input" do
10
- expect(instance.valid_value?(nil)).to eq(false)
11
- end
12
-
13
- it "validates successfully when the value matches pattern" do
14
- expect(instance.valid_value?('piotr.murach')).to eq(true)
15
- end
16
-
17
- it "fails validation when not maching pattern" do
18
- expect {
19
- instance.valid_value?('piotrmurach')
20
- }.to raise_error(TTY::Prompt::InvalidArgument)
21
- end
22
- end