From: se8.and@... Date: 2017-08-26T01:53:30+00:00 Subject: [ruby-core:82475] [Ruby trunk Feature#13839] String Interpolation Statements Issue #13839 has been updated by se8 (S��bastien Durand). > You should write expected code in valid Ruby syntax. Guessing from "%{3.times do}Hello #{'World'}%{end}", probably you intended: > > ~~~ > < {% if true %} > Hello #{'World'} > {% end %} > EOS > ~~~ > It was an idea that we could maybe use a different notation: %{statement} instead of {% statement %} to be more similar to #{expression} :) ---------------------------------------- Feature #13839: String Interpolation Statements https://bugs.ruby-lang.org/issues/13839#change-66286 * Author: se8 (S��bastien 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: