class ContractedValue::Attribute

Attributes

contract[R]
default_value[R]
name[R]
refrigeration_mode[R]

Public Class Methods

new(*) click to toggle source
Calls superclass method
# File lib/contracted_value/core.rb, line 134
def self.new(*)
  ::IceNine.deep_freeze(super)
end
new( name:, contract:, refrigeration_mode:, default_value: ) click to toggle source
# File lib/contracted_value/core.rb, line 138
def initialize(
  name:, contract:, refrigeration_mode:, default_value:
)

  @name = name
  @contract = contract
  @refrigeration_mode = refrigeration_mode
  @default_value = default_value

  raise_error_if_inputs_invalid
end

Public Instance Methods

extract_value(hash) click to toggle source
# File lib/contracted_value/core.rb, line 154
def extract_value(hash)
  if hash.key?(name)
    attr_value = hash.fetch(name)

    unless Contract.valid?(attr_value, contract)
      raise(
        Errors::InvalidAttributeValue.new(name, attr_value),
      )
    end

    return attr_value
  end

  # Data missing from input
  # Use default value if present
  # Raise error otherwise

  return default_value if default_value_present?

  raise(
    Errors::MissingAttributeInput.new(
      name,
    ),
  )
end

Private Instance Methods

default_value_present?() click to toggle source
# File lib/contracted_value/core.rb, line 209
def default_value_present?
  # The default value of default value (ATTR_DEFAULT_VALUE_ABSENT_VAL)
  # only represents the absence of default value
  default_value != Private::ATTR_DEFAULT_VALUE_ABSENT_VAL
end
raise_error_if_default_value_invalid() click to toggle source
# File lib/contracted_value/core.rb, line 197
def raise_error_if_default_value_invalid
  return unless default_value_present?
  return if Contract.valid?(default_value, contract)

  raise(
    Errors::InvalidAttributeDefaultValue.new(
      name,
      default_value,
    ),
  )
end
raise_error_if_inputs_invalid() click to toggle source
# File lib/contracted_value/core.rb, line 184
def raise_error_if_inputs_invalid
  raise_error_if_refrigeration_mode_invalid
  raise_error_if_default_value_invalid
end
raise_error_if_refrigeration_mode_invalid() click to toggle source
# File lib/contracted_value/core.rb, line 189
def raise_error_if_refrigeration_mode_invalid
  return if RefrigerationMode::Enum.all.include?(refrigeration_mode)

  raise Errors::InvalidRefrigerationMode.new(
    refrigeration_mode,
  )
end