From: hsbt@... Date: 2017-05-16T01:23:25+00:00 Subject: [ruby-core:81187] [Ruby trunk Bug#11575] Blocks in ERB don't work as intended? Issue #11575 has been updated by hsbt (Hiroshi SHIBATA). Assignee changed from seki (Masatoshi Seki) to k0kubun (Takashi Kokubun) Target version set to 2.5 ---------------------------------------- Bug #11575: Blocks in ERB don't work as intended? https://bugs.ruby-lang.org/issues/11575#change-64840 * Author: rohitpaulk (Rohit Kuruvilla) * Status: Assigned * Priority: Normal * Assignee: k0kubun (Takashi Kokubun) * Target version: 2.5 * 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/ Unsubscribe: