There's an echo in my head

日々のメモ。

位置引数とキーワード引数の互換性を考慮した YAML.safe_load の aliases オプションの指定方法

RubyYAML (およびその実装である Psych)の safe_load メソッドでは、 エイリアスの記述を許可するために aliases オプションで true を指定する必要がある。

ただし、 safe_load メソッドの aliases オプションは、 YAML のv3.0までは位置引数、v3.1からはキーワード引数に変わっている点に注意する必要がある。

そのため、互換性を考慮すると、次のようにバージョンに応じて呼び出し方を切り替える必要がある。

major, minor, _ = YAML::VERSION.split(".")
if major >= "4" || (major == "3" && minor >= "1")
  YAML.safe_load(source, aliases: true)
else
  YAML.safe_load(source, [], [], true)
end

ちなみに、v3.0以前で aliases キーワードを使うと次のような例外が発生する。

ArgumentError:
       unknown keyword: aliases
このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。