On 3/11/08, Joel VanderWerf <vjoel / path.berkeley.edu> wrote: > Rick DeNatale wrote: > > On 3/11/08, ara howard <ara.t.howard / gmail.com> wrote: > >> thought some here might appreciate this > >> > >> http://drawohara.com/post/28514698 > >> > >> kind regards > >> > >> a @ http://codeforpeople.com/ > > > > No need for Object#context > > > > class View > > def initialize template > > @template = template > > end > > > > def render locals = {} > > context = binding > > locals.each do |k, v| > > var = k > > value = "ObjectSpace._id2ref #{ v.object_id }" > > definition = "#{ var } = #{ value }" > > eval definition, context > > end > > double_quoted_heredoc = ['<<__template__', @template, > > '__template__'].join("\n") > > eval double_quoted_heredoc, context > > end > > end > > > > view = View.new '<body> #{ x + y } </body>' > > > > puts view.render(:x => 40, :y => 2) #=> <body> 42 </body> > > > > Works just as well. > > > Not quite. > > view = View.new '<body> #{ x + y } #{locals} </body>' > puts view.render(:x => 40, :y => 2) # ==> <body> 42 x40y2 </body> Not on my machine: RubyMate r8136 running Ruby r1.8.6 (/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby) >>> untitled <body> 42 </body> Program exited. -- Rick DeNatale My blog on Ruby http://talklikeaduck.denhaven2.com/