我想在 Ruby heredoc 中迭代一个数组。
<<-BLOCK
Feature: User logs in
In order to post content
As an user
I want to log in
<< Here i want to iterate scenarios >>
BLOCK
“场景”是我要循环的数组。对于我要打印的每个元素:
Scenario: #{scenario}
Given
When
Then
例如,如果“场景”包含:
scenarios[0] = "User successfully logs in"
scenarios[1] = "User failed to log in"
我希望 heredoc 字符串为:
<<-BLOCK
Feature: #{feature}
In order to #{in_order_to}
As #{as}
I want #{i_want}
Scenario: User successfully logs in
Given
When
And
Scenarios: User failed to log in
Given
When
And
BLOCK
我如何在 Ruby heredoc 中进行迭代?
最佳答案
您可以使用 ERB。它会更干净,而不是更多的代码:
require 'erb'
s = ERB.new(<<-BLOCK).result(binding)
Feature: User logs in
In order to post content
As an user
I want to log in
<% scenarios.map do |x| %>
Scenario: <%= x %>
Given
When
Then
<% end %>
BLOCK
第一行可能看起来很奇怪,所以我将其分解
s = ERB.new(<<-BLOCK).result(binding)
ERB.new
使用传递的字符串作为其内容创建一个新的 erb 模板。 <<-BLOCK
是一个 heredoc,表示将后面的 heredoc 值放入表达式中。 result(binding)
在当前上下文中评估模板(binding
是当前评估的上下文)。
随着模板变大,您可以从那里轻松地将模板提取到文件中。
关于heredoc 中的 Ruby 语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3688064/