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を使用した場合のテストを追加しています。