なるようになるブログ

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

rails commit log流し読み(2018/11/13)

2018/11/13分のコミットです。

CHANGELOGへの追加はありませんでした。


Make PERMITTED_TYPES private

activejob/lib/active_job/arguments.rbの修正です。

内部でだけ使用するActiveJob::Arguments::PERMITTED_TYPES定数の可視性をprivateに変更しています。


Fix ignored options in the #added? method

activemodel/lib/active_model/errors.rbの修正です。

ActiveModel::Errors#added?メソッドのmessage引数にSymbolを指定した場合に、options引数がチェック処理で使用されない(メッセージが追加済みかどうかのチェックでoptionsが無視される)バグがあったのを修正しています。


Ignore warnings such as Psych.safe_load is deprecated

railties/test/application/bin_setup_test.rbの修正です。

bin/setupのテストで、Psych.safe_loadの引数に関するwarningを無視するよう修正しています。


Add support for UNLOGGED Postgresql tables

Active Recordの修正です。

PostgreSQLのUNLOGGED tableのサポートを追加しています。

ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tablesにtrueを指定した場合のみ、CREATE TABLEUNLOGGEDオプションが指定されるようになり、ログを取らないテーブルとして作成されるようになります。

rails commit log流し読み(2018/11/12)

2018/11/12分のコミットです。

CHANGELOGへの追加はありませんでした。


Ensure casting by decimal attribute when querying

activemodel/lib/active_model/type/decimal.rbの修正です。

Decimal#serializeメソッドを定義し、decimal attributeに対してquery実行時にcast処理を行うよう修正しています。cast処理を行わないと、値によっては正しく結果を取得出来ないケースがある為。


Fix test case for money schema default

activerecord/test/cases/adapters/postgresql/money_test.rbの修正です。

先のDecimal#serializeメソッドの対応により落ちてしまったMoney typeのテスト(DecimalMoneyの親クラスなので、cast処理が実行されるようになった)があったのを修正しています。


Document missing supported types [ci skip]

activejob/lib/active_job/arguments.rbactivejob/lib/active_job/enqueuing.rbのdocの修正です。

jobに指定出来るクラスについて説明している箇所で、ActiveSupport::DurationActiveSupport::HashWithIndifferentAccess等についての説明が不足していたのを修正しています。


Remove ensure from with_transaction_returning_status

activerecord/lib/active_record/transactions.rbの修正です。

Transactions#with_transaction_returning_statusメソッドの後処理でclear_transaction_record_stateを呼び出していたのを削除しています。

最終のtransaction statusを正しく返せるようにする為の処理だったのですが、現状この処理が無くても正常に動作するようになっているので、削除しています。

rails commit log流し読み(2018/11/11)

2018/11/11分のコミットです。

CHANGELOGへの追加はありませんでした。


Prefer assert_not instead of refute [ci skip]

guides/bug_report_templates/generic_gem.rbguides/bug_report_templates/generic_master.rbの修正です。

bug report templatesでrefuteを使用していたのを、assert_notを使用するよう修正しています。contributing guideでassert_notを使用する事を推奨している為。

が、これは間違いで、bug report templatesではMinitest::Testを使用しているのですが、minitestではassert_notを使用出来ません(xx_notメソッドはRailsのテストクラスが独自に追加しているメソッドの為)。

これだとbug report templates実行するとエラーになってしまう為、後ほどrevertされています。


Revert "Merge pull request #34421 from albertoalmagro/use-assert-not-instead-of-refute"

という訳で直前のコミットをrevertしています。

rails commit log流し読み(2018/11/10)

2018/11/10分のコミットです。

CHANGELOGへの追加はありませんでした。


Upgrade thor to 0.20.1

Gemfileの修正です。

rubygemsにリリース済みのthor 0.20.1を使用するよう修正しています。


bundle update

Gemfile.lockの修正です。

各gemを最新のバージョンに更新しています。


Make sure we are using a working version of thor locally

Gemfile.lockの修正です。

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

0.20.1で追加されたサジェスト機能の実装にバグがあり、その対応の為に新しいバージョンがリリースされた為。


Update action_cable_overview.md: fix typo.

rails guideのAction Cable Overviewの修正です。

Broadcastingの項、broadcast処理について説明している箇所の言い回しを修正しています。

rails commit log流し読み(2018/11/09)

2018/11/09分のコミットです。

CHANGELOGへの追加はありませんでした。


PostgreSQL: Properly quote all Infinity and NaN

activerecord/lib/active_record/connection_adapters/postgresql/quoting.rbの修正です。

PostgreSQL adapterでInfinityNaNを適切にクォートするよう修正しています。


Test prepared statement cache only if prepared statements is enabled

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

prepared statement cacheに関するテストは、prepared statementsが有効になっている時だけ行うよう修正しています。


Refactor to initialize TableDefinition by kwargs

activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rbactiverecord/lib/active_record/connection_adapters/abstract/schema_statements.rbの修正です。

TableDefinition#initializeでキーワード引数を使用するようリファクタリングしています。


Deprecate t.indexes = [...] which is not by design

activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rbの修正です。

migration fileでindexを定義するのにt.indexes=が使用出来たのをdeprecateにしています。

予期せず使用出来るようになってしまっていた為。t.indexes=を仮に使用していた場合、t.indexを使用してください。


Use the same version of Rubocop as Code Climate

Gemfile.lockの修正です。

Rubocopのバージョンを0.60.0に更新しています。 Code Climateで使用されるRubocopと同じバージョンのRubocopを使用出来るようにする為。


Add test for parallel tests with unmarshable exception

railties/test/application/test_runner_test.rbの修正です。

parallel testsでmarshal出来ないExceptionが発生した場合に、正常に結果が表示される事を確認するテストを追加しています。


Restore private_constant which is lost accidentally in #30941

activejob/lib/active_job/arguments.rbの修正です。

ActiveJob::Arguments module内のGLOBALID_KEYSYMBOL_KEYS_KEYWITH_INDIFFERENT_ACCESS_KEY定数の可視性をprivateにしています。

元々privateだったのですが、Introduce custom serializers to ActiveJob argumentsの対応の際に誤ってpublicになってしまっていたので、再度privateに戻しています。


Docs: Update Development Dependencies Install

rails guideのContributing to Ruby on Railsの修正です。

Running Testsのセクションに、For a Specific DirectoryFor a Specific Fileの項を追加し、それぞれ特定のディレクトリ配下のテストをまとめて実行する方法、特定の一ファイルのテストのみ実行する方法、についての説明を追加しています。


Clarify the validation of present associations

rails guideのActive Record Validationsの修正です。

presence validatorについて説明している箇所に、foreign keyが空かどうかだけではなく、参照先のオブジェクトが存在するかどうかもチェックしている旨説明を追加しています。

rails commit log流し読み(2018/11/08)

2018/11/08分のコミットです。

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

activerecord/CHANGELOG.md


Add multi-db support to schema cache dump and clear

activerecord/lib/active_record/railties/databases.rakeactiverecord/lib/active_record/tasks/database_tasks.rbの修正です。

db:schema:cache:dump taskとdb:schema:cache:clearに複数DB向けのサポートを追加しています。


Guard Enums against definitions with blank label names

activerecord/lib/active_record/enum.rbの修正です。

enumsに指定する値にvaluesに空の値(e.g. enum status: { "" => 1, "active" => 2 })を指定した場合にArgumentErrorをraiseするよう修正しています。

valuesに指定された値を元にscope用のメソッド等を定義するのですが、空だと!?というメソッドが定義されてしまい、予期せぬ挙動になってしまう為使用出来ないようにしています。


Fix broken CHANGELOG markup [ci skip]

コンポーネントCHANGELOGの修正です。

CHANGELOGのフォーマットが壊れていた箇所があったのを修正、及び、不要なスペースを削除しています。


Compile packs for test

railties/test/application/rake_test.rbの修正です。

test_scaffold_with_references_columns_tests_pass_by_defaultscaffold生成されたファイルに対してテストを実行する前に、テスト用のassetsファイルをコンパイルするよう修正しています。

元々webpacker:compileは実行されていたのですが、RAILS_ENVが指定されていない為、development用のassetsがコンパイルされており、意味が無かった(webpackerはデフォルトでtest用とdevelopment用のassetsを別に管理すうる)為、RAILS_ENVtestを指定しwebpacker:compileを実行するよう修正しています。


Use RuboCop 0.60.0 and remove exclude files for Style/RedundantFreeze

.codeclimate.yml.rubocop.ymlの修正です

codeclimateで使用するRuboCopのバージョンを0.60.0に更新、及び、RuboCop 0.60.0で修正された、Style/RedundantFreeze copのfalse positiveを避ける為にExcludeを指定していたのを削除しています。


Add an :if_not_exists option to create_table

Active Recordの修正です。

create_tableif_not_existsオプションを追加しています。

create_table :posts, if_not_exists: true do |t|
  t.string :title
end

上記のような指定をした場合、下記のSQLが実行されるようになります。

CREATE TABLE IF NOT EXISTS posts (
  ...
)

Remove unused argument expected_database

railties/test/application/rake/multi_dbs_test.rbの修正です。

db_migrate_namespaceddb_migrate_status_namespacedメソッドから使用していないexpected_database引数を削除しています。

rails commit log流し読み(2018/11/07)

2018/11/07分のコミットです。

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

railties/CHANGELOG.md


Add CVE note to security guide and gemspecs

rails guideのSecuring Rails Applications、及び、各gemspecの修正です。

Securing Rails Applications guideにDependency Management and CVEsの項を追加し、CVEの対応によるgemのバージョン変更のパッチは受け付けない旨説明を記載しています。また、各gemspecにも同様の説明を記載しています。

例えば、LoofahでCVEに対応した新しいバージョンのリリースが行われると、そのバージョンを指定するよう変更するPRがLoofahを使用しているrails-html-sanitizerに大量に来る(e.g. Update Loofah for CVE-2018-16468)、という現象が発生してしまい、それらの対応は受け付けていない(gemを使用しているアプリ側でbundle updateすれば良いだけなので)為、上記説明を追加しています。

因みにrails-html-sanitizerの場合、この記事を記載している時点で、バージョン変更のPRが13個来ていました。


Amend CVE note and security guide section wordings

rails guideのSecuring Rails Applications、及び、各gemspecの修正です。

先で追加したCVEに関する記載について、言い回し、及び、記載箇所をadd_dependencyの前に移動しています。


Merge pull request #34375 from y-yagi/add_connect_src_to_default_csp_initializer

railties/lib/rails/generators/rails/app/templates/config/initializers/content_security_policy.rb.ttの修正です。

rails newで生成するcontent_security_policy.rbに、webpack-dev-serverを使用している場合、connect_srcの指定が必要である旨説明とそのexampleを追加しています。


Add JSON support to rails properties route (/rails/info/properties).

railties/lib/rails/info.rbの修正です。

rails properties routes(/rails/info/properties)にJSON formatのサポートを追加しています。/rails/info/properties.jsonにアクセスすると、rails propertiesがJSON formatで取得出来るようになっています。


Always add records to parent of nested transaction

activerecord/lib/active_record/connection_adapters/abstract/transaction.rbの修正です。

transactionをnestし、nestした先のtransactionでコミットを行った場合に、コミットしたrecordのcallbackが実行されないケースがあるバグああったのを修正しています。