2018/02/23分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
activejob/CHANGELOG.md
Merge pull request #32018 from rails/add-nonce-support-to-csp
Action Pack、Action Viewの修正です。
Rails UJSにCSPのnonce-sourceの自動生成処理を追加しています。
CSPには、nonce-sourceというホワイトリストの仕組みがあります。これは、CSPヘッダに指定されているnonceの値と、scriptタグに指定されたnonce属性の値が一致した場合、CSPでJavaScriptの実行が制限されていても、インラインでのJavaScriptでの実行を許可する、というものです。多分。
この対応により、CSPにunsafe-inlineが指定されていてもRails UJSのJavaScriptはインラインで実行されるようになっています。
また、javascript_tagメソッドにnonceオプションを追加し、ユーザが任意に実行したいインラインのJavaScriptも実行出来るようになっています。
<%= javascript_tag nonce: true do %> alert('Hello, World!'); <% end %>
なお、上記仕組みを使用する為には、csp_meta_tagメソッドでcsp用のmeta tagを生成する必要があります。新規に作成したアプリではapplication.html.erbではcsp_meta_tagメソッドを呼ぶよう指定されていますが、アップグレードしたアプリでは自分で指定を追加する必要があります。
参考:
- CSP: script-src - HTTP | MDN
- Troy Hunt: Locking Down Your Website Scripts with CSP, Hashes, Nonces and Report URI
Merge pull request #32085 from rails/add-timezone-support-to-activejob
Active Jobの修正です。
Active Jobにtimezoneのサポートを追加しています。
jobをenqueueする際に現在のtimezoneを含むよう対応、及び、jobをrestoreした際にそのtimezoneの値を使用するようにしています。jobにtimezoneが含まれていない場合は現在のtimezoneが使われます。localeと同じアプローチです。
Revert "Reject empty database yamls"
database configurationをロードした際に、databaseの設定が無いセクションを削除するよう修正した、Reject empty database yamlsをrevertしています。
上記コミットは、Reject empty database yamlsから続いていた対応で、database用のconfigをrake taskでロードした際に行っていたdefaultセクションの場合のケアを削除する為に追加されました。
ただ、configを最初にロードした際にdefaultセクションを削除する事は出来ない(configファイルに3階層目を指定した場合にdefaultは必要)為、revertしています。
Revert "Merge pull request #32075 from eileencodes/delete-default-configuration"
database configurationをロードした際に、defaultセクションを削除するよう修正したい、Delete default configurationをrevertしています。理由は同上。
Remove passing extra arguments to ActiveJob Callbacks
Active Jobの修正です。
around_enqueue、around_performから使用していない第三引数を削除しています。
Comment require "active_storage/engine" in bin/rails of plugin if --skip-active-storage
railties/lib/rails/generators/rails/plugin/templates/bin/rails.ttの修正です。
--skip-active-storageオプションを指定してrails pluginを生成した際に、active_storage/engineを読み込まないよう修正しています。
Improve generated file app/views/application.html.erb of plugin
railties/lib/rails/generators/rails/plugin/templates/app/views/layouts/%25namespaced_name%25/application.html.erb.ttの修正です。
--skip-javascriptオプションを指定してrails pluginを生成した際に、application.html.erbでjavascript_include_tagを呼ばないよう修正しています。合わせて、csp_meta_tagメソッドの呼び出しを追加しています。
Update rubocop to the latest version
Gemfile.lockの修正です。
rubocopのバージョンを0.52.1に更新しています。
.codeclimate.ymlの修正です。
codeclimateで使用するrubocopのバージョンも0.52に更新しています。
Active Recordの修正です。
attr_readerの可視性がprotectedになっていたのをprivateに修正しています。
Ruby 2.2以下でprivate attribute?のwarningが出てしまう為protectedにしていたのですが、masterでサポートしているバージョンは2.3以上になった為、privateに修正しています。
PostgreSQL: Treat infinite values in date like datetime consistently
Active Recordの修正です。
date型にinfinity / -infinityを指定した場合に、正しく扱えて無かった(Float::INFINITYにマッピングされて無かった)のを、datetime同様に正しく扱えるよう修正しています。
PostgreSQL: Allow BC dates like datetime consistently
activemodel/lib/active_model/type/date.rb、
activerecord/lib/active_record/connection_adapters/postgresql/oid/date.rbの修正です。
Dateでyearに0を指定した場合、1 BCとみなすよう修正しています。
元々DateTimeでは上記挙動になっており、挙動を合わせる為修正しています。
PostgreSQLではtimestamp、dateで4713 BC以降の値をサポートしているんですね。知らなかった。
参考:PostgreSQL: Documentation: 10: 8.5. Date/Time Types
More exercise range predicate builder
activerecord/test/cases/finder_test.rbの修正です。
open-ended rangeを指定した場合、及び、string columnにnumeric rangeを使用した場合のテストを追加しています。