Module: Grape::Util::DeepFreeze

Defined in:
lib/grape/util/deep_freeze.rb

Class Method Summary collapse

Class Method Details

.deep_freeze(obj) ⇒ Object

Recursively freezes Hash (keys and values), Array (elements), and String objects. All other types are returned as-is.

Intentionally left unfrozen:

- Procs / lambdas — may be deferred DB-backed callables
- Coercers (e.g. ArrayCoercer) — use lazy ivar memoization at request time
- Classes / Modules — shared constants that must remain open
- ParamsScope — self-freezes at the end of its own initialize


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/grape/util/deep_freeze.rb', line 16

def deep_freeze(obj)
  case obj
  when Hash
    obj.each do |k, v|
      deep_freeze(k)
      deep_freeze(v)
    end
    obj.freeze
  when Array
    obj.each { |v| deep_freeze(v) }
    obj.freeze
  when String
    obj.freeze
  else
    obj
  end
end