2013-07-27 23 views
12

Ostatnio grałem z erb z wiersza poleceń. Chciałem zrobić brud prostego szablonu erb, na przykład następujące:Przekazywanie powiązania lub argumentów do ERB z wiersza poleceń

<%- name = "Joe"; quality = "fantastic" -%> 
Hello. My name is <%= name %>. I hope your day is <%= quality %>. 

To działa, jeśli uruchomię

erb -T - thatfile.erb 

co chcę zrobić, to zrobić name i quality być zadowalający z linii poleceń argumenty, dzięki czemu mogłem zrobić coś w stylu:

./thatfile.erb "Bill" "super" 

z wiersza poleceń bash i zrobić to samo.

Jestem świadomy, że mógłbym napisać skrypt z rubinem, który po prostu odczytałby ten szablon, a następnie używałby ERB.new(File.read("thatfile.erb")).result(binding) lub pisząc szablon po END i robiąc to samo, ale szukam bardziej lekkiego podejścia, jeśli istnieje , ponieważ nie chcę pisać dwóch plików dla każdego skryptu erb, który tworzę w tym celu.

Odpowiedz

11

Jeśli używasz UNIX, spróbuj następujących czynności:

$ cat 1.erb 
Hello. My name is <%= name %>. I hope your day is <%= quality %>. 
$ (echo '<% name="Joe"; quality="fantastic" %>' && cat 1.erb) | erb 

Hello. My name is Joe. I hope your day is fantastic. 
+0

uaktualnić 'echo' do' cat input.html. erb' i masz to – Phlip

14

poszedłem z bash wiersza polecenia skrótu dla zmiennych środowiskowych.

Zewnątrz:

STUFF=foo,bar erb input.html.erb >output.html.erb 

Wewnątrz: "napisać komendę erb otoki Yourself"

<% 
    stuff = ENV['STUFF'].split(',') 
%> 

Po kilku minutach poszukiwań e-I ustalonej inne rozwiązania są wszystkie odmiany Może być źle, ale nie wrócę.

18

Można również użyć skryptu ruby ​​i załadować go jako bibliotekę.

# vars.rb 
@hello = 'kirk' 
# template.html.erb 
<div><%= @hello %></div> 
$ erb -r './vars' template.html.erb 
+0

To jest poprawna odpowiedź. Żadnych macek "bash" – Phlip

+0

Podoba mi się, jak to oddziela dane od "logiki", że tak powiem, i jak można po prostu trzymać się rubinu. –

5

Należy pamiętać, że Ruby 2.2 i nowsze zapewniają znacznie ładniejszy rozwiązanie, które zostało wdrożone zgodnie z this:

erb var1=val1 var2=val2 my-template.erb