Module: Julewire::Core::Fields::FieldSet

Defined in:
lib/julewire/core/fields/field_set.rb

Constant Summary collapse

VALUE_KEY =
:value

Class Method Summary collapse

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