Skip to content

Commit

Permalink
Merged custom messages into default messages options
Browse files Browse the repository at this point in the history
  • Loading branch information
lucasmenezesds committed Mar 30, 2024
1 parent 2c2c44e commit cf563e4
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 44 deletions.
2 changes: 1 addition & 1 deletion lib/tty/prompt.rb
Expand Up @@ -176,7 +176,7 @@ def decorate(string, *colors)
#
# @api public
def invoke_question(object, message, **options, &block)
options[:messages] = self.class.messages
options[:messages] = self.class.messages.merge(options[:messages] || {})
question = object.new(self, **options)
question.(message, &block)
end
Expand Down
131 changes: 88 additions & 43 deletions spec/unit/question/validate_spec.rb
Expand Up @@ -63,30 +63,53 @@

expect(answer).to eq("p@m.com")
expect(prompt.output.string).to eq([
"What is your email? ",
"\e[2K\e[1GWhat is your email? w",
"\e[2K\e[1GWhat is your email? wr",
"\e[2K\e[1GWhat is your email? wro",
"\e[2K\e[1GWhat is your email? wron",
"\e[2K\e[1GWhat is your email? wrong",
"\e[2K\e[1GWhat is your email? wrong\n",
"\e[31m>>\e[0m Your answer is invalid (must match :email)\e[1A",
"\e[2K\e[1G",
"What is your email? ",
"\e[2K\e[1GWhat is your email? p",
"\e[2K\e[1GWhat is your email? p@",
"\e[2K\e[1GWhat is your email? p@m",
"\e[2K\e[1GWhat is your email? p@m.",
"\e[2K\e[1GWhat is your email? p@m.c",
"\e[2K\e[1GWhat is your email? p@m.co",
"\e[2K\e[1GWhat is your email? p@m.com",
"\e[2K\e[1GWhat is your email? p@m.com\n",
"\e[2K\e[1G",
"\e[1A\e[2K\e[1G",
"What is your email? \e[32mp@m.com\e[0m\n"
].join)
"What is your email? ",
"\e[2K\e[1GWhat is your email? w",
"\e[2K\e[1GWhat is your email? wr",
"\e[2K\e[1GWhat is your email? wro",
"\e[2K\e[1GWhat is your email? wron",
"\e[2K\e[1GWhat is your email? wrong",
"\e[2K\e[1GWhat is your email? wrong\n",
"\e[31m>>\e[0m Your answer is invalid (must match :email)\e[1A",
"\e[2K\e[1G",
"What is your email? ",
"\e[2K\e[1GWhat is your email? p",
"\e[2K\e[1GWhat is your email? p@",
"\e[2K\e[1GWhat is your email? p@m",
"\e[2K\e[1GWhat is your email? p@m.",
"\e[2K\e[1GWhat is your email? p@m.c",
"\e[2K\e[1GWhat is your email? p@m.co",
"\e[2K\e[1GWhat is your email? p@m.com",
"\e[2K\e[1GWhat is your email? p@m.com\n",
"\e[2K\e[1G",
"\e[1A\e[2K\e[1G",
"What is your email? \e[32mp@m.com\e[0m\n"
].join)
end

let(:expected_custom_validation_message) { [
"What is your email? ",
"\e[2K\e[1GWhat is your email? w",
"\e[2K\e[1GWhat is your email? wr",
"\e[2K\e[1GWhat is your email? wro",
"\e[2K\e[1GWhat is your email? wron",
"\e[2K\e[1GWhat is your email? wrong",
"\e[2K\e[1GWhat is your email? wrong\n",
"\e[31m>>\e[0m Not an email!\e[1A",
"\e[2K\e[1G",
"What is your email? ",
"\e[2K\e[1GWhat is your email? p",
"\e[2K\e[1GWhat is your email? p@",
"\e[2K\e[1GWhat is your email? p@m",
"\e[2K\e[1GWhat is your email? p@m.",
"\e[2K\e[1GWhat is your email? p@m.c",
"\e[2K\e[1GWhat is your email? p@m.co",
"\e[2K\e[1GWhat is your email? p@m.com",
"\e[2K\e[1G",
"\e[1A\e[2K\e[1G",
"What is your email? \e[32mp@m.com\e[0m\n"
].join }

it "provides custom error message for wrong input" do
prompt.input << "wrong\np@m.com"
prompt.input.rewind
Expand All @@ -95,28 +118,50 @@
q.messages[:valid?] = "Not an email!"
end

expect(answer).to eq("p@m.com")
expect(prompt.output.string).to eq(expected_custom_validation_message)
end

it "provides custom error message for wrong input by keyword parameter instead of passing by block" do
prompt.input << "wrong\np@m.com"
prompt.input.rewind

answer = prompt.ask("What is your email?", validate: :email,
messages: { valid?: 'Not an email!' })

expect(answer).to eq("p@m.com")
expect(prompt.output.string).to eq(expected_custom_validation_message)
end

it "keeps the default messages after adding only one custom message" do
prompt.input << "\np\np@m.com"
prompt.input.rewind

answer = prompt.ask("What is your email?", required: true, validate: :email,
messages: { valid?: 'Not an email!' })

expect(answer).to eq("p@m.com")
expect(prompt.output.string).to eq([
"What is your email? ",
"\e[2K\e[1GWhat is your email? w",
"\e[2K\e[1GWhat is your email? wr",
"\e[2K\e[1GWhat is your email? wro",
"\e[2K\e[1GWhat is your email? wron",
"\e[2K\e[1GWhat is your email? wrong",
"\e[2K\e[1GWhat is your email? wrong\n",
"\e[31m>>\e[0m Not an email!\e[1A",
"\e[2K\e[1G",
"What is your email? ",
"\e[2K\e[1GWhat is your email? p",
"\e[2K\e[1GWhat is your email? p@",
"\e[2K\e[1GWhat is your email? p@m",
"\e[2K\e[1GWhat is your email? p@m.",
"\e[2K\e[1GWhat is your email? p@m.c",
"\e[2K\e[1GWhat is your email? p@m.co",
"\e[2K\e[1GWhat is your email? p@m.com",
"\e[2K\e[1G",
"\e[1A\e[2K\e[1G",
"What is your email? \e[32mp@m.com\e[0m\n"
].join)
"What is your email? ",
"\e[2K\e[1GWhat is your email? \n",
"\e[31m>>\e[0m Value must be provided\e[1A",
"\e[2K\e[1G",
"What is your email? ",
"\e[2K\e[1GWhat is your email? p",
"\e[2K\e[1GWhat is your email? p\n",
"\e[31m>>\e[0m Not an email!\e[1A",
"\e[2K\e[1G",
"What is your email? ",
"\e[2K\e[1GWhat is your email? p",
"\e[2K\e[1GWhat is your email? p@",
"\e[2K\e[1GWhat is your email? p@m",
"\e[2K\e[1GWhat is your email? p@m.",
"\e[2K\e[1GWhat is your email? p@m.c",
"\e[2K\e[1GWhat is your email? p@m.co",
"\e[2K\e[1GWhat is your email? p@m.com",
"\e[2K\e[1G",
"\e[1A\e[2K\e[1G",
"What is your email? \e[32mp@m.com\e[0m\n"
].join)
end
end

0 comments on commit cf563e4

Please sign in to comment.