diff --git a/lib/erb.rb b/lib/erb.rb index a950aec..cac05f0 100644 --- a/lib/erb.rb +++ b/lib/erb.rb @@ -890,10 +890,26 @@ def result(b=new_toplevel) # by a Hash object. def result_with_hash(hash) b = new_toplevel + + backup = {} + news = [] hash.each_pair do |key, value| + if b.local_variable_defined?(key) + backup[key] = b.local_variable_get(key) + else + news << key + end + b.local_variable_set(key, value) + end + + ret = result(b) + + backup.each_pair do |key, value| b.local_variable_set(key, value) end - result(b) + news.each { |key| b.local_variable_set(key, nil) } + + ret end ##