mirror of
https://github.com/capistrano/capistrano
synced 2023-03-27 23:21:18 -04:00
Merge pull request #2055 from rolandasb/user-input-prompt-option
Add custom prompt support for user input
This commit is contained in:
commit
46e00dec15
4 changed files with 35 additions and 1 deletions
|
@ -49,6 +49,12 @@ server 'example.com', user: 'ssh_user_name', port: 22, password: fetch(:password
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
You can also show your own message by using `prompt` option:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
ask(:breakfast, "pancakes", prompt: "What's for breakfast?")
|
||||||
|
```
|
||||||
|
|
||||||
**Important!** `ask` will not prompt the user immediately. The question is
|
**Important!** `ask` will not prompt the user immediately. The question is
|
||||||
deferred until the first time `fetch` is used to obtain the setting. That means
|
deferred until the first time `fetch` is used to obtain the setting. That means
|
||||||
you can `ask` for many variables, but only the variables used by your task(s)
|
you can `ask` for many variables, but only the variables used by your task(s)
|
||||||
|
|
|
@ -49,7 +49,11 @@ module Capistrano
|
||||||
end
|
end
|
||||||
|
|
||||||
def question
|
def question
|
||||||
if default.nil?
|
if prompt && default.nil?
|
||||||
|
I18n.t(:question_prompt, key: prompt, scope: :capistrano)
|
||||||
|
elsif prompt
|
||||||
|
I18n.t(:question_prompt_default, key: prompt, default_value: default, scope: :capistrano)
|
||||||
|
elsif default.nil?
|
||||||
I18n.t(:question, key: key, scope: :capistrano)
|
I18n.t(:question, key: key, scope: :capistrano)
|
||||||
else
|
else
|
||||||
I18n.t(:question_default, key: key, default_value: default, scope: :capistrano)
|
I18n.t(:question_default, key: key, default_value: default, scope: :capistrano)
|
||||||
|
@ -63,6 +67,10 @@ module Capistrano
|
||||||
def stdin
|
def stdin
|
||||||
(options || {}).fetch(:stdin, $stdin)
|
(options || {}).fetch(:stdin, $stdin)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def prompt
|
||||||
|
(options || {}).fetch(:prompt, nil)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,6 +12,8 @@ en = {
|
||||||
written_file: "create %{file}",
|
written_file: "create %{file}",
|
||||||
question: "Please enter %{key}: ",
|
question: "Please enter %{key}: ",
|
||||||
question_default: "Please enter %{key} (%{default_value}): ",
|
question_default: "Please enter %{key} (%{default_value}): ",
|
||||||
|
question_prompt: "%{key}: ",
|
||||||
|
question_prompt_default: "%{key} (%{default_value}): ",
|
||||||
keeping_releases: "Keeping %{keep_releases} of %{releases} deployed releases on %{host}",
|
keeping_releases: "Keeping %{keep_releases} of %{releases} deployed releases on %{host}",
|
||||||
skip_cleanup: "Skipping cleanup of invalid releases on %{host}; unexpected foldername found (should be timestamp)",
|
skip_cleanup: "Skipping cleanup of invalid releases on %{host}; unexpected foldername found (should be timestamp)",
|
||||||
wont_delete_current_release: "Current release was marked for being removed but it's going to be skipped on %{host}",
|
wont_delete_current_release: "Current release was marked for being removed but it's going to be skipped on %{host}",
|
||||||
|
|
|
@ -6,6 +6,8 @@ module Capistrano
|
||||||
let(:question) { Question.new(key, default, stdin: stdin) }
|
let(:question) { Question.new(key, default, stdin: stdin) }
|
||||||
let(:question_without_echo) { Question.new(key, default, echo: false, stdin: stdin) }
|
let(:question_without_echo) { Question.new(key, default, echo: false, stdin: stdin) }
|
||||||
let(:question_without_default) { Question.new(key, nil, stdin: stdin) }
|
let(:question_without_default) { Question.new(key, nil, stdin: stdin) }
|
||||||
|
let(:question_prompt) { Question.new(key, default, stdin: stdin, prompt: "Your favorite branch") }
|
||||||
|
let(:question_prompt_without_default) { Question.new(key, nil, stdin: stdin, prompt: "Your favorite branch") }
|
||||||
let(:default) { :default }
|
let(:default) { :default }
|
||||||
let(:key) { :branch }
|
let(:key) { :branch }
|
||||||
let(:stdin) { stub(tty?: true) }
|
let(:stdin) { stub(tty?: true) }
|
||||||
|
@ -43,6 +45,22 @@ module Capistrano
|
||||||
|
|
||||||
expect(question_without_default.call).to eq(branch)
|
expect(question_without_default.call).to eq(branch)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "uses prompt and returns the value" do
|
||||||
|
$stdout.expects(:print).with("Your favorite branch (default): ")
|
||||||
|
stdin.expects(:gets).returns(branch)
|
||||||
|
stdin.expects(:noecho).never
|
||||||
|
|
||||||
|
expect(question_prompt.call).to eq(branch)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "uses prompt and returns the value but has no default between parenthesis" do
|
||||||
|
$stdout.expects(:print).with("Your favorite branch: ")
|
||||||
|
stdin.expects(:gets).returns(branch)
|
||||||
|
stdin.expects(:noecho).never
|
||||||
|
|
||||||
|
expect(question_prompt_without_default.call).to eq(branch)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "value is not entered" do
|
context "value is not entered" do
|
||||||
|
|
Loading…
Reference in a new issue