TL;DR: Faker 2 系を使うなら Faker 2.2 に bundle update
すると破壊的変更が緩和される。
Faker 2.0 で以下の破壊的変更が入っていた。
% cat example.rb Faker::Address.zip_code('NY') % bundle exec ruby example.rb Traceback (most recent call last): 1: from example.rb:3:in `<main>' /Users/koic/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/faker-2.1.2/lib/faker/default/address.rb:32:in `zip_code': wrong number of arguments (given 1, expected 0) (ArgumentError)
これは以下のように Faker 2.0 で置き換えられたキーワード引数を使うように更新すれば解決する。
-Faker::Address.zip_code('NY') +Faker::Address.zip_code(state_abbreviation: 'NY')
というのは自分が踏んだ問題で、この時点ではどんなキーワードを使えば解決するのか突然の ArgumentError
から変更履歴を辿って見るまで分からなかった。これを踏まえたパッチを送って Faker 2.2 ではそれが反映されている。
Faker 2.2 ではいきなり ArgumentError
になるのではなく、使うべきキーワードを含んだ非推奨警告を出すようにアップグレードへの痛みを緩和した。
% bundle exec ruby example.rb example.rb:3: Passing `state_abbreviation` with the 1st argument of `Address.zip_code` is deprecated. Use keyword argument like `Address.zip_code(state_abbreviation: ...)` instead.
ただ、引数ひとつの場合にもキーワード引数を使うのは冗長で使いづらいという声もあり、Faker 3 ではもう少しインタフェースが変わるかもしれない。このあたりは faker-ruby/faker#1692 あたりの議論としていくのかなと思っている。
このあたりのインタフェース変更について RSpec 2 から RSpec 3 への移行ほどではないが、Transpec 的な移行ツールを用意してみようと思い手元で WIP となっている。そのうちリリースするかもしれない。