Sha256: d79087dd6d68f2c64c173199fd5ad12824361f723c95838ff33cb128c16b7a7a

Contents?: true

Size: 728 Bytes

Versions: 31

Compression:

Stored size: 728 Bytes

Contents

##
# 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
# => 2
#
module Lazy
  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
end

Object.extend Lazy unless Object.ancestors.include? Lazy

Version data entries

31 entries across 31 versions & 13 rubygems

Version Path
tekkub-fugit-0.0.6 lib/grit/lib/grit/lazy.rb
tekkub-fugit-0.0.7 lib/grit/lib/grit/lazy.rb
ginst-2009.12.8 vendor/gems/grit-1.1.1/lib/grit/lazy.rb
ginst-2009.11.24 vendor/gems/grit-1.1.1/lib/grit/lazy.rb
ginst-2009.11.23 vendor/gems/grit-1.1.1/lib/grit/lazy.rb
ginst-2.0.1 vendor/gems/grit-1.1.1/lib/grit/lazy.rb
ginst-2.0.0 vendor/gems/grit-1.1.1/lib/grit/lazy.rb
grit-1.0.0 lib/grit/lazy.rb
grit-1.0.1 lib/grit/lazy.rb
grit-1.1.0 lib/grit/lazy.rb
grit-1.1.1 lib/grit/lazy.rb