diff options
author | Abinoam P. Marques Jr. <abinoam@gmail.com> | 2015-07-06 19:14:22 -0300 |
---|---|---|
committer | Abinoam P. Marques Jr. <abinoam@gmail.com> | 2015-07-06 19:14:22 -0300 |
commit | bb9902245d4a719c191e4e01d7e9a5a9e53d38ee (patch) | |
tree | a6c353544c203e4e1ccf4b33436c6fae8d3d6fcc /lib/highline/question/answer_converter.rb | |
parent | 22e4fdfaee6d4d2ccbfa318fc4083cde05280843 (diff) | |
parent | 88978cd2ff5da525f4feb81abcf32767e40790fa (diff) | |
download | highline-v2.0.0-develop.tar.gz |
Merge pull request #140 from abinoam/feat_refac_askv2.0.0-develop
Develop Release 2.0.0-develop.1
Diffstat (limited to 'lib/highline/question/answer_converter.rb')
-rw-r--r-- | lib/highline/question/answer_converter.rb | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/lib/highline/question/answer_converter.rb b/lib/highline/question/answer_converter.rb new file mode 100644 index 0000000..b840440 --- /dev/null +++ b/lib/highline/question/answer_converter.rb @@ -0,0 +1,84 @@ +# coding: utf-8 + +require 'forwardable' + +class HighLine + class Question + class AnswerConverter + extend Forwardable + + def_delegators :@question, + :answer, :answer=, :check_range, + :directory, :answer_type, :choices_complete + + def initialize(question) + @question = question + end + + def convert + return unless answer_type + + self.answer = convert_by_answer_type + check_range + answer + end + + private + + def convert_by_answer_type + if answer_type.respond_to? :parse + answer_type.parse(answer) + elsif answer_type.is_a? Class + send(answer_type.name) + else + send(answer_type.class.name) + end + end + + def String + HighLine::String(answer) + end + + # That's a weird name for a method! + # But it's working ;-) + define_method "HighLine::String" do + HighLine::String(answer) + end + + def Integer + Kernel.send(:Integer, answer) + end + + def Float + Kernel.send(:Float, answer) + end + + def Symbol + answer.to_sym + end + + def Regexp + Regexp.new(answer) + end + + def File + self.answer = choices_complete(answer) + File.open(File.join(directory.to_s, answer.last)) + end + + def Pathname + self.answer = choices_complete(answer) + Pathname.new(File.join(directory.to_s, answer.last)) + end + + def Array + self.answer = choices_complete(answer) + answer.last + end + + def Proc + answer_type.call(answer) + end + end + end +end
\ No newline at end of file |