Sha256: 5b09dee1ea0126d91b1d0c3cd3946b155ac7a76503fa8b12132cd9c13a870d5a

Contents?: true

Size: 669 Bytes

Versions: 11

Compression:

Stored size: 669 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
        val = instance_variable_get(ivar) 
        return val if val
        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

11 entries across 11 versions & 6 rubygems

Version Path
cho45-grit-0.8.2 lib/grit/lazy.rb
koke-grit-0.8.1 lib/grit/lazy.rb
mojombo-grit-0.8.0 lib/grit/lazy.rb
mojombo-grit-0.8.1 lib/grit/lazy.rb
mojombo-grit-0.9.3 lib/grit/lazy.rb
relevance-grit-0.8.1 lib/grit/lazy.rb
relevance-grit-0.8.3 lib/grit/lazy.rb
schacon-grit-0.9.1 lib/grit/lazy.rb
schacon-grit-0.9.3 lib/grit/lazy.rb
git-trip-0.0.4 vendor/grit/lib/grit/lazy.rb
git-trip-0.0.3 vendor/grit/lib/grit/lazy.rb