class IceNine::Freezer

The default class that handles freezing objects

Constants

BasicObject

A freezer class for handling Object instances

Public Class Methods

[](mod) click to toggle source

Look up the Freezer descendant by object type

@example

freezer_class = IceNine::Freezer[mod]

@param [Module] mod

@return [Class<Freezer>]

@api public

# File lib/ice_nine/freezer.rb, line 26
def self.[](mod)
  @freezer_cache[mod]
end
deep_freeze(object) click to toggle source

Deep freeze an object with a particular Freezer

@see IceNine.deep_freeze

@param [Object] object

@return [Object]

@api public

# File lib/ice_nine/freezer.rb, line 39
def self.deep_freeze(object)
  guarded_deep_freeze(object, RecursionGuard::ObjectSet.new)
end
deep_freeze!(object) click to toggle source

Deep freeze an object with a particular Freezer

@see IceNine.deep_freeze!

@param [Object] object

@return [Object]

@api public

# File lib/ice_nine/freezer.rb, line 52
def self.deep_freeze!(object)
  guarded_deep_freeze(object, RecursionGuard::Frozen.new)
end

Protected Class Methods

const_lookup(namespace) click to toggle source

Look up a constant in the namespace

@param [String] namespace

@return [Module]

returned if a matching constant is found

@return [nil]

returned if no matching constant is found

@api private

# File lib/ice_nine/freezer.rb, line 85
def self.const_lookup(namespace)
  const_get(namespace) if const_defined?(namespace, nil)
end
guarded_deep_freeze(object, recursion_guard) click to toggle source

Deep freeze an object with a particular Freezer and RecursionGuard

@param [Object] object @param [RecursionGuard] recursion_guard

@return [Object]

@api private

# File lib/ice_nine/freezer.rb, line 97
def self.guarded_deep_freeze(object, recursion_guard)
  recursion_guard.guard(object) do
    Freezer[object.class].guarded_deep_freeze(object, recursion_guard)
  end
end

Private Class Methods

find(name) click to toggle source

Find a Freezer descendant by name

@param [String] name

@return [Class<Freezer>]

returned if a matching freezer is found

@return [nil]

returned if no matching freezer is found

@api private

# File lib/ice_nine/freezer.rb, line 66
def self.find(name)
  freezer = name.split('::').reduce(self) do |mod, const|
    mod.const_lookup(const) or break mod
  end
  freezer if freezer < self  # only return a descendant freezer
end