diff options
author | Jeffrey Guenther <guenther.jeffrey@gmail.com> | 2017-11-30 08:43:37 -0800 |
---|---|---|
committer | Jeffrey Guenther <guenther.jeffrey@gmail.com> | 2017-11-30 08:43:37 -0800 |
commit | 241b5f1cebb17449f31e4170671ef70866605f8b (patch) | |
tree | e939f4aa85f321fd40090d5b5a31ecd25907135d /activemodel/lib/active_model/attribute_set/builder.rb | |
parent | 3429ab14a6f2380f4bd924fe9d9ad2eb967ae62b (diff) | |
parent | f7e3c686685fb89e67293440d24356f93fa34847 (diff) | |
download | rails-241b5f1cebb17449f31e4170671ef70866605f8b.tar.gz rails-241b5f1cebb17449f31e4170671ef70866605f8b.tar.bz2 rails-241b5f1cebb17449f31e4170671ef70866605f8b.zip |
Merge branch 'master' into activestorage-guide
Diffstat (limited to 'activemodel/lib/active_model/attribute_set/builder.rb')
-rw-r--r-- | activemodel/lib/active_model/attribute_set/builder.rb | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/activemodel/lib/active_model/attribute_set/builder.rb b/activemodel/lib/active_model/attribute_set/builder.rb index f94f47370f..758eb830fc 100644 --- a/activemodel/lib/active_model/attribute_set/builder.rb +++ b/activemodel/lib/active_model/attribute_set/builder.rb @@ -5,35 +5,30 @@ require "active_model/attribute" module ActiveModel class AttributeSet # :nodoc: class Builder # :nodoc: - attr_reader :types, :always_initialized, :default + attr_reader :types, :default_attributes - def initialize(types, always_initialized = nil, &default) + def initialize(types, default_attributes = {}) @types = types - @always_initialized = always_initialized - @default = default + @default_attributes = default_attributes end def build_from_database(values = {}, additional_types = {}) - if always_initialized && !values.key?(always_initialized) - values[always_initialized] = nil - end - - attributes = LazyAttributeHash.new(types, values, additional_types, &default) + attributes = LazyAttributeHash.new(types, values, additional_types, default_attributes) AttributeSet.new(attributes) end end end class LazyAttributeHash # :nodoc: - delegate :transform_values, :each_key, :each_value, :fetch, to: :materialize + delegate :transform_values, :each_key, :each_value, :fetch, :except, to: :materialize - def initialize(types, values, additional_types, &default) + def initialize(types, values, additional_types, default_attributes) @types = types @values = values @additional_types = additional_types @materialized = false @delegate_hash = {} - @default = default || proc {} + @default_attributes = default_attributes end def key?(key) @@ -94,7 +89,7 @@ module ActiveModel protected - attr_reader :types, :values, :additional_types, :delegate_hash, :default + attr_reader :types, :values, :additional_types, :delegate_hash, :default_attributes def materialize unless @materialized @@ -117,7 +112,12 @@ module ActiveModel if value_present delegate_hash[name] = Attribute.from_database(name, value, type) elsif types.key?(name) - delegate_hash[name] = default.call(name) || Attribute.uninitialized(name, type) + attr = default_attributes[name] + if attr + delegate_hash[name] = attr.dup + else + delegate_hash[name] = Attribute.uninitialized(name, type) + end end end end |