Issue #11575 has been updated by Tomoyuki Chikanaga.

Status changed from Third Party's Issue to Assigned
Assignee set to Masatoshi Seki

Hello, Rohit.
Thank you for your report.

I don't know it's a bug or s spec, but I've found that the $results[0] and $results[1] is the same object.

    $results[0].object_id = $results[1].object_id # => return true at the last line of sample code.

seki-san, how do you think?


----------------------------------------
Bug #11575: Blocks in ERB don't work as intended? 
https://bugs.ruby-lang.org/issues/11575#change-54614

* Author: Rohit Kuruvilla
* Status: Assigned
* Priority: Normal
* Assignee: Masatoshi Seki
* 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/