2013-07-27 28 views
12

Tôi đã chơi xung quanh với ERB từ dòng lệnh gần đây. Tôi muốn thực hiện một bụi bẩn đơn giản mẫu ERB, ví dụ như sau:Vượt qua ràng buộc hoặc đối số với ERB từ dòng lệnh

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

này hoạt động nếu tôi chạy

erb -T - thatfile.erb 

những gì tôi muốn làm là làm cho namequality được khá từ dòng lệnh các đối số, để tôi có thể làm một việc gì đó như:

./thatfile.erb "Bill" "super" 

từ lời nhắc bash và thực hiện tương tự.

Tôi biết rằng tôi có thể viết tập lệnh ruby ​​chỉ đọc mẫu đó và sau đó sử dụng ERB.new(File.read("thatfile.erb")).result(binding) hoặc viết mẫu sau END và thực hiện tương tự, nhưng tôi đang tìm cách tiếp cận gọn nhẹ hơn nếu nó tồn tại , bởi vì tôi không muốn viết hai tệp cho mỗi tập lệnh erb mà tôi tạo cho mục đích này.

Trả lời

11

Nếu bạn đang sử dụng unix, hãy thử như sau:

$ 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

'cái echo' cho 'mèo input.html. erb' và bạn nhận được nó – Phlip

14

tôi đã đi với BASH shortcut dòng lệnh cho các biến môi trường.

Bên ngoài:

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

Bên trong: "viết lệnh ERB wrapper mình"

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

Sau một vài phút e-tìm kiếm tôi xác định các giải pháp khác là tất cả các biến thể trên Có thể sai, nhưng tôi sẽ không quay trở lại.

18

Hoặc, bạn có thể sử dụng tập lệnh ruby ​​và tải nó dưới dạng thư viện.

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

Đây là câu trả lời đúng. Không có 'bash' xúc tu – Phlip

+0

Tôi thích cách này tách dữ liệu từ" logic "để nói, và làm thế nào bạn có thể chỉ cần dính vào ruby. –

5

Xin lưu ý rằng Ruby 2.2 và mới hơn cung cấp một giải pháp tốt hơn nhiều mà được thực hiện theo this: nâng cấp

erb var1=val1 var2=val2 my-template.erb 
Các vấn đề liên quan