module Kernel

Public Instance Methods

cattr_reader_preloaded(name, &block) click to toggle source

Usage :

cattr_reader_preloaded :gems_names do
  `gem list --no-version`
end
# File lib/cattr_reader_preloaded.rb, line 10
def cattr_reader_preloaded(name, &block)
  raise "initialization block is missing" unless block_given?
  cache     = "@_cached_#{name}"   .to_sym
  preloader = "@_#{name}_preloader".to_sym

  self.class.send :define_method, name, lambda {
   instance_variable_get(preloader).join.value
  }

  instance_variable_set(preloader, Thread.new do
      instance_variable_set cache, block.call
      self.class.send :define_method, name, lambda {
        instance_variable_get cache
      }
      instance_variable_get cache
  end)
end