Skip to content

Commit 6f901fa

Browse files
Fix Prompt#ask custom messages
1 parent 2c2c44e commit 6f901fa

File tree

3 files changed

+94
-44
lines changed

3 files changed

+94
-44
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Change log
22

3+
## [v0.23.2] - 2024-03-30
4+
5+
### Fixed
6+
* Fix Prompt#ask not having custom messages set from key arguments
7+
38
## [v0.23.1] - 2021-04-17
49

510
### Changed

lib/tty/prompt.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ def decorate(string, *colors)
176176
#
177177
# @api public
178178
def invoke_question(object, message, **options, &block)
179-
options[:messages] = self.class.messages
179+
options[:messages] = self.class.messages.merge(options[:messages] || {})
180180
question = object.new(self, **options)
181181
question.(message, &block)
182182
end

spec/unit/question/validate_spec.rb

+88-43
Original file line numberDiff line numberDiff line change
@@ -63,30 +63,53 @@
6363

6464
expect(answer).to eq("[email protected]")
6565
expect(prompt.output.string).to eq([
66-
"What is your email? ",
67-
"\e[2K\e[1GWhat is your email? w",
68-
"\e[2K\e[1GWhat is your email? wr",
69-
"\e[2K\e[1GWhat is your email? wro",
70-
"\e[2K\e[1GWhat is your email? wron",
71-
"\e[2K\e[1GWhat is your email? wrong",
72-
"\e[2K\e[1GWhat is your email? wrong\n",
73-
"\e[31m>>\e[0m Your answer is invalid (must match :email)\e[1A",
74-
"\e[2K\e[1G",
75-
"What is your email? ",
76-
"\e[2K\e[1GWhat is your email? p",
77-
"\e[2K\e[1GWhat is your email? p@",
78-
"\e[2K\e[1GWhat is your email? p@m",
79-
"\e[2K\e[1GWhat is your email? p@m.",
80-
"\e[2K\e[1GWhat is your email? [email protected]",
81-
"\e[2K\e[1GWhat is your email? [email protected]",
82-
"\e[2K\e[1GWhat is your email? [email protected]",
83-
"\e[2K\e[1GWhat is your email? [email protected]\n",
84-
"\e[2K\e[1G",
85-
"\e[1A\e[2K\e[1G",
86-
"What is your email? \e[[email protected]\e[0m\n"
87-
].join)
66+
"What is your email? ",
67+
"\e[2K\e[1GWhat is your email? w",
68+
"\e[2K\e[1GWhat is your email? wr",
69+
"\e[2K\e[1GWhat is your email? wro",
70+
"\e[2K\e[1GWhat is your email? wron",
71+
"\e[2K\e[1GWhat is your email? wrong",
72+
"\e[2K\e[1GWhat is your email? wrong\n",
73+
"\e[31m>>\e[0m Your answer is invalid (must match :email)\e[1A",
74+
"\e[2K\e[1G",
75+
"What is your email? ",
76+
"\e[2K\e[1GWhat is your email? p",
77+
"\e[2K\e[1GWhat is your email? p@",
78+
"\e[2K\e[1GWhat is your email? p@m",
79+
"\e[2K\e[1GWhat is your email? p@m.",
80+
"\e[2K\e[1GWhat is your email? [email protected]",
81+
"\e[2K\e[1GWhat is your email? [email protected]",
82+
"\e[2K\e[1GWhat is your email? [email protected]",
83+
"\e[2K\e[1GWhat is your email? [email protected]\n",
84+
"\e[2K\e[1G",
85+
"\e[1A\e[2K\e[1G",
86+
"What is your email? \e[[email protected]\e[0m\n"
87+
].join)
8888
end
8989

90+
let(:expected_custom_validation_message) { [
91+
"What is your email? ",
92+
"\e[2K\e[1GWhat is your email? w",
93+
"\e[2K\e[1GWhat is your email? wr",
94+
"\e[2K\e[1GWhat is your email? wro",
95+
"\e[2K\e[1GWhat is your email? wron",
96+
"\e[2K\e[1GWhat is your email? wrong",
97+
"\e[2K\e[1GWhat is your email? wrong\n",
98+
"\e[31m>>\e[0m Not an email!\e[1A",
99+
"\e[2K\e[1G",
100+
"What is your email? ",
101+
"\e[2K\e[1GWhat is your email? p",
102+
"\e[2K\e[1GWhat is your email? p@",
103+
"\e[2K\e[1GWhat is your email? p@m",
104+
"\e[2K\e[1GWhat is your email? p@m.",
105+
"\e[2K\e[1GWhat is your email? [email protected]",
106+
"\e[2K\e[1GWhat is your email? [email protected]",
107+
"\e[2K\e[1GWhat is your email? [email protected]",
108+
"\e[2K\e[1G",
109+
"\e[1A\e[2K\e[1G",
110+
"What is your email? \e[[email protected]\e[0m\n"
111+
].join }
112+
90113
it "provides custom error message for wrong input" do
91114
prompt.input << "wrong\n[email protected]"
92115
prompt.input.rewind
@@ -95,28 +118,50 @@
95118
q.messages[:valid?] = "Not an email!"
96119
end
97120

121+
expect(answer).to eq("[email protected]")
122+
expect(prompt.output.string).to eq(expected_custom_validation_message)
123+
end
124+
125+
it "provides custom error message for wrong input by keyword parameter instead of passing by block" do
126+
prompt.input << "wrong\n[email protected]"
127+
prompt.input.rewind
128+
129+
answer = prompt.ask("What is your email?", validate: :email,
130+
messages: { valid?: 'Not an email!' })
131+
132+
expect(answer).to eq("[email protected]")
133+
expect(prompt.output.string).to eq(expected_custom_validation_message)
134+
end
135+
136+
it "keeps the default messages after adding only one custom message" do
137+
prompt.input << "\np\n[email protected]"
138+
prompt.input.rewind
139+
140+
answer = prompt.ask("What is your email?", required: true, validate: :email,
141+
messages: { valid?: 'Not an email!' })
142+
98143
expect(answer).to eq("[email protected]")
99144
expect(prompt.output.string).to eq([
100-
"What is your email? ",
101-
"\e[2K\e[1GWhat is your email? w",
102-
"\e[2K\e[1GWhat is your email? wr",
103-
"\e[2K\e[1GWhat is your email? wro",
104-
"\e[2K\e[1GWhat is your email? wron",
105-
"\e[2K\e[1GWhat is your email? wrong",
106-
"\e[2K\e[1GWhat is your email? wrong\n",
107-
"\e[31m>>\e[0m Not an email!\e[1A",
108-
"\e[2K\e[1G",
109-
"What is your email? ",
110-
"\e[2K\e[1GWhat is your email? p",
111-
"\e[2K\e[1GWhat is your email? p@",
112-
"\e[2K\e[1GWhat is your email? p@m",
113-
"\e[2K\e[1GWhat is your email? p@m.",
114-
"\e[2K\e[1GWhat is your email? [email protected]",
115-
"\e[2K\e[1GWhat is your email? [email protected]",
116-
"\e[2K\e[1GWhat is your email? [email protected]",
117-
"\e[2K\e[1G",
118-
"\e[1A\e[2K\e[1G",
119-
"What is your email? \e[[email protected]\e[0m\n"
120-
].join)
145+
"What is your email? ",
146+
"\e[2K\e[1GWhat is your email? \n",
147+
"\e[31m>>\e[0m Value must be provided\e[1A",
148+
"\e[2K\e[1G",
149+
"What is your email? ",
150+
"\e[2K\e[1GWhat is your email? p",
151+
"\e[2K\e[1GWhat is your email? p\n",
152+
"\e[31m>>\e[0m Not an email!\e[1A",
153+
"\e[2K\e[1G",
154+
"What is your email? ",
155+
"\e[2K\e[1GWhat is your email? p",
156+
"\e[2K\e[1GWhat is your email? p@",
157+
"\e[2K\e[1GWhat is your email? p@m",
158+
"\e[2K\e[1GWhat is your email? p@m.",
159+
"\e[2K\e[1GWhat is your email? [email protected]",
160+
"\e[2K\e[1GWhat is your email? [email protected]",
161+
"\e[2K\e[1GWhat is your email? [email protected]",
162+
"\e[2K\e[1G",
163+
"\e[1A\e[2K\e[1G",
164+
"What is your email? \e[[email protected]\e[0m\n"
165+
].join)
121166
end
122167
end

0 commit comments

Comments
 (0)