なるようになるブログ

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

rails commit log流し読み(2018/02/23)

2018/02/23分のコミットです。

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

actionpack/CHANGELOG.md

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メソッドを呼ぶよう指定されていますが、アップグレードしたアプリでは自分で指定を追加する必要があります。

参考:


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_enqueuearound_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.erbjavascript_include_tagを呼ばないよう修正しています。合わせて、csp_meta_tagメソッドの呼び出しを追加しています。


Update rubocop to the latest version

Gemfile.lockの修正です。

rubocopのバージョンを0.52.1に更新しています。


Use rubocop-0-52 channel

.codeclimate.ymlの修正です。

codeclimateで使用するrubocopのバージョンも0.52に更新しています。


Use private attr_reader

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.rbactiverecord/lib/active_record/connection_adapters/postgresql/oid/date.rbの修正です。

Dateでyearに0を指定した場合、1 BCとみなすよう修正しています。

元々DateTimeでは上記挙動になっており、挙動を合わせる為修正しています。

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