Issue #10395 has been updated by Jos Backus.


Thanks Nobu, that looks like a much better implementation. Appreciate your help.


----------------------------------------
Feature #10395: erb: allow variables to be set from the command line
https://bugs.ruby-lang.org/issues/10395#change-49511

* Author: Jos Backus
* Status: Assigned
* Priority: Normal
* Assignee: Masatoshi Seki
* Category: 
* Target version: Ruby 2.2.0
----------------------------------------
This would make erb more useful from the command line. Granted the use of Binding#eval is dangerous so one has to be careful. Newer versions of Ruby have Binding#local_variable_set which can be used instead but this works with Ruby 2.0.0.

~~~
jonagold:local jos$ cat /tmp/erb-template
This is <%= foo %>
And this is <%= bar %>
~~~
~~~diff
jonagold:local jos$ diff -u /usr/bin/erb /tmp/erb
--- /usr/bin/erb	2014-05-15 22:14:36.000000000 -0700
+++ /tmp/erb	2014-10-16 22:29:37.000000000 -0700
@@ -114,6 +114,13 @@
         exit 1
       end

+      vars = ARGV.take_while {|arg| arg[/^\w+=/]}
+      ARGV.slice!(0, vars.size)
+      vars.each do |var|
+        k, v = var.split('=', 2)
+        TOPLEVEL_BINDING.eval %Q(#{k} = "#{v}")
+      end
+
       $<.set_encoding(Encoding::ASCII_8BIT, nil)
       src = $<.read
       filename = $FILENAME
~~~
~~~
jonagold:local jos$ /tmp/erb foo=FOO bar=123 /tmp/erb-template
This is FOO
And this is 123
jonagold:local jos$
~~~



-- 
https://bugs.ruby-lang.org/