2020/03/19分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
- Deprecate using
return
,break
orthrow
to exit a transaction block Relation#pick
now uses already loaded results instead of making another query.
Improve Active Record changelog [ci skip]
activerecord/CHANGELOG.md
の修正です。
各エントリーのフォーマットの修正を行っています。
Support rolling deploys for cookie serialization/encryption changes (#37628)
actionpack/lib/action_dispatch/middleware/cookies.rb
の修正です。
cookieのserialization / encryption処理で、configを変更した後の新しい値保持をしている場合、かつ、アプリケーションのconfigの指定が古い場合に、値を古いフォーマットにダウングレードして使いまわすよう修正しています。
cookies_serializer
のmarshal
-> hybrid
への変更やuse_authenticated_cookie_encryption
を有効化した、かつ、その変更を複数サーバにデプロイしているような時に、新しい設定のサーバにアクセス後に古い設定のサーバにアクセスした際にもセッションを使いまわせるようにする為。
Deprecate committing a transaction exited with return or throw (#29333)
activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
の修正です。
transaction block内でreturn
、break
、throw
を使用した場合、transactionがcommitされて終了する、という振る舞いがdeprecateになりました。次のバージョンではrollbackされるようになります。
Timeout.timeout
とtransaction blockを一緒に使いたかった(指定した時間経過したらtransactionをrollbackさせたかった)が、現在はTimeout.timeout
でタイムアウトしてもtransactionがコミットされてしまう、という挙動になっていました。
これはTimeout.timeout
がthrow
を使用している、かつ、transactionではraise
以外でblockを終了した場合にtransactionをcommitする挙動になっている為で、上記のユースケースに対応出来るようにする為、かつ、blockがどの処理で終了したかを判別するすべが無い為、return
、break
、throw
すべて`rollbackするよう修正しています。
Add Enumerable#pick to complement Relation#pick
activesupport/lib/active_support/core_ext/enumerable.rb
の修正です。
enumerableから指定したkeyに一致する最初の値を返す、Enumerable#pick
メソッドを追加しています。
[{ name: "David" }, { name: "Rafael" }, { name: "Aaron" }].pick(:name) # => "David" [{ id: 1, name: "David" }, { id: 2, name: "Rafael" }].pick(:id, :name) # => [1, "David"]
Allow Relation#pick to use already loaded results
activerecord/lib/active_record/relation/calculations.rb
の修正です。
既にデータをロード済みのrelationに対してpick
を実行した場合に、queryを実行せずにロード済みの値を返すよう修正しています。pluck
の挙動と同じ。