なるようになるブログ

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

rails commit log流し読み(2015/10/31)

2015/10/31分のコミットです。

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

activerecord/CHANGELOG.md

railties/CHANGELOG.md


Merge pull request #12071 from Crunch09/outer_joins

Active Recordの修正です。

ActiveRecord::Relationleft_outer_joinsメソッドを追加しています。

User.left_outer_joins(:posts)
# => SELECT "users".* FROM "users" LEFT OUTER JOIN "posts" ON "posts"."user_id" = "users"."id"

後ほど、left_outer_joinsのaliasとしてleft_joinsが追加されており、User.left_joins(:posts)という書き方も出来るようになっています。


Merge pull request #11872 from AvnerCohen/log_namespace

activesupport/lib/active_support/cache.rbの修正です。

cacheをfetchした際に出力するログのkeyの値を、namespaceを使用している場合はnamespace付きの値を出力するよう修正しています。


Alias left_joins to left_outer_joins

Active Recordの修正です。

left_outer_joinsのaliasとして、left_joinsを追加しています。


Fix test failures caused by #12071

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

ActiveRecord::Relationleft_outer_joinsメソッドを追加した対応のテストが時折コケてしまっていたのを対応しています。

一部抜粋。

   def test_construct_finder_sql_does_not_table_name_collide_on_duplicate_associations
     assert_nothing_raised do
-      sql = capture_sql do
+      queries = capture_sql do
         Person.left_outer_joins(:agents => {:agents => :agents})
               .left_outer_joins(:agents => {:agents => {:primary_contact => :agents}}).to_a
-      end.first
-      assert_match(/agents_people_4/i, sql)
+      end
+      assert queries.any? { |sql| /agents_people_4/i =~ sql }
     end
   end

left_outer_joinsメソッドを使用した場合に実際に生成されるSQLについてのテストで、生成されるSQLは一つだけである前提にテストコードを書いていたのですが、 実行タイミングによってはschemaの情報も含まれてしまい、テストがコケてしまっていたようす。


Use advisory locks to prevent concurrent migrations

Active Recordの修正です。

migrationを実行する際、advisory locksを使用してmigrationが同時に実行されないよう対応を追加しています。

そもそも同時にmigrationを実行する、というのがどういう時なのかわからなかったのですが、元となったissue(Running multiple migrations simultaneously can cause race conditions (on Postgres, probably on others) · Issue #22092 · rails/rails)を見る限り、AWS Opsworksを使っている時なんですねえ。


don't sleep in tests

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

advisory lockのテストで、lock待ちをするのにsleepを使用していたのを、Concurrent::CountDownLatchクラスを使用するよう修正しています。


rails/application: allow passing an env to config_for

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

config_forメソッドに、envを指定出来るよう対応しています。

config_for('custom', env: 'production')

Merge pull request #21251 from rodzyn/more_param_parser_tests

actionpack/test/dispatch/request/json_params_parsing_test.rbの修正です。

CONTENT_TYPEapplication/vnd.api+jsonの場合のテストを追加しています。


:scissors:

activesupport/test/core_ext/hash_ext_test.rbの修正です。

不要な空行を削除しています。


Add tasks to automatize CHANGELOG headers

tasks/release.rbの修正です。

CHANGELOGの先頭にリリースされたRailsのバージョンと日付を追加する為のtaskを追加しています。

## Rails 4.2.5.rc1 (October 30, 2015) ##
(↑の部分)

*   Set `scope.reordering_value` to `true` if :reordering values are specified.

    Fixes #21886.

Rails 4.2.5.rc1がリリース用ですかねえ。


split process from mailer instantiation

actionmailer/lib/action_mailer/base.rbの修正です。

ActionMailer::Base.newメソッドで、processメソッドを呼ばないよう修正しています。

mailer objectの生成時に問題が起きないようにする為のようです。


minor formatting changes [ci skip]

activerecord/CHANGELOG.mdの修正です。

改行が無くてコードブロックが正しく表示されない箇所があったので改行を追加、及び、コメント行の先頭に#を追加しています。