module Sfn::Utils::StackParameterValidator
Helper utility for validating stack parameters
Constants
- GOOGLE_CONSTRAINT_MAP
GCDM parameter mapping
- HEAT_CONSTRAINT_MAP
HOT parameter mapping
- PARAMETER_DEFINITION_MAP
Parameter mapping identifier and content
- PARAMETER_VALIDATIONS
Supported parameter validations
Public Instance Methods
Parameter matches allowed pattern
@param value [String] @param pdef [Hash] parameter definition @option pdef [String] 'AllowedPattern' @return [TrueClass, String]
# File lib/sfn/utils/stack_parameter_validator.rb, line 115 def allowed_pattern(value, pdef) if value.match(%r{#{pdef}}) true else "Not a valid pattern. Must match: #{pdef}" end end
Parameter is within allowed values
@param value [String] @param pdef [Hash] parameter definition @option pdef [Array<String>] 'AllowedValues' @return [TrueClass, String]
# File lib/sfn/utils/stack_parameter_validator.rb, line 101 def allowed_values(value, pdef) if pdef.include?(value) true else "Not an allowed value: #{pdef.join(", ")}" end end
Check if type is a list type
@param type [String] @return [TrueClass, FalseClass]
# File lib/sfn/utils/stack_parameter_validator.rb, line 183 def list_type?(type) type = type.downcase type.start_with?("comma") || type.start_with?("list<") end
Parameter length is less than or equal to max length
@param value [String, Integer] @param pdef [Hash] parameter definition @option pdef [String] 'MaxLength' @return [TrueClass, String]
# File lib/sfn/utils/stack_parameter_validator.rb, line 129 def max_length(value, pdef) if value.length <= pdef.to_i true else "Value must not exceed #{pdef} characters" end end
Parameter value is less than or equal to max value
@param value [String] @param pdef [Hash] parameter definition @option pdef [String] 'MaxValue' @return [TrueClass, String]
# File lib/sfn/utils/stack_parameter_validator.rb, line 157 def max_value(value, pdef) if value.to_i <= pdef.to_i true else "Value must not be greater than #{pdef}" end end
Parameter length is greater than or equal to min length
@param value [String] @param pdef [Hash] parameter definition @option pdef [String] 'MinLength' @return [TrueClass, String]
# File lib/sfn/utils/stack_parameter_validator.rb, line 143 def min_length(value, pdef) if value.length >= pdef.to_i true else "Value must be at least #{pdef} characters" end end
Parameter value is greater than or equal to min value
@param value [String] @param pdef [Hash] parameter definition @option pdef [String] 'MinValue' @return [TrueClass, String]
# File lib/sfn/utils/stack_parameter_validator.rb, line 171 def min_value(value, pdef) if value.to_i >= pdef.to_i true else "Value must not be less than #{pdef}" end end
Reformat parameter definition with proper keys to allow validation for templates different parameter definition layout
@param pdef [Hash] @return [Hash]
# File lib/sfn/utils/stack_parameter_validator.rb, line 80 def reformat_definition(pdef) new_def = pdef PARAMETER_DEFINITION_MAP.each do |ident, mapping| if pdef[ident] new_def = Smash.new mapping.each do |new_key, current_path| if pdef.get(*current_path) new_def[new_key] = pdef.get(*current_path) end end end end new_def end
Validate a parameters
@param value [Object] value for parameter @param parameter_definition [Hash] @option parameter_definition [Array<String>] 'AllowedValues' @option parameter_definition [String] 'AllowedPattern' @option parameter_definition [String, Integer] 'MaxLength' @option parameter_definition [String, Integer] 'MinLength' @option parameter_definition [String, Integer] 'MaxValue' @option parameter_definition [String, Integer] 'MinValue' @return [TrueClass, Array<String>] true if valid. array of string errors if invalid
# File lib/sfn/utils/stack_parameter_validator.rb, line 53 def validate_parameter(value, parameter_definition) return [[:blank, "Value cannot be blank"]] if value.to_s.strip.empty? parameter_definition = reformat_definition(parameter_definition) value_list = list_type?(parameter_definition.fetch("Type", parameter_definition["type"].to_s)) ? value.to_s.split(",") : [value] result = PARAMETER_VALIDATIONS.map do |validator_key| valid_key = parameter_definition.keys.detect do |pdef_key| pdef_key.downcase.gsub("_", "") == validator_key.downcase.gsub("_", "") end if valid_key value_list.map do |value| res = self.send(validator_key, value, parameter_definition[valid_key]) res == true ? true : [validator_key, res] end else true end end.flatten(1) result.delete_if { |x| x == true } result.empty? ? true : result end