Sha256: 0652d2539d513ebf254748d9cf5455dad50838c1de59a241d11550835d0220ed

Contents?: true

Size: 675 Bytes

Versions: 1

Compression:

Stored size: 675 Bytes

Contents

module LazyConst

  CACHE = {}

  def meta_class
    @meta_class ||= class << self; self end
  end

  def lazy_const(name, &block)
    raise Error("lazy_const requires a block") unless block_given?
    LazyConst::CACHE["#{self.name}.#{name}"] = nil
    meta_class.send(:define_method, name) do
      LazyConst::CACHE["#{self.name}.#{name}"] ||= block.call
    end
  end

  def self.preload
    self.clear
    LazyConst::CACHE.keys.each do |class_dot_name|
      klass, name = class_dot_name.split('.')
      m = const_get(klass.to_sym).send name.to_sym
    end
  end

  def self.clear
    LazyConst::CACHE.keys.each do |k|
      LazyConst::CACHE[k] = nil
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lazy_const-0.1.3 lib/lazy_const.rb