Module: Rack::Freeze

Defined in:
lib/rack/freeze/builder.rb,
lib/rack/freeze/freezer.rb,
lib/rack/freeze/version.rb

Defined Under Namespace

Modules: Builder

Constant Summary collapse

VERSION =
"1.1.0"

Class Method Summary collapse

Class Method Details

.[](klass) ⇒ Object

Generate a subclass with a generic #freeze method to freeze all instance variables.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/rack/freeze/freezer.rb', line 29

def self.[] klass
  # Check if the class already has a custom implementation of #freeze.. which we assume works correctly.
  return klass if implements_freeze?(klass)
  
  subclass = Class.new(klass) do
    def freeze
      # This ensures that all class variables are frozen.
      self.instance_variables.each do |name|
        self.instance_variable_get(name).freeze
      end
      
      super
    end
  end
  
  return subclass
end

.implements_freeze?(klass) ⇒ Boolean

Check if the given klass overrides ‘Kernel#freeze`.

Returns:

  • (Boolean)


24
25
26
# File 'lib/rack/freeze/freezer.rb', line 24

def self.implements_freeze?(klass)
  klass.instance_method(:freeze).owner != Kernel
end