/** * Show the prompt to user and return the answer. * * @return mixed */ public function show() { /** * Ask for a number and validate it. */ do { $valid = true; $number = parent::show(); if ($number === "" && !$this->allowEmpty) { $valid = false; } elseif ($number === "") { $number = null; } elseif (!is_numeric($number)) { $this->getConsole()->writeLine("{$number} is not a number\n"); $valid = false; } elseif (!$this->allowFloat && round($number) != $number) { $this->getConsole()->writeLine("Please enter a non-floating number, i.e. " . round($number) . "\n"); $valid = false; } elseif ($this->max !== null && $number > $this->max) { $this->getConsole()->writeLine("Please enter a number not greater than " . $this->max . "\n"); $valid = false; } elseif ($this->min !== null && $number < $this->min) { $this->getConsole()->writeLine("Please enter a number not smaller than " . $this->min . "\n"); $valid = false; } } while (!$valid); /** * Cast proper type */ if ($number !== null) { $number = $this->allowFloat ? (double) $number : (int) $number; } return $this->lastResponse = $number; }
public function testCanReadLineWithEmptyAnswer() { $line = new Line('Where is Bryan ?', true); $line->setConsole($this->adapter); ob_start(); $response = $line->show(); $text = ob_get_clean(); $this->assertEquals($text, "Where is Bryan ?"); $this->assertEquals('', $response); }
/** * @param $question * @param ConsoleAdapter $console * * @return string|null */ private function askUrlQuestion($question, ConsoleAdapter $console) { $console->writeLine($question . ' (URL)', ColorInterface::CYAN); $prompt = new Line(''); $prompt->setConsole($console); $url = $prompt->show(); if (!(new Uri(['allowRelative' => false]))->isValid($url)) { $console->writeLine('The provided URL "' . $url . '" doesn\'t seem to be valid!', ColorInterface::RED); return null; } return $url; }
public function ask($promptText, $allowEmpty = false) { $prompt = new LinePrompt($promptText, $allowEmpty); $prompt->setConsole($this->console); return $prompt->show(); }
/** * Write a customizable line prompt * * @param $message * * @return string */ public function writeLinePrompt($message) { $this->writeLine(); // write prompt badge $this->writeBadge('badge_pick', Color::RED); // output prompt $prompt = new Line($this->translator->translate($message), false); $answer = $prompt->show(); $this->writeLine(); return $answer; }