Module: Julewire::Core::Fields::FieldSet
- Defined in:
- lib/julewire/core/fields/field_set.rb
Constant Summary collapse
- VALUE_KEY =
:value
Class Method Summary collapse
-
.coerce(fields = nil, keyword_fields = {}, invalid: :ignore) ⇒ Object
Public ingress accepts String or Symbol keys.
- .deep_dup(value) ⇒ Object
- .deep_symbolize_keys(value) ⇒ Object
- .frozen_copy(value) ⇒ Object
- .merge(left, right) ⇒ Object
- .merge!(target, fields) ⇒ Object
- .value_for(hash, key, default: nil) ⇒ Object
Class Method Details
.coerce(fields = nil, keyword_fields = {}, invalid: :ignore) ⇒ Object
Public ingress accepts String or Symbol keys. Core stores Symbol keys after normalization so extension contracts stay simple.
13 14 15 16 17 18 |
# File 'lib/julewire/core/fields/field_set.rb', line 13 def coerce(fields = nil, keyword_fields = {}, invalid: :ignore) coerced = {} coerce_fields!(coerced, fields, invalid: invalid) unless fields.nil? merge!(coerced, keyword_fields) unless keyword_fields.empty? coerced end |
.deep_dup(value) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/julewire/core/fields/field_set.rb', line 34 def deep_dup(value) return {} if value.is_a?(Hash) && value.empty? return [] if value.is_a?(Array) && value.empty? Serialization::ValueCopy.call(value) end |
.deep_symbolize_keys(value) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/julewire/core/fields/field_set.rb', line 41 def deep_symbolize_keys(value) return {} if value.is_a?(Hash) && value.empty? return [] if value.is_a?(Array) && value.empty? Serialization::ValueCopy.call(value, symbolize_keys: true) end |
.frozen_copy(value) ⇒ Object
48 49 50 |
# File 'lib/julewire/core/fields/field_set.rb', line 48 def frozen_copy(value) Fields::Internal.frozen_copy(value) end |
.merge(left, right) ⇒ Object
20 21 22 |
# File 'lib/julewire/core/fields/field_set.rb', line 20 def merge(left, right) merge!(deep_symbolize_keys(left), right) end |
.merge!(target, fields) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/julewire/core/fields/field_set.rb', line 24 def merge!(target, fields) return target unless fields.is_a?(Hash) fields.each do |key, value| target[Fields::Internal.normalize_key(key)] = copy_field_value(value) end target end |
.value_for(hash, key, default: nil) ⇒ Object
52 53 54 55 56 57 58 59 |
# File 'lib/julewire/core/fields/field_set.rb', line 52 def value_for(hash, key, default: nil) return default unless hash.is_a?(Hash) normalized = key.is_a?(String) ? Fields::Internal.normalize_key(key) : key return hash[normalized] if hash.key?(normalized) default end |