public
Rubygem
Description: A very simple lazy evaluation for Ruby
Homepage: http://lazyeval.rubyforge.org/
Clone URL: git://github.com/vitaly/lazyeval.git
lazyeval / lib / lazyeval.rb
100644 29 lines (23 sloc) 0.54 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Object
  def lazy(&block)
    Lazy.new(self, &block)
  end
end
 
class Lazy
  undef_method(*(instance_methods - %w/__id__ __send__ respond_to? debugger/))
 
  def initialize(obj, &block)
    @obj, @block = obj, block
    @args = @done = nil
  end
 
  def method_missing(*args, &block)
    unless @done
      if !@args && !@block
        @args, @block = args, @block
        return self
      end
 
      @res = @args ? @obj.send(*@args, &@block) : @block.call(@obj)
      @done = true
    end
    
    @res.send(*args, &block)
  end
end