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.



138
139
140
141
142
143
144
145
146
147
148
# 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

Instance Attribute Details

#contractObject (readonly)

Returns the value of attribute contract.



151
152
153
# File 'lib/contracted_value/core.rb', line 151

def contract
  @contract
end

#nameObject (readonly)

Returns the value of attribute name.



150
151
152
# File 'lib/contracted_value/core.rb', line 150

def name
  @name
end

#refrigeration_modeObject (readonly)

Returns the value of attribute refrigeration_mode.



152
153
154
# File 'lib/contracted_value/core.rb', line 152

def refrigeration_mode
  @refrigeration_mode
end

Class Method Details

.newObject



134
135
136
# File 'lib/contracted_value/core.rb', line 134

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

Instance Method Details

#extract_value(hash) ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# 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