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
|