Class: ActiveModel::LazyAttributeSet
Do not use. This class is for internal use only.
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
AttributeSet
|
|
|
Instance Chain:
self,
AttributeSet
|
|
| Inherits: |
ActiveModel::AttributeSet
|
| Defined in: | activemodel/lib/active_model/attribute_set.rb |
Class Method Summary
- .new(values, types, additional_types, default_attributes, attributes, default_keys) ⇒ LazyAttributeSet constructor
AttributeSet - Inherited
Instance Attribute Summary
- #additional_types readonly private
- #default_attributes readonly private
- #types readonly private
- #values readonly private
AttributeSet - Inherited
Instance Method Summary
- #deep_dup
- #fetch_value(name, &block)
- #fetch_value!(name)
- #key?(name) ⇒ Boolean
- #keys
- #map(&block)
- #attributes protected
- #default_attribute(name, value_present = true, value = values.fetch(name) { value_present = false }) private
AttributeSet - Inherited
| #==, #[], #[]=, #accessed, #cast_types, #deep_dup, #fetch_value, | |
| #fetch_value! | Like #fetch_value, but raises |
| #freeze, | |
| #include? | Alias for AttributeSet#key?. |
| #initialize_clone, #initialize_dup, #key?, #keys, #map, #reset, #reverse_merge!, | |
| #to_h | Alias for AttributeSet#to_hash. |
| #to_hash, #values, #values_before_type_cast, #values_for_database, #write_cast_value, #write_from_database, #write_from_user, #default_attribute | |
Constructor Details
.new(values, types, additional_types, default_attributes, attributes, default_keys) ⇒ LazyAttributeSet
# File 'activemodel/lib/active_model/attribute_set.rb', line 210
def initialize(values, types, additional_types, default_attributes, attributes, default_keys) super(attributes) @values = values @types = types @additional_types = additional_types @default_attributes = default_attributes @default_keys = default_keys @casted_values = values.is_a?(IndexedRow) ? values.new_empty_mutable_row : {} @materialized = false end
Instance Attribute Details
#additional_types (readonly, private)
[ GitHub ]# File 'activemodel/lib/active_model/attribute_set.rb', line 300
attr_reader :values, :types, :additional_types, :default_attributes
#default_attributes (readonly, private)
[ GitHub ]# File 'activemodel/lib/active_model/attribute_set.rb', line 300
attr_reader :values, :types, :additional_types, :default_attributes
#types (readonly, private)
[ GitHub ]# File 'activemodel/lib/active_model/attribute_set.rb', line 300
attr_reader :values, :types, :additional_types, :default_attributes
#values (readonly, private)
[ GitHub ]# File 'activemodel/lib/active_model/attribute_set.rb', line 300
attr_reader :values, :types, :additional_types, :default_attributes
Instance Method Details
#attributes (protected)
[ GitHub ]#deep_dup
[ GitHub ]# File 'activemodel/lib/active_model/attribute_set.rb', line 267
def deep_dup LazyAttributeSet.new( values.dup, types.dup, additional_types.dup, default_attributes.dup, attributes.transform_values(&:deep_dup), @default_keys ) end
#default_attribute(name, value_present = true, value = values.fetch(name) { value_present = false }) (private)
[ GitHub ]# File 'activemodel/lib/active_model/attribute_set.rb', line 302
def default_attribute( name, value_present = true, value = values.fetch(name) { value_present = false } ) type = additional_types.fetch(name, types[name]) if value_present @attributes[name] = Attribute.from_database(name, value, type, @casted_values[name]) elsif types.key?(name) if (@default_keys.nil? || @default_keys.include?(name)) && (attr = default_attributes[name]) @attributes[name] = attr.dup else @attributes[name] = Attribute.uninitialized(name, type) end else Attribute.null(name) end end
#fetch_value(name, &block)
[ GitHub ]# File 'activemodel/lib/active_model/attribute_set.rb', line 230
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
#fetch_value!(name)
[ GitHub ]# File 'activemodel/lib/active_model/attribute_set.rb', line 249
def fetch_value!(name) if attr = @attributes[name] return attr.value! 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 default_attribute(name, value_present, value).value! end end end
#key?(name) ⇒ Boolean
#keys
[ GitHub ]#map(&block)
[ GitHub ]# File 'activemodel/lib/active_model/attribute_set.rb', line 278
def map(&block) LazyAttributeSet.new( values, types, additional_types, default_attributes, attributes.transform_values(&block), @default_keys ) end