Method: Sfn::CommandModule::Template::InstanceMethods#request_compile_parameter
- Defined in:
- lib/sfn/command_module/template.rb
#request_compile_parameter(p_name, p_config, cur_val, nested = false) ⇒ Object
Request compile time parameter value
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/sfn/command_module/template.rb', line 48 def request_compile_parameter(p_name, p_config, cur_val, nested = false) result = nil attempts = 0 parameter_type = p_config.fetch(:type, "string").to_s.downcase.to_sym if parameter_type == :complex ui.debug "Compile time parameter `#{p_name}` is a complex type. Not requesting value from user." if cur_val.nil? raise ArgumentError.new "No value provided for `#{p_name}` parameter (Complex data type)" else cur_val end else unless cur_val || p_config[:default].nil? cur_val = p_config[:default] end if cur_val.is_a?(Array) cur_val = cur_val.map(&:to_s).join(",") end until result && (!result.respond_to?(:empty?) || !result.empty?) attempts += 1 if config[:interactive_parameters] && (!nested || !p_config.key?(:prompt_when_nested) || p_config[:prompt_when_nested] == true) result = ui.ask_question( p_name.to_s.split("_").map(&:capitalize).join, :default => cur_val.to_s.empty? ? nil : cur_val.to_s, ) else result = cur_val.to_s end case parameter_type when :string if p_config[:multiple] result = result.split(",").map(&:strip) end when :number if p_config[:multiple] result = result.split(",").map(&:strip) new_result = result.map do |item| new_item = item.to_i new_item if new_item.to_s == item end result = new_result.size == result.size ? new_result : [] else new_result = result.to_i result = new_result.to_s == result ? new_result : nil end else raise ArgumentError.new "Unknown compile time parameter type provided: `#{p_config[:type].inspect}` (Parameter: #{p_name})" end valid = validate_parameter(result, p_config.to_smash) unless valid == true result = nil valid.each do |invalid_msg| ui.error "#{p_name}: #{invalid_msg.last}" end end if result.nil? || (result.respond_to?(:empty?) && result.empty?) if attempts > MAX_PARAMETER_ATTEMPTS ui.fatal "Failed to receive allowed parameter! (Parameter: #{p_name})" exit 1 end end end result end end |