Issue #11997 has been updated by Colin Fulton.


If you don't like ERB (I also find it noisy) you could write your own templating language to do this. In this case you could do it without even having to write a parser:

```ruby
eval %["File.read('#{file_location}')"]

```

In this case, since it is a one liner to write this in Ruby, I don't know if it needs to be added to the core language.

----------------------------------------
Feature #11997: A method to read a file with interpolations
https://bugs.ruby-lang.org/issues/11997#change-57385

* Author: Tsuyoshi Sawada
* Status: Feedback
* Priority: Normal
* Assignee: 
----------------------------------------
I request a single method that reads a file while interpreting interpolated Ruby code in it (in the current context). For example, suppose I have a file `foo.txt`.

foo.txt

~~~
#{char * 20}
Hello, my name is #{name}.
#{char * 20}
~~~

I am not sure about what method name the proposed feature should have, and on which class it should be defined, but let's temporarily call it `File.eval`. Then I would like to do:

~~~ruby
char = "*"
name = "John Doe"
File.eval("foo.txt") # => "********************\nHello, my name is John Doe.\n********************\n"
~~~

The use case that I have in mind is to easily create template engines/preprocessors, or do an equivalent of what such software do on the fly within a script. There are tools like erb, SCSS, haml, etc., but those force a particular syntax, and they are full fledged software with their own parsing capability, which means it takes an extra time to parse, and the sortware may have their own bugs. I often feel that I do not want to adopt any of the syntax forced in those limited choice of template/preprocessing software, but do it in a freer way.

Using what we have currently, I can do it with:

~~~ruby
eval('"' + File.read("foo.txt") + '"')
~~~

but that looks cumbersome, and wish if Ruby had a C-level built-in capability for doing that. I believe that would encourage wide range of Ruby users to more freely create their own templating system.



-- 
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>