なるようになるブログ

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

rails commit log流し読み(2016/08/08)

2016/08/08分のコミットです。

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

actionpack/CHANGELOG.md

actionview/CHANGELOG.md

activesupport/CHANGELOG.md


Defer requiring Rake until it's needed.

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

ファイルの先頭でrequire "rake"をしていたのを、実際にrakeが必要になってからrakeのrequireを行うよう修正しています。

rakeのrequire処理は大変遅く、rails helpのようなrakeが不要な処理の実行が遅くなってしまうのを防ぐ為、との事です。


Merge pull request #24260 from y-yagi/show_error_message_when_error_raised_in_rails_runner

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

rails runner実行時にSyntaxErrorNameErrorが発生した場合に、Rails 5.0.0でエラーの詳細が表示されなくなっていたのを、再度詳細が表示されるよう修正しています。


Merge pull request #26076 from yui-knk/privatize_expand

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

内部用のメソッドであるActiveRecord::PredicateBuilder#expandの可視性をprivateに変更しています。


Fix Accept header overridden when "xhr: true" in integration test

actionpack/lib/action_dispatch/testing/integration.rbの修正です。

integration testのHTTP処理用メソッドにxhr: trueオプションを指定した場合に、Accept headerに指定した値がRails側で強制的に上書きされてしまうバグがあったのを修正しています。

get '/page', headers: { 'Accept' => 'application/json' }, xhr: true

request.accept
# => `application/json`になるはずが、`text/javascript, text/html, application/xml, text/xml, */*`になってしまっていた

Modify LogSubscriber for single partial's cache message.

Action Pack、Action Viewの修正です。

cacheを使用しているpartial templateのrenderを行う際に、ログにcache hitかcache missかを表示するよう修正しています。

Rendered messages/_message.html.erb in 1.2 ms [cache hit]
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]

合わせて、元々表示していたfragment cacheのログはデフォルトでは表示しないようになりました。fragment cacheのログを表示したい場合は、config.action_controller.enable_fragment_cache_loggingにtrueを設定すれば表示されるようになります。


Add back unintentionally removed newline.

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

メソッド定義の前に空行を追加しています。


Move CHANGELOG entry to the top.

actionview/CHANGELOG.mdの修正です。

先ほどコミットされたpartialsのrender時のログの修正の対応のエントリーを、ファイルの先頭に移動しています。


Add changelog entry to Action Pack as well.

actionpack/CHANGELOG.mdの修正です。

先ほどコミットされたpartialsのrender時のログの修正の対応について、CHANGELOGにエントリーを追加しています。

Action View、Action Controller両方に関係ある対応である為、Action Packの方にもエントリーを追加しています。


Extract common view cache dependency setup.

actionview/test/template/log_subscriber_test.rbの修正です。

各テストそれぞれで行われていた view cache dependencyのセットアップ処理をメソッドに切り出していいます。


Assign config on base instead of on @controller.

actionpack/test/controller/log_subscriber_test.rbの修正です。

enable_fragment_cache_loggingの設定を@controllerインスタンス経由で行っていたのを、ActionController::Baseを直接参照するよう修正しています。

-    @controller.enable_fragment_cache_logging = true
+    ActionController::Base.enable_fragment_cache_logging = true

テストの実行順によっては、@controllerActionController::Baseが一致しないケースがある為。


copy-edits an exception message

actioncable/lib/action_cable/subscription_adapter/postgresql.rbの修正です。

Action CableのadapterにPostgreSQLを使用、かつ、Active Recordの接続先がPostgreSQLじゃなかった場合のエラーメッセージの、Postgres -> PostgreSQLに修正、及びRailsコンポーネント名の区切りにスペースを追加しています。


adds missing comma in assert call

actionpack/test/controller/resources_test.rbの修正です。

assertメソッドの引数指定にカンマが不足している箇所があったのを修正しています。


applies project convention for string literals

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

Stringを作成するのにシングルクォートを使用していたのを、ダブルクォートを使用するよう修正しています。


revises most Lint/EndAlignment offenses

コード全体でEndAlignmentのスペースの調整を行っています。

例。

         dependent = if dependent
           dependent
-                    elsif options[:dependent] == :destroy
-                      :delete_all
-                    else
-                      options[:dependent]
-                    end
+        elsif options[:dependent] == :destroy
+          :delete_all
+        else
+          options[:dependent]
+        end

上記のような場合に、elseの位置をどこに合わせるかなのですが、元々はifの位置に揃えてあったのを、左端に揃えるよう修正しています。


code gardening: removes redundant selfs

コード全体から不要なselfを削除しています。


explain why aliasing uses explicit selfs [ci skip]

activesupport/lib/active_support/core_ext/module/aliasing.rbのdocの修正です。

Module#alias_attributeメソッド内のdocに、何故selfを使用しているのかについての説明を追加しています。


damn typos [ci skip]

activesupport/lib/active_support/core_ext/module/aliasing.rbのdocの修正です。

orderotderにタイポしていたのを修正しています。


Merge pull request #25681 from willnet/fix-thread_mattr_accessor

activesupport/lib/active_support/core_ext/module/attribute_accessors_per_thread.rbの修正です。

thread_mattr_accessorを定義しているクラスのサブクラスで値を設定した場合に、親クラスの値も更新してしまうバグがあったのを修正しています。

class Account
  thread_mattr_accessor :user
end

class Customer < Account
end

Account.user = "DHH"
Customer.user = "Rafael"
# before
Account.user  # => "Rafael"

# after
Account.user  # => "DHH"

let instance thread_mattr_* methods delegate to the class-level ones

activesupport/lib/active_support/core_ext/module/attribute_accessors_per_thread.rbの修正です。

インスタンスthread_mattr_*メソッドの処理をclassのthread_mattr_*メソッドにdelegateするよう修正しています。

        class_eval(<<-EOS, __FILE__, __LINE__ + 1)
           def #{sym}
-            Thread.current["attr_"+ self.class.name + "_#{sym}"]
+            self.class.#{sym}
           end
         EOS

クラスメソッドとインスタンスメソッドで同じ内容を行っている為、との事です。


Use FETCH FIRST for Oracle12 database and Arel Oracle12 visitor

activerecord/test/cases/finder_test.rbactiverecord/test/cases/scoping/relation_scoping_test.rbの修正です。

limitを使用した場合に生成されるSQLを確認するテストで、生成されるSQLの一覧にFETCH FIRSTを追加しています。

-    assert_sql(/LIMIT|ROWNUM <=/) { Topic.take(3).entries }
-    assert_sql(/LIMIT|ROWNUM <=/) { Topic.first(2).entries }
-    assert_sql(/LIMIT|ROWNUM <=/) { Topic.last(5).entries }
+    assert_sql(/LIMIT|ROWNUM <=|FETCH FIRST/) { Topic.take(3).entries }
+    assert_sql(/LIMIT|ROWNUM <=|FETCH FIRST/) { Topic.first(2).entries }
+    assert_sql(/LIMIT|ROWNUM <=|FETCH FIRST/) { Topic.last(5).entries }

Oracle12 ではFETCH FIRSTが使われる為、との事です。へー。