Issue #13839 has been updated by se8 (Sbastien Durand). k0kubun (Takashi Kokubun) wrote: > Ah okay, so expected feature is only "%{3.times do}Hello #{'World'}%{end}" and a multi-line complex usage would be: > > ~~~ > <<EOS > %{if true} > Hello #{'world'} > %{end} > EOS > ~~~ Yes, that's it! :) I just wanted to improve string interpolation with a %{statement} like syntax - and not adding a Template class or something like that (this was just a demo implementation in Ruby) :) ---------------------------------------- Feature #13839: String Interpolation Statements https://bugs.ruby-lang.org/issues/13839#change-66288 * Author: se8 (Sbastien Durand) * Status: Feedback * Priority: Normal * Assignee: * Target version: ---------------------------------------- Hello! Here is a KISS implementation of a template engine in Ruby: ~~~ ruby class Template attr_reader :input def initialize(input) @input = input end def output "output = %\0" + @input.gsub("{%", "\0\n").gsub("%}", "\noutput += %\0") + "\0" end def render(binding) eval(output, binding) end end ~~~ Usage: ~~~ text {% if true %} Hello #{'World'} {% end %} Template.new('...').render(binding) ~~~ It's kind of a hack on top of Ruby string interpolation, so it's hell fast (~4 times faster than ERB). Could it be a good idea to implement this kind of statements directly in Ruby string interpolation? Maybe a syntax like that: ~~~ text "%{3.times do}Hello #{'World'}%{end}" ~~~ So Ruby would have a fast minimal native template engine, with #{expressions} and %{statements}: ~~~ text eval(File.read("..."), binding) ~~~ -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>