Module: Julewire::Core::Fields::Internal

Defined in:
lib/julewire/core/fields/internal.rb,
lib/julewire/core/fields/internal/deletion.rb

Defined Under Namespace

Modules: Deletion

Class Method Summary collapse

Class Method Details

.apply_delete_paths!(target, paths) ⇒ Object



64
# File 'lib/julewire/core/fields/internal.rb', line 64

def apply_delete_paths!(target, paths) = Deletion.apply_delete_paths!(target, paths)

.clear_delete_paths!(paths, fields) ⇒ Object



66
# File 'lib/julewire/core/fields/internal.rb', line 66

def clear_delete_paths!(paths, fields) = Deletion.clear_delete_paths!(paths, fields)

.deep_merge(left, right) ⇒ Object



27
28
29
# File 'lib/julewire/core/fields/internal.rb', line 27

def deep_merge(left, right)
  deep_merge!(FieldSet.deep_symbolize_keys(left), right)
end

.deep_merge!(target, fields) ⇒ Object



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

def deep_merge!(target, fields)
  merge_values!(target, fields) do |value, existing|
    if existing.is_a?(Hash) && value.is_a?(Hash)
      deep_merge!(existing, value)
    else
      FieldSet.deep_symbolize_keys(value)
    end
  end
end

.deep_merge_owned!(target, fields) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/julewire/core/fields/internal.rb', line 41

def deep_merge_owned!(target, fields)
  merge_values!(target, fields) do |value, existing|
    if existing.is_a?(Hash) && value.is_a?(Hash)
      deep_merge_owned!(existing, value)
    else
      value
    end
  end
end

.delete_key!(target, key) ⇒ Object



16
17
18
# File 'lib/julewire/core/fields/internal.rb', line 16

def delete_key!(target, key)
  target.delete(normalize_key(key))
end

.delete_path!(target, path) ⇒ Object



62
# File 'lib/julewire/core/fields/internal.rb', line 62

def delete_path!(target, path) = Deletion.delete_path!(target, path)

.frozen_copy(value) ⇒ Object



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

def frozen_copy(value)
  return EMPTY_HASH if value.is_a?(Hash) && value.empty?
  return EMPTY_ARRAY if value.is_a?(Array) && value.empty?

  Serialization::ValueCopy.call(value, freeze_values: true)
end

.frozen_deep_symbolize_keys(value) ⇒ Object



55
56
57
58
59
60
# File 'lib/julewire/core/fields/internal.rb', line 55

def frozen_deep_symbolize_keys(value)
  return EMPTY_HASH if value.is_a?(Hash) && value.empty?
  return EMPTY_ARRAY if value.is_a?(Array) && value.empty?

  Serialization::ValueCopy.call(value, freeze_values: true, symbolize_keys: true)
end

.merge_owned!(target, fields) ⇒ Object



51
52
53
# File 'lib/julewire/core/fields/internal.rb', line 51

def merge_owned!(target, fields)
  merge_values!(target, fields) { |value, _existing| value }
end

.normalize_key(key) ⇒ Object



12
13
14
# File 'lib/julewire/core/fields/internal.rb', line 12

def normalize_key(key)
  key.is_a?(String) ? key.to_sym : key
end

.normalize_path(path) ⇒ Object



68
# File 'lib/julewire/core/fields/internal.rb', line 68

def normalize_path(path) = Deletion.normalize_path(path)