Allows attributes to be declared as lazy, meaning that they won’t be computed until they are asked for.
Works by delegating each lazy_reader to a cached lazy_source method.
class Person
lazy_reader :eyes def lazy_source OpenStruct.new(:eyes => 2) end
end
>> Person.new.eyes
# File lib/grit/lazy.rb, line 23 def lazy_reader(*args) args.each do |arg| ivar = "@#{arg}" define_method(arg) do if instance_variable_defined?(ivar) val = instance_variable_get(ivar) return val if val end instance_variable_set(ivar, (@lazy_source ||= lazy_source).send(arg)) end end end
Generated with the Darkfish Rdoc Generator 2.