From: rohitpaulk@... Date: 2015-10-09T07:12:35+00:00 Subject: [ruby-core:71028] [Ruby trunk - Bug #11575] Blocks in ERB don't work as intended? Issue #11575 has been updated by Rohit Kuruvilla. I'm sorry I didn't make myself clear. Whitespace isn't the issue here - look at what's in `$results`. With Erubis: ``` First call to return_block: This should be stored in $results, but not sent to output Second call to return_block: This should be stored in $results AND sent to output ``` With ERB: ``` First call to return_block: This should be stored in $results AND sent to output Second call to return_block: This should be stored in $results AND sent to output ``` (I've stripped whitespace to make the issue obvious). ---------------------------------------- Bug #11575: Blocks in ERB don't work as intended? https://bugs.ruby-lang.org/issues/11575#change-54406 * Author: Rohit Kuruvilla * Status: Third Party's Issue * Priority: Normal * Assignee: * ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- I'm not sure if this is a problem with ERB, but here it goes - ~~~ require 'ERB' require 'Erubis' $results = [] def return_block(&block) result = block.call $results << result return result end erb_template = <<-ERB <% return_block { %> <% "This should be stored in $results, but not sent to output" %> <% } %> <% return_block { %> <%= "This should be stored in $results AND sent to output" %> <% } %> ERB puts "Result of Template is:" puts "---------------------" #puts Erubis::Eruby.new(erb_template).result puts ERB.new(erb_template).result(binding) puts "---------------------" puts "First call to return_block: #{$results[0]}" puts "Second call to return_block: #{$results[1]}" ~~~ I'd expect the output to be ~~~ Result of Template is: --------------------- This should be stored in $results AND sent to output --------------------- First call to return_block: This should be stored in $results, but not sent to output Second call to return_block: This should be stored in $results AND sent to output ~~~ And this is exactly what I get when using `Erubis`. When I use `ERB`, the output I get is - ~~~ Result of Template is: --------------------- This should be stored in $results AND sent to output --------------------- First call to return_block: This should be stored in $results AND sent to output Second call to return_block: This should be stored in $results AND sent to output ~~~ I'm checking this against older ruby versions too, will update with results. -- https://bugs.ruby-lang.org/