class Build::Environment::Evaluator

def initialize(environment)

def initialize(environment)
	@environment = environment
	@cache = {}
end

def method_missing(name)

def method_missing(name)
	@cache[name] ||= object_value(@environment[name])
end

def object_value(value)

Compute the literal object value for a given key:
def object_value(value)
	case value
	when Array
		value.collect{|item| object_value(item)}.flatten
	when Symbol
		object_value(@environment[value])
	when Proc
		object_value(instance_exec(&value))
	when Default
		object_value(value.value)
	when Replace
		object_value(value.value)
	else
		value
	end
end

def respond_to?(name, include_private = false)

def respond_to?(name, include_private = false)
	@environment.include?(name) || super
end