I am looking for a way to pass options to the ERB templating engine in thors template action.
I stumbled upon the bundler cli source where thors template action is being used like this:
opts = {:name => name,
:constant_name => constant_name,
:constant_array => constant_array,
:author_name => author_name,
:author_email => author_email
}
template(File.join("newgem/Gemfile.tt"),
File.join(target, "Gemfile"),
opts)
But when I add options like this in my thor tasks they are not found by ERB, i can only use arguments and functions in my thor class to set variables in the template.
I have no clue how binding works in ruby, maybe there is a way to pass a scope through binding to ERB.
By using instance variables, it should work.
@name = name
template("source","target")
My template looks like this:
<test><%= @name %></test>
This works for me. I haven't tried the passing of specific values.
I can't find any documentation to answer this, but reading through the source of the Bundler CLI, it appears that if you were trying to reference the :author_email parameter inside the template,
Author email: <%= config[:author_email] %>
works.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With