Techioz Blog

ERB を使用して YAML 内で三項演算子を使用することはできますか? 使用できる場合、どのようにすればよいですか?

概要

以下の多くの構文のバリエーションを試してみましたが、構文エラー以外の何も取得できません(単純な erb 補間は単独で機能しますが、論理三項演算子は構文エラーをスローします)。

start_prompt: "Drum roll please \U0001F941\U0001F941\U0001F941.
    <%= active_player_name %> will <%= @new_game ? "begin" : "continue" %> play.
    Let the game commence \U0001F3AC. And may the best player win \U0001F3C6."

これを機能させる方法について何かアイデアはありますか? (そのようなロジックを別の場所で書いたほうが良い練習になるとは思いますが、この文脈で簡単に言うと、ここでの方が簡単です。これがどれほど良い練習か悪い練習かは関係なく、これがどのように行われるかどうかを知りたいのですとにかく可能です、ありがとう。

解決策

YAML は、他の言語とは異なり、文字列補間をサポートしていません。 Ruby スクリプトで YAML ファイルを前処理してから、処理されたコンテンツを YAML ファイルに書き込む必要がある場合があります。

以下に例を示します。

active_player_name = "John Doe"
new_game = true

yaml_content = <<~YAML
start_prompt: "Drum roll please \\U0001F941\\U0001F941\\U0001F941.
    #{active_player_name} will #{new_game ? "begin" : "continue"} play.
    Let the game commence \\U0001F3AC. And may the best player win \\U0001F3C6."
YAML

File.open('output.yaml', 'w') { |file| file.write(yaml_content) }

あるいは、条件に基づいて yaml ファイルの文字列を動的に変更/置換することもできます。