Method: ActiveModel::LazyAttributeSet#fetch_value

Defined in:
lib/active_model/attribute_set/builder.rb

#fetch_value(name, &block) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/active_model/attribute_set/builder.rb', line 41

def fetch_value(name, &block)
  if attr = @attributes[name]
    return attr.value(&block)
  end

  @casted_values.fetch(name) do
    value_present = true
    value = values.fetch(name) { value_present = false }

    if value_present
      type = additional_types.fetch(name, types[name])
      @casted_values[name] = type.deserialize(value)
    else
      attr = default_attribute(name, value_present, value)
      attr.value(&block)
    end
  end
end