From 0d0ed541c8f6efbebfca7456f02fc271c18ec68b Mon Sep 17 00:00:00 2001 From: Thibault Jouan Date: Tue, 21 Jan 2014 01:19:17 +0000 Subject: [PATCH] Allow `ask' action to customize choices prompt --- features/recipes/ask.feature | 6 +++--- lib/producer/core/prompter.rb | 4 ++-- spec/producer/core/prompter_spec.rb | 4 ++-- spec/producer/core/task/dsl_spec.rb | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/features/recipes/ask.feature b/features/recipes/ask.feature index 4b5c889..9871162 100644 --- a/features/recipes/ask.feature +++ b/features/recipes/ask.feature @@ -4,9 +4,9 @@ Feature: `ask' recipe keyword Given a recipe with: """ task :ask_letter do - letter = ask 'Which letter?', %w[A B] + letter = ask 'Which letter?', [[:a, ?A], [:b, ?B]] - echo letter + echo letter.inspect end """ When I execute the recipe interactively @@ -17,6 +17,6 @@ Feature: `ask' recipe keyword 0: A 1: B Choice: - B + :b """ And the exit status must be 0 diff --git a/lib/producer/core/prompter.rb b/lib/producer/core/prompter.rb index 6cbb7a5..11eb17b 100644 --- a/lib/producer/core/prompter.rb +++ b/lib/producer/core/prompter.rb @@ -10,11 +10,11 @@ module Producer def prompt(question, choices) cs = choices.each_with_index.inject('') do |m, (c, i)| - m += "#{i}: #{c}\n" + m += "#{i}: #{c.last}\n" end output.puts "#{question}\n#{cs}Choice:" choice = input.gets - choices[choice.to_i] + choices[choice.to_i].first end end end diff --git a/spec/producer/core/prompter_spec.rb b/spec/producer/core/prompter_spec.rb index cda76ed..03dd73a 100644 --- a/spec/producer/core/prompter_spec.rb +++ b/spec/producer/core/prompter_spec.rb @@ -19,7 +19,7 @@ module Producer::Core describe '#prompt' do let(:question) { 'Which letter?' } - let(:choices) { %w[A B] } + let(:choices) { [[:a, ?A], [:b, ?B]] } it 'prompts choices' do prompter.prompt question, choices @@ -34,7 +34,7 @@ module Producer::Core it 'returns value for entry chosen by user' do input.puts '1' input.rewind - expect(prompter.prompt question, choices).to eq 'B' + expect(prompter.prompt question, choices).to eq :b end end end diff --git a/spec/producer/core/task/dsl_spec.rb b/spec/producer/core/task/dsl_spec.rb index 0f22950..d84f63d 100644 --- a/spec/producer/core/task/dsl_spec.rb +++ b/spec/producer/core/task/dsl_spec.rb @@ -85,7 +85,7 @@ module Producer::Core describe '#ask' do let(:question) { 'Which letter?' } - let(:choices) { %w[A B] } + let(:choices) { [[:a, ?A], [:b, ?B]] } let(:prompter_class) { double('prompter class').as_null_object } subject(:ask) { dsl.ask question, choices, prompter: prompter_class }