Eruby cutting off top / binding issue

I’m trying to use ERB bound to a controlled context, and it’s failing
when it build a template within another template.
If you have any insights about this please let me know. I’m simply at
a loss.

This is a minimal model of the problem I’m having:

require ‘erb’

class Context

def initialize(page)
  @page = page
end

def render(*a)
  @page.render(*a)
end

end

class Page

def initialize
  @context = Context.new(self)
  @binding = @context.instance_eval{ binding }
end

def in1
  %{
    WAY UP HERE
    <%= render('in2') %>
    WAY DOWN HERE
  }
end

def in2
  %{
    RIGHT UP HERE
    <%= render('in3') %>
    RIGHT DOWN HERE
  }
end

def in3
  "IN THE MIDDLE"
end

def render(var)
  input = eval(var)
  template = ERB.new(input)
  template.result(@binding)
end

end

puts Page.new.render(‘in1’)

I’m getting:

IN THE MIDDLE
RIGHT DOWN HERE

    WAY DOWN HERE

Instead of the expected:

  WAY UP HERE

  RIGHT UP HERE
  IN THE MIDDLE
  RIGHT DOWN HERE

  WAY DOWN HERE

Why is it cutting off the top? It makes now sense. If I remove the
context by changing to:

  template.result(binding)

Then it works fine.

T.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs