class Middleman::CoreExtensions::Collections::LazyCollectorStep
def initialize(name, args, block, parent=nil)
def initialize(name, args, block, parent=nil) @name = name @args = args @block = block @parent = parent @result = nil leaves << self end
def leaves
def leaves @parent.leaves end
def method_missing(name, *args, &block)
def method_missing(name, *args, &block) return ::Kernel.send(name, *args, &block) if DELEGATE.include? name leaves.delete self LazyCollectorStep.new(name, args, block, self) end
def value(ctx=nil)
def value(ctx=nil) data = @parent.value(ctx) original_block = @block if original_block b = if ctx ::Proc.new do |*args| ctx.instance_exec(*args, &original_block) end else original_block end end data.send(@name, *@args.deep_dup, &b) end