diff --git a/lib/runbook/run.rb b/lib/runbook/run.rb index 9cf69a7..7ae9ea2 100644 --- a/lib/runbook/run.rb +++ b/lib/runbook/run.rb @@ -64,7 +64,7 @@ def runbook__statements__ask(object, metadata) return end - result = metadata[:toolbox].ask(object.prompt) + result = metadata[:toolbox].ask(object.prompt, default: object.default) object.parent.define_singleton_method(object.into.to_sym) do result end diff --git a/lib/runbook/toolbox.rb b/lib/runbook/toolbox.rb index 023e651..e321fbf 100644 --- a/lib/runbook/toolbox.rb +++ b/lib/runbook/toolbox.rb @@ -6,8 +6,8 @@ def initialize @prompt = TTY::Prompt.new end - def ask(msg) - prompt.ask(msg) + def ask(msg, default: nil) + prompt.ask(msg, default: default) end def expand(msg, choices) diff --git a/lib/runbook/views/markdown.rb b/lib/runbook/views/markdown.rb index a50341b..d584d8f 100644 --- a/lib/runbook/views/markdown.rb +++ b/lib/runbook/views/markdown.rb @@ -20,7 +20,8 @@ def self.runbook__entities__step(object, output, metadata) end def self.runbook__statements__ask(object, output, metadata) - output << " #{object.prompt}\n\n" + default_msg = object.default ? " (default: #{object.default})" : "" + output << " #{object.prompt} into #{object.into}#{default_msg}\n\n" end def self.runbook__statements__assert(object, output, metadata) diff --git a/spec/run_spec.rb b/spec/run_spec.rb index 958b33d..dccb4ec 100644 --- a/spec/run_spec.rb +++ b/spec/run_spec.rb @@ -232,12 +232,28 @@ it "prompts the user and stores the result on the parent object" do result = "result" - expect(toolbox).to receive(:ask).with(prompt).and_return(result) + expect(toolbox).to receive(:ask).with(prompt, default: nil).and_return(result) subject.execute(object, metadata) expect(object.parent.sky_color).to eq(result) end + + context "when default specified" do + let (:default) { "Pope where a hat?" } + let (:object) { + Runbook::Statements::Ask.new(prompt, into: into, default: default) + } + + it "passes the default value to the ask statement" do + result = "result" + expect(toolbox).to receive(:ask).with(prompt, default: default).and_return(result) + + subject.execute(object, metadata) + + expect(object.parent.sky_color).to eq(result) + end + end end describe "runbook__entities__confirm" do diff --git a/spec/toolbox_spec.rb b/spec/toolbox_spec.rb index c349ec4..fd2eb00 100644 --- a/spec/toolbox_spec.rb +++ b/spec/toolbox_spec.rb @@ -4,6 +4,7 @@ let(:prompt) { instance_double("TTY::Prompt") } let(:toolbox) { Runbook::Toolbox.new } let(:msg) { "Something I want to say" } + let(:default) { "default" } let(:choices) { [ { key: "y", name: "Yes", value: true }, ] } @@ -20,9 +21,14 @@ describe "ask" do it "passes its argument to prompt.ask" do - expect(prompt).to receive(:ask).with(msg) + expect(prompt).to receive(:ask).with(msg, default: nil) toolbox.ask(msg) end + + it "passes its default to prompt.ask" do + expect(prompt).to receive(:ask).with(msg, default: default) + toolbox.ask(msg, default: default) + end end describe "expand" do