問題
RSpec のコードで Rubocop の "Block has too many lines." という警告を無視したい に引き続き、Rubocop のバージョン更新でひっかかったこと 2 つ目です。
Rubocop を実行すると Security/YAMLLoad という cop に怒られました
Prefer using YAML.safe_load over YAML.load.
YAML.load にはセキュリティ上の問題があるため、YAML.safe_load に書き換えろという内容です (参考 PR) 。
Rubocop の自動修正で YAML.load を YAML.safe_load に修正したのですが、修正したコードを実行すると次のエラーが発生しました。
file = Rails.root.join('config/database.yml').read
YAML.safe_load(file)
#=> Psych::BadAlias: Unknown alias: default
これは Rails の config/database.yml
を読み込むコードなのですが、YAML ファイル内で &default
という名前の エイリアス を使っているのが原因のようです。ただ、エイリアス自体は YAML の機能ですし、YAML ファイルの文法も間違っていません。
解決策
YAML.safe_load(file, [], [], true)
#=> Hash object
のように、エイリアス機能を利用するには YAML.safe_load の第 4 引数に true
を渡す必要がありました。詳しくは YAML.safe_load のドキュメント を参照してください。