Class: Module

Inherits:
Object
  • Object
show all
Defined in:
lib/module.rb

Instance Method Summary collapse

Instance Method Details

#lazy_attribute(symbol, visibility = :public, &block) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/module.rb', line 2

def lazy_attribute(symbol, visibility = :public, &block)
  var_symbol = "@#{symbol}"
  block = Proc.new{nil} unless block
  instance_variable_set(var_symbol, block)

  define_method("#{symbol}=") do |value|
    instance_variable_set("@#{symbol}", value)
  end

  define_method(symbol) do
    var = "@#{symbol}"
    value = instance_variable_get(var)

    if (!value && !instance_variable_defined?(var))
      value = self.class.instance_variable_get(var).call
      instance_variable_set(var, value)
    end
    value
  end

  send(visibility, symbol)
  send(visibility, "#{symbol}=")
end