def parameter(name, options = {})
      param = {}
      options.each do |key, v|
        next if v === nil

        k = key.to_s.camelize.to_sym
        param[k] =
          case k
          when :AllowedPattern
            if v.class == Regexp
              v.source
            end
          when :Default
            @parameters[name] ||= v
          end
        param[k] ||= v
      end
      param[:Type] ||= 'String'
      self[:Parameters][name] = param
    end
def parameter(name, options = {})
      param = {}
      options.each do |key, v|
        next if v === nil

        k = key.to_s.camelize.to_sym
        param[k] =
          case k
          when :AllowedPattern
            if v.class == Regexp
              v.source
            end
          when :Default
            @parameters[name] ||= v
          end
        param[k] ||= v
      end
      param[:Type] ||= 'String'
      self[:Parameters][name] = param
    end
Declares a CloudFormation parameter

 @param name [String] The parameter name
 @param options [Hash]
 @option options [String] :type The type for the CloudFormation parameter
 @option options [String] :default A value of the appropriate type for the template to use if no value is specified when a stack is created. If you define constraints for the parameter, you must specify a value that adheres to those constraints.
 @option options [String] :no_echo Whether to mask the parameter value whenever anyone makes a call that describes the stack. If you set the value to `true`, the parameter value is masked with asterisks (*****).
 @option options [String] :allowed_values An array containing the list of values allowed for the parameter.
 @option options [String] :allowed_pattern A regular expression that represents the patterns you want to allow for String types.
 @option options [Number] :max_length An integer value that determines the largest number of characters you want to allow for String types.
 @option options [Number] :min_length An integer value that determines the smallest number of characters you want to allow for String types.
 @option options [Number] :max_value A numeric value that determines the largest numeric value you want to allow for Number types.
 @option options [Number] :min_value A numeric value that determines the smallest numeric value you want to allow for Number types.
 @option options [String] :description A string of up to 4000 characters that describes the parameter.
 @option options [String] :constraint_description A string that explains the constraint when the constraint is violated. For example, without a constraint description, a parameter that has an allowed pattern of `[A-Za-z0-9]+` displays the following error message when the user specifies an invalid value:

     ```Malformed input-Parameter MyParameter must match pattern [A-Za-z0-9]+```

     By adding a constraint description, such as must only contain upper- and lowercase letters, and numbers, you can display a customized error message:

     ```Malformed input-Parameter MyParameter must only contain upper and lower case letters and numbers```