class Highway::Steps::Parameters::Single

This class is used in step definition classes to represent a single parameter of a step.

Attributes

default[R]

Default value of the parameter.

@return [Object, nil]

type[R]

Type of the parameter.

@return [Highway::Steps::Types::*]

Public Class Methods

new(name:, type:, required:, default: nil) click to toggle source

Initialize an instance.

@param name [String] Name of the parameter. @param type [Highway::Steps::Types::*] Type of the parameter. @param required [Boolean] Whether parametr is required. @param default [Object, nil] Default value of the parameter.

# File lib/highway/steps/parameters/single.rb, line 24
def initialize(name:, type:, required:, default: nil)
  @name = name
  @required = required
  @type = type
  @default = default
  assert_default_value_valid()
end

Public Instance Methods

typecheck_and_validate(value, interface:, keypath: []) click to toggle source

Typecheck and validate a value of the parameter.

This method returns typechecked, coerced and validated value or raises a fatal error if value has invalid type, can't be coerced or is othweriwse invalid.

@param value [Object] A value. @param interface [Highway::Interface] An interface instance. @param keypath [Array<String>] A keypath to be used for debugging purposes.

@return [Object]

# File lib/highway/steps/parameters/single.rb, line 53
def typecheck_and_validate(value, interface:, keypath: [])
  typechecked = @type.typecheck_and_validate(value)
  if typechecked != nil
    typechecked
  else
    interface.fatal!("Invalid value: '#{value}' for parameter: '#{Utilities::keypath_to_s(keypath)}'.")
  end
end

Private Instance Methods

assert_default_value_valid() click to toggle source
# File lib/highway/steps/parameters/single.rb, line 64
def assert_default_value_valid()
  if @default != nil && @type.typecheck_and_validate(@default) == nil
    raise ArgumentError.new("Default value: '#{@default}' is not a valid value for parameter: '#{@name}'.")
  end
end