ทางรถไฟไม่ได้ใช้STDLIB ของ ERBโดยค่าเริ่มต้นจะใช้erubis แหล่งที่มา: ความคิดเห็นของ dev นี้ , gemspec ActionView ของ , คำขอผสานยอมรับฉันทำในขณะที่เขียนนี้
มีมีความแตกต่างของพฤติกรรมระหว่างพวกเขาโดยเฉพาะอย่างยิ่งเกี่ยวกับวิธีที่ผู้ประกอบการยัติภังค์%-
และ-%
การทำงาน
เอกสารมีน้อยรูปแบบ ERB ของรูบี้ "ถูกกำหนด" เป็นทางการแล้วอยู่ที่ไหน ดังนั้นสิ่งที่ตามมาคือข้อสรุปเชิงประจักษ์
การทดสอบทั้งหมดสมมติว่า:
require 'erb'
require 'erubis'
เมื่อคุณสามารถใช้ -
- ERB: คุณจะต้องผ่าน
-
ไปยังtrim_mode
ตัวเลือกในการERB.new
ที่จะใช้มัน
- erubis: เปิดใช้งานโดยค่าเริ่มต้น
ตัวอย่าง:
begin ERB.new("<%= 'a' -%>\nb").result; rescue SyntaxError ; else raise; end
ERB.new("<%= 'a' -%>\nb" , nil, '-') .result == 'ab' or raise
Erubis::Eruby.new("<%= 'a' -%> \n b").result == 'a b' or raise
อะไร-%
:
ตัวอย่าง:
# Remove
ERB.new("a \nb <% 0 -%>\n c", nil, '-').result == "a \nb c" or raise
# Don't do anything: not followed by newline, but by space:
ERB.new("a\n<% 0 -%> \nc", nil, '-').result == "a\nb \nc" or raise
# Remove the current line because only whitesapaces:
Erubis::Eruby.new(" <% 0 %> \nb").result == 'b' or raise
# Same as above, thus useless because longer.
Erubis::Eruby.new(" <% 0 -%> \nb").result == 'b' or raise
# Don't do anything because line not empty.
Erubis::Eruby.new("a <% 0 %> \nb").result == "a \nb" or raise
Erubis::Eruby.new(" <% 0 %> a\nb").result == " a\nb" or raise
Erubis::Eruby.new(" <% 0 -%> a\nb").result == " a\nb" or raise
# Don't remove the current line because of `=`:
Erubis::Eruby.new(" <%= 0 %> \nb").result == " 0 \nb" or raise
# Remove the current line even with `=`:
Erubis::Eruby.new(" <%= 0 -%> \nb").result == " 0b" or raise
# Remove forward only because of `-` and non space before:
Erubis::Eruby.new("a <%= 0 -%> \nb").result == "a 0b" or raise
# Don't do anything because non-whitespace forward:
Erubis::Eruby.new(" <%= 0 -%> a\nb").result == " 0 a\nb" or raise
อะไร%-
:
ERB: ลบช่องว่างก่อนหน้าแท็กและหลังบรรทัดใหม่ก่อนหน้า แต่เฉพาะในกรณีที่มีช่องว่างก่อนหน้าเท่านั้น
erubis: ไร้ประโยชน์เพราะ<%- %>
เหมือนกับ<% %>
(ไม่รวม=
) และสิ่งนี้ไม่สามารถใช้กับ=
กรณีที่-%
เป็นประโยชน์เท่านั้น ดังนั้นอย่าใช้สิ่งนี้
ตัวอย่าง:
# Remove
ERB.new("a \n <%- 0 %> b\n c", nil, '-').result == "a \n b\n c" or raise
# b is not whitespace: do nothing:
ERB.new("a \nb <%- 0 %> c\n d", nil, '-').result == "a \nb c\n d" or raise
ทำอะไร%-
และ-%
ทำด้วยกัน
การรวมกันที่แน่นอนของผลทั้งสองแยกจากกัน