なるようになるブログ

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

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

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

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

activejob/CHANGELOG.md

activerecord/CHANGELOG.md

railties/CHANGELOG.md

activesupport/CHANGELOG.md


Merge pull request #18766 from yasyf/issue_17864

activerecord/lib/active_record/associations/preloader/through_association.rbの修正です。

has_many :through association を使用している + eager loadした場合に、orderに指定した値が使用されないバグがあったのを修正しています。

class Article < ActiveRecord::Base
  has_many :by_lines, -> { order(:position) }
  has_many :authors, through: :by_lines
end

これにより、上記のようなmodelがあった場合に、authorsをeager loadした際、by_linesに指定したorderが使用されるようになっています。


Merge pull request #23948 from ctm/remove_pathological_regexp

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

sql_colorメソッドでqueryに色をつける際のSELECT queryのチェック条件を緩めています。

-        when /\s*.*?select .*for update/mi, /\A\s*lock/mi
+        when /select .*for update/mi, /\A\s*lock/mi

SELECTの直前に改行が入る場合の事を考慮して、との事です。


Merge pull request #23927 from gaurish/jruby_ci_actionpack

.travis.ymlの修正です。

JRuby + Action PackのテストをTravis CIで動作するよう設定を変更しています。


- Updating the dummy app template to have rails_command instead of rake

activejob/test/support/integration/dummy_app_template.rbの修正です。

db:migrateを実行するのにrakeメソッドを使用していたのを、rails_commandメソッドを使用するよう修正しています。


Respect through association scopes when used with polymorphic

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

has_many associationにsource_typeを指定、かつpolymorphicを使用している場合に、正しくassociationを参照出来ないバグがあったのを修正しています。


generate config/spring.rb in new applications [closes #18874]

railties/lib/rails/generators/rails/app/app_generator.rb railties/lib/rails/generators/rails/app/templates/config/spring.rbの修正です。

新規Railsアプリを生成する際、Springで監視する対象を記載したconfig/spring.rbを生成するよう修正しています。

config/spring.rbの中身は下記の通りです。

%w(
  .ruby-version
  .rbenv-vars
  tmp/restart.txt
  tmp/caching-dev.txt
).each { |path| Spring.watch(path) }

Remove inconsistency in the Action Cable README [ci skip]

actioncable/README.mdの修正です。

Action CableはPumaやThinのようなスレッドモデルのAPサーバじゃないと動作しない旨記載されていたのですが、実際はそうではない(Rack socket hijacking APIに対応していれば動作する)為、その旨説明を修正しています。


Merge pull request #23966 from jeremy/activejob/pare-down-async-adapter-for-low-footprint-dev

Active Jobの修正です。

元々、async adapterはqueue毎にthread poolを持ち、かつ、2〜10 * CPU数まで保持するようになっていました。

これを、一つのthread poolを全てのqueuesで保持するように改善、かつ、thread poolの数を0〜CPU数までと抑えるよう修正しています。dev/test環境で省スペースで処理を行えるようにする為、との事です。


Deprecate :controller and :action path parameters

Action Packの修正です。

routes.rbのpath parametersに:controller:actionを使用するのがdeprecateになりました。

下記みたいな書き方ですね。

get ':controller(/:action)'

path parametersに:controller:actionを記載出来るようになっているの、多くのissueの根本的な原因になっており、それによりsecurity releasesを出す事があった為、との事です。


Support :any variants lookup in PathResolver https://github.com/rails/rails/commit/d150f59f114dc2d362b9d8f96df88ca4fea09dc4

actionview/lib/action_view/template/resolver.rbの修正です。

PathResolver#build_queryメソッドでqueryを生成する際に、variants:anyだった場合のケアを追加しています。


do not set Action Cable's config when specify --skip-action-cable option

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

--skip-action-cableオプションを指定した場合に、デフォルトで生成するproduction.rbにAction Cableに関するconfigを記載しないよう修正しています。


Deprecate Module.local_constants

Active Supportの修正です。

module内で定義されているconstantの名前の一覧を取得する為のModule.local_constants メソッドがdeprecateになりました。

元々Ruby 1.8までに綺麗に値をとれる方法が無くて作成されたメソッドだったらしいのですが、Ruby 1.9以降ではModule.constants(false)を使えば値が取得出来るので、そちらを使用するようにとの事です。


Mock fork twice

railties/test/generators/app_generator_test.rbの修正です。

Process.forkが使えない環境でGemfileにspringが定義されてない事を確認するテストで、forkのmock処理を2回行うよう修正しています。

-    assert_called_with(Process, :respond_to?, [:fork], returns: false) do
+    assert_called_with(Process, :respond_to?, [[:fork], [:fork]], returns: false) do

assert_called_withメソッドの中でProcess.respond_to?(fork)複数回呼ばれる為、対応したとの事です。自動で全部の呼び出しmockしている訳ではないんですねえ。