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 = nil, invalid: :ignore) ⇒ Object

Public ingress accepts String or Symbol keys. Core stores Symbol keys after normalization so extension contracts stay simple.



19
20
21
22
23
24
# File 'lib/julewire/core/fields/field_set.rb', line 19

def coerce(fields = nil, keyword_fields = nil, invalid: :ignore)
  validate_invalid_mode!(invalid)
  coerced = {}
  coerce_fields!(coerced, fields, invalid: invalid) unless fields.nil?
  merge!(coerced, keyword_fields)
end

.deep_dup(value) ⇒ Object



40
41
42
# File 'lib/julewire/core/fields/field_set.rb', line 40

def deep_dup(value)
  deep_dup_with(value, preserve_truncation_metadata: false)
end

.deep_dup_owned(value) ⇒ Object



44
45
46
# File 'lib/julewire/core/fields/field_set.rb', line 44

def deep_dup_owned(value)
  deep_dup_with(value, preserve_truncation_metadata: true)
end

.deep_symbolize_keys(value) ⇒ Object



48
49
50
# File 'lib/julewire/core/fields/field_set.rb', line 48

def deep_symbolize_keys(value)
  deep_symbolize_keys_with(value, preserve_truncation_metadata: false)
end

.deep_symbolize_owned_keys(value) ⇒ Object



52
53
54
# File 'lib/julewire/core/fields/field_set.rb', line 52

def deep_symbolize_owned_keys(value)
  deep_symbolize_keys_with(value, preserve_truncation_metadata: true)
end

.frozen_copy(value) ⇒ Object



56
57
58
# File 'lib/julewire/core/fields/field_set.rb', line 56

def frozen_copy(value)
  Internal.frozen_copy(value)
end

.merge(left, right) ⇒ Object



26
27
28
# File 'lib/julewire/core/fields/field_set.rb', line 26

def merge(left, right)
  merge!(deep_symbolize_keys(left), right)
end

.merge!(target, fields) ⇒ Object



30
31
32
33
34
35
36
37
38
# File 'lib/julewire/core/fields/field_set.rb', line 30

def merge!(target, fields)
  return target unless fields.is_a?(Hash)

  fields.each do |key, value|
    target[normalized_field_key(key)] = copy_field_value(value)
  end

  target
end

.value_for(hash, key, default: nil) ⇒ Object



60
61
62
63
64
# File 'lib/julewire/core/fields/field_set.rb', line 60

def value_for(hash, key, default: nil)
  return default unless hash.is_a?(Hash)

  hash.fetch(Internal.normalize_key(key), default)
end