Sha256: e3a58b44b2967a36566ef2a5047b45745fb23364763cef25e615a6a6e6c9aa7a

Contents?: true

Size: 1.07 KB

Versions: 4

Compression:

Stored size: 1.07 KB

Contents

module IceNine
  class Freezer
    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

    class ObjectWithExclussion < Object
      class_attribute :excluded_vars
      self.excluded_vars = []
      def self.freeze_instance_variables(object, recursion_guard)
        object.instance_variables.each do |ivar_name|
          next if excluded_vars.include? ivar_name

          Freezer.guarded_deep_freeze(
            object.instance_variable_get(ivar_name),
            recursion_guard
          )
        end
      end
      private_class_method :freeze_instance_variables
    end

    class ActiveScaffold < ::IceNine::Freezer::Object
      class DataStructures < ::IceNine::Freezer::Object
        class Column < ::IceNine::Freezer::ObjectWithExclussion
          self.excluded_vars = %i[@active_record_class @column]
        end

        class Association < ::IceNine::Freezer::NoFreeze
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
active_scaffold-4.0.0 lib/active_scaffold/extensions/ice_nine.rb
active_scaffold-4.0.0.rc3 lib/active_scaffold/extensions/ice_nine.rb
active_scaffold-4.0.0.rc2 lib/active_scaffold/extensions/ice_nine.rb
active_scaffold-4.0.0.rc1 lib/active_scaffold/extensions/ice_nine.rb