Method: MiniObject::Injectable#let

Defined in:
lib/mini_object/injectable.rb

#let(name, &block) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/mini_object/injectable.rb', line 54

def let name, &block
  var_name = :"@#{name}"

  define_singleton_method "#{name}=" do |value|
    instance_variable_set var_name, value
  end

  define_singleton_method name do
    if instance_variable_defined? var_name
      instance_variable_get var_name
    else
      instance_variable_set var_name, block.call(self)
    end
  end
end