Class: ContractedValue::Attribute

Inherits:
Object
  • Object
show all
Defined in:
lib/contracted_value/core.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:, contract:, refrigeration_mode:, default_value:) ⇒ Attribute

Returns a new instance of Attribute.



152
153
154
155
156
157
158
159
160
161
162
# File 'lib/contracted_value/core.rb', line 152

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

Instance Attribute Details

#contractObject (readonly)

Returns the value of attribute contract.



165
166
167
# File 'lib/contracted_value/core.rb', line 165

def contract
  @contract
end

#nameObject (readonly)

Returns the value of attribute name.



164
165
166
# File 'lib/contracted_value/core.rb', line 164

def name
  @name
end

#refrigeration_modeObject (readonly)

Returns the value of attribute refrigeration_mode.



166
167
168
# File 'lib/contracted_value/core.rb', line 166

def refrigeration_mode
  @refrigeration_mode
end

Class Method Details

.newObject



148
149
150
# File 'lib/contracted_value/core.rb', line 148

def self.new(...)
  ::IceNine.deep_freeze(super)
end

Instance Method Details

#extract_value(hash) ⇒ Object



168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
# File 'lib/contracted_value/core.rb', line 168

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