なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2020/03/29)

2020/03/29分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

activerecord/CHANGELOG.md

activesupport/CHANGELOG.md

actionpack/CHANGELOG.md


Merge pull request #36276 from basecamp/previously-new-record

Active Recordの修正です。

最後のsave前に、レコードが新規に作成されたレコードがどうかをチェックするためのpreviously_new_record?メソッドを追加しています。

User.new.previously_new_record?       # => false
User.create.previously_new_record?    # => true
User.find(1).previously_new_record?   # => false

Merge branch 'tzinfo2'

Active Support、railtiesの周辺です。

Active Supportで使用しているTZInfoのバージョンを2系に更新しています。

TZInfo v2では、元々必ずUTCになっていたoffsetが、local timesに一致した適切な値になるようになりました。これはActiveSupport::TimeZone#utc_to_localも同様の結果になるようになっています。

before

zone = ActiveSupport::TimeZone["Eastern Time (US & Canada)"]
zone.utc_to_local(Time.utc(2000, 1))
#=> 1999-12-31 19:00:00 UTC

after

zone = ActiveSupport::TimeZone["Eastern Time (US & Canada)"]
zone.utc_to_local(Time.utc(2000, 1))
#=> 1999-12-31 19:00:00 -0500

ただこれは、Railsアプリケーションとしてはbreaking changesになってしまう為、この値をコントロールするためのフラグ(config.active_support.utc_to_local_returns_utc_offset_times)を追加し、このフラグがfalseの場合は元の挙動、trueの場合はTZInfo v2と同じ挙動になるよう対応しています。


fix grammar - ci skip

rails guideのActive Job Basicsの修正です。

Job Executionの項のグラマーの修正を行っています。


Accept and default to base64_urlsafe CSRF tokens (#18496)

actionpack/lib/action_controller/metal/request_forgery_protection.rbの修正です。

CSRFトークンを生成するのにBase64 strict-encodedを使用していたのを、base64_urlsafeメソッドを使用してwebsafeな値になるよう修正しています

strict-encodedだと+/などの値が含まれてしまい、CSRFトークンの値をcookieで使用したいような場合に問題があった為。


Sort results to fix nondeterministic test failures

assertionで値を比較する際に、値をidでsortしてからチェックするよう修正しています。 sortを指定しないと結果が不定になる為。

activerecord/test/cases/associations/has_many_through_associations_test.rbの修正です。


Add support for if_not_exists to indexes

Active Recordの修正です。

add_indexメソッドに、indexが存在しない場合のみ処理を実行するようにするための、if_not_existsオプションを追加しています。

add_index :users, :account_id, if_not_exists: true