Issue #13839 has been updated by matz (Yukihiro Matsumoto).
Status changed from Feedback to Rejected
I think it should be done in the gem. Templating need not to be a part of the core.
Matz.
----------------------------------------
Feature #13839: String Interpolation Statements
https://bugs.ruby-lang.org/issues/13839#change-66394
* Author: se8 (Sbastien Durand)
* Status: Rejected
* 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>