Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing options to template function in thor

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.

like image 486
devboy Avatar asked Jun 27 '11 19:06

devboy


2 Answers

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.

like image 166
Dr. Simon Harrer Avatar answered Sep 25 '22 01:09

Dr. Simon Harrer


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.

like image 32
workergnome Avatar answered Sep 22 '22 01:09

workergnome