なるようになるブログ

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

rails commit log流し読み(2016/01/13)

2016/01/13分のコミットです。

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

railties/CHANGELOG.md

actionpack/CHANGELOG.md

activerecord/CHANGELOG.md


bring back TEST env for rake test.

railties/lib/rails/test_unit/testing.rakeの修正です。

Rails 4.2までは、rake testコマンドにTEST環境変数で実行するテストファイルを指定する事が出来たのですが、Rails 5でそれが出来なくなってしまっていたので、 再度指定出来るよう修正しています。


AC::Parameters#at_json: restore Rails 4.2’s value

actionpack/lib/action_controller/metal/strong_parameters.rbの修正です。

ActionController::Parameters#as_jsonの戻り値が、Rails 4.2とRails 5.0.0.beta1とで異なるようになってしまっていたのを、Rails 5.0でもRails 4.2と同じ値を返すよう修正しています。

PRより。

# Rails 4.2
ActionController::Parameters.new(hello: :world).as_json # {"hello"=>"world"}

# Rails 5.0.0.beta1
ActionController::Parameters.new(hello: :world).as_json # => {"parameters"=>{"hello"=>"world"}, "permitted"=>false}

as_json@parametersdelegateするようにして対応しています。


Prevent attempt to serve a request with a null byte

actionpack/lib/action_dispatch/middleware/static.rbの修正です。

request pathにnull byteが含まれていた場合に、500エラーが発生してしまっていたのを対応しています。

ActionDispatch::FileHandler#match?Rack::Utils.clean_path_infoを呼ぶ出すのですが、Rack::Utils.clean_path_infoに渡す値にnull byteが含まれていた場合に、Rack::Utils.clean_path_infoがExceptionをraiseしてしまい、500になってしまっていたようです。

Rack::Utils.clean_path_infoを呼ぶ出す前にpathにnull byteが含まれていないかどうかチェックし、対応しています。


Add both HTTP Response Code and Type to assertion messages

Action Packの修正です。

assert_responseでエラーメッセージを表示する際、エラーメッセージにHTTP statusの名前を表示するよう修正しています。

# before
Expected response to be a <success>, but was a <401>

# after
Expected response to be a <2XX: success>, but was a <401: Unauthorized>

Change WhereClause#merge to same named columns on diff tables

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

WhereClause#mergeが異なるテーブルに同じ名前のカラムがある場合にも正常に動作するよう対応しています。

が、一部問題があるケースがあるらしく、後ほどrevertされています。


monkey patch recycle! on to controllers once

actionpack/lib/action_controller/test_case.rbの修正です。

TestRequestで、controllerにテスト用のmoduleをmixinするのに、テスト用のメソッド(recycle!)が定義されているかどうかをチェックしていたのを、テスト内でActionController::Metalクラスを拡張し、直接テスト用のmoduleをmixinしてしまうよう修正しています。


remove present? calls

TestCase#processメソッドで、各種値(parameters、session等)をpresent?`でチェックしていたのを止めています。

一部抜粋。

-          if parameters.present? || session.present? || flash.present?
+          if parameters || session || flash

nilのemptyは別に扱うべきで、ここでpresent?のチェックをする必要は無いだろう、という事で削除されたようです。


Revert "Change WhereClause#merge to same named columns on diff tables"

Change WhereClause#merge to same named columns on diff tables をrevertしています。


do not run in parallel on travis

actionpack/test/abstract_unit.rbの修正です。

travis ciではテストをparallelで実行しないよう修正しています。これ何でだろう。


Improve error message for #or when it is structurally incompatible

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

queryの構成的に#orが使用出来ないような状況の場合に、エラーメッセージに何が問題でエラーになったかの詳細を出すよう修正しています。

テストより。

Post.order('body asc').where('id = 1').or(Post.order('id desc').where(:id => [2, 3])).to_a
# => ArgumentError: Relation passed to #or must be structurally compatible. Incompatible values: [:order]

fix regression when loading fixture files with symbol keys.

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

fixtureファイル にsymbol keyを使用していた場合にfixtureファイルの読み込みがエラー(ActiveRecord::Fixture::FixtureError)になってしまうバグがあったのを修正しています。


docs, formatting pass over changelogs. [ci skip]

CHANGELOGの修正です。

グラマー、フォーマットの修正をまとめて行っています。