class Module

Core extension for Module

Private Instance Methods

attr_lazy_reader(sym, &block) click to toggle source

define lazily initialized read-only attribute.

# File lib/attr_lazy_reader.rb, line 6
def attr_lazy_reader(sym, &block)
  raise ArgumentError, 'attr_lazy_reader requires block' unless block
  raise NameError, "invalid attribute name: #{sym}" unless sym =~ /^[_A-Za-z]\w*$/
  local_sym = :"@#{sym}"
  define_method sym do
    unless instance_variable_defined?(local_sym)
      instance_variable_set local_sym, instance_eval(&block)
    end
    instance_variable_get local_sym
  end
end