なるようになるブログ

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

rails commit log流し読み(2017/02/26)

2017/02/26分のコミットです。

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

actionpack/CHANGELOG.md

activesupport/CHANGELOG.md

activerecord/CHANGELOG.md


Commit flash changes when using a redirect route.

actionpack/lib/action_dispatch/routing/redirection.rbの修正です。

routeでredirectメソッドを使用している、かつ、そのredirect処理内でflashを設定した場合に、その設定したflashがコミットされてない(flash hash経由で値が取得出来ない)バグがあったのを修正しています。

issueより。

# config/routes.rb
Rails.application.routes.draw do
  get "/foo", to: redirect { |params, req|
    req.flash[:error] = "test"
    # uncomment this out to make it work:
    #req.commit_flash
    "/bar"
  }
  get "/bar", to: "bar#show"
end

上記のように定義した場合に、controllerでflash[:error]に値が設定されてない状態になってしまっていました。


Deprecate AbstractAdapter#verify! with arguments

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

AbstractAdapter#verify!メソッドに引数を渡すのがdeprecateになりました。引数は渡せるようになっていたものの、Rails 2系の頃から渡された引数は全く使用していなかった為、deprecateにしています。


Use ensure block for things we cleanup in tests

activerecord/test/cases/adapters/mysql2/connection_test.rbactiverecord/test/cases/adapters/postgresql/connection_test.rbの修正です。

テストの後処理をensureブロック内で行うよう修正しています。


Suppress DISTINCT clause outside aggregate function

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

集約関数用メソッドを実行した際、クエリーに不要なDISTINCTが含まれていたのを、削除しています。

コミットより。

# Before
author.unique_categorized_posts.count
# => SELECT DISTINCT COUNT(DISTINCT "posts"."id") FROM "posts" INNER JOIN "categorizations" ON "posts"."id" = "categorizations"."post_id" WHERE "categorizations"."author_id" = ?  [["author_id", 2]]

# After
author.unique_categorized_posts.count
# => SELECT COUNT(DISTINCT "posts"."id") FROM "posts" INNER JOIN "categorizations" ON "posts"."id" = "categorizations"."post_id" WHERE "categorizations"."author_id" = ?  [["author_id", 2]]

AS CHANGELOG Pass [ci skip]

activesupport/CHANGELOG.mdの修正です。

各エントリーのフォーマット、タイポの修正をまとめて行っています。


Fix change_column to drop default with null: false

Active Recordの修正です。

change_columnメソッドでdefault: nil + null: falseが同時に設定出来ない(e.g. change_column "tests", "contributor", :boolean, default: nil, null: false)バグがあったのを修正しています。


Fix typo ‘affect’ -> ‘effect’ [ci skip]

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

AbstractAdapter#verify!メソッドに引数を渡した際のdeprecateメッセージでeffectaffectにタイポしていたのを修正しています。


Add Duration#before and #after as aliases for #ago and #since

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

ActiveSupport::Duration#until#sinceメソッドのaliasとして、#after#beforeメソッドを追加しています。

5.days.before(Date.today)
# => Tue, 21 Feb 2017
2.weeks.after
# => Sun, 12 Mar 2017 10:41:22 UTC +00:00

Remove duplicated private method

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

ActiveRecord::ActiveRecord moduleで二回privateメソッドを2回呼び出していたので、2回目の呼び出しを削除しています。


Remove useless select_values += select_values

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

不要なselect_values変数への代入処理を削除しています。直前の行でselect_valuesは定義済みであり不要との事。

-        select_values += select_values unless having_clause.empty?

が、実際は意味のある行だった為、後ほどrevertされています。


Use released arel

guides/bug_report_templates/action_controller_master.rbの修正です。

ActionController用のbug report templateファイルで、リリース済みのarelを使用するよう修正しています。


Merge pull request #28176 from kamipo/push_valid_type_up_to_abstract_adapter

Active Recordの修正です。

各adapterで独自に処理が定義されていたvalid_type?メソッドについて、abstract adapterで処理を定義するよう修正しています。各adapterでやっている事が同じだった為。


Remove unused params.

actionpack/lib/action_dispatch/routing/route_set.rbの修正です。

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


Include selects in group query with having clause

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

先ほど削除されたselect_valuesの代入式を戻しています。また、合わせてその代入式が必要な場合についてのテストを追加しています。having句で指定したaliasをselectに含む場合に必要だったらしいです。

+ select_values += self.select_values unless having_clause.empty?

[ci skip] Add CHANGELOG entry for #28183

activerecord/CHANGELOG.mdの修正です。

直前のhaving句で指定したaliasselectで指定した場合について正しく動作するようにした対応について、CHANGELOGにエントリーを追加しています。