Class: Julewire::Core::Serialization::ValueCopy

Inherits:
Object
  • Object
show all
Defined in:
lib/julewire/core/serialization/value_copy.rb

Constant Summary collapse

CIRCULAR_REFERENCE =
Core::CIRCULAR_REFERENCE

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(compact_empty:, freeze_values:, max_depth:, symbolize_keys:) ⇒ ValueCopy

Returns a new instance of ValueCopy.



108
109
110
111
112
113
114
# File 'lib/julewire/core/serialization/value_copy.rb', line 108

def initialize(compact_empty:, freeze_values:, max_depth:, symbolize_keys:)
  @compact_empty = compact_empty
  @freeze_values = freeze_values
  @max_depth = max_depth
  @symbolize_keys = symbolize_keys
  @in_use = false
end

Instance Attribute Details

#compact_emptyObject (readonly)

Returns the value of attribute compact_empty.



106
107
108
# File 'lib/julewire/core/serialization/value_copy.rb', line 106

def compact_empty
  @compact_empty
end

#freeze_valuesObject (readonly)

Returns the value of attribute freeze_values.



106
107
108
# File 'lib/julewire/core/serialization/value_copy.rb', line 106

def freeze_values
  @freeze_values
end

#max_depthObject (readonly)

Returns the value of attribute max_depth.



106
107
108
# File 'lib/julewire/core/serialization/value_copy.rb', line 106

def max_depth
  @max_depth
end

#symbolize_keysObject (readonly)

Returns the value of attribute symbolize_keys.



106
107
108
# File 'lib/julewire/core/serialization/value_copy.rb', line 106

def symbolize_keys
  @symbolize_keys
end

Class Method Details

.call(value, compact_empty: false, freeze_values: false, max_depth: Core::NORMALIZATION_MAX_DEPTH, symbolize_keys: false) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/julewire/core/serialization/value_copy.rb', line 16

def call(
  value,
  compact_empty: false,
  freeze_values: false,
  max_depth: Core::NORMALIZATION_MAX_DEPTH,
  symbolize_keys: false
)
  return copy_leaf(value, freeze_values: freeze_values) unless container?(value)

  copy_with(
    cached_copier(
      compact_empty: compact_empty,
      freeze_values: freeze_values,
      max_depth: max_depth,
      symbolize_keys: symbolize_keys
    ),
    value
  )
end

.omitted_empty?(value) ⇒ Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/julewire/core/serialization/value_copy.rb', line 36

def omitted_empty?(value)
  value.nil? || (value.is_a?(Hash) && value.empty?) || (value.is_a?(Array) && value.empty?)
end

Instance Method Details

#call(value) ⇒ Object



116
117
118
# File 'lib/julewire/core/serialization/value_copy.rb', line 116

def call(value)
  traverse(value) { |root, depth| copy_value(root, depth) }
end

#call_reusable(value) ⇒ Object



120
121
122
123
124
125
# File 'lib/julewire/core/serialization/value_copy.rb', line 120

def call_reusable(value)
  @in_use = true
  call(value)
ensure
  @in_use = false
end

#in_use?Boolean

Returns:

  • (Boolean)


127
# File 'lib/julewire/core/serialization/value_copy.rb', line 127

def in_use? = @in_use