なるようになるブログ

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

rails commit log流し読み(2018/07/04)

2018/07/04分のコミットです。

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

actionview/CHANGELOG.md


Add safe html support to arrays of translations

actionview/lib/action_view/helpers/translation_helper.rbの修正です。

TranslationHelper#translateメソッドでI18n.translateで取得した結果がArray、かつ、HTMLだった場合に、html_safeメソッドが呼ばれていなかったのを、結果がArrayだった場合もhtml_safeメソッドを呼び出す(値全てに対してhtml_safeメソッドを呼び出す)よう修正しています。


Merge pull request #33054 from jboler/master

Action Pack、railtiesの修正です。

routesをeager loadする際に、正しくeager load処理が行われず、ActionDispatch::Journey::Pattern::MatchDataNoMethodErrorが発生してしまうバグがあったのを修正しています。

eager loadのタイミングを修正(RoutesReloaderの初期化処理で必ず行うよう修正)し対応しています。


Add changelog entry for 42c3537 [ci skip]

actionview/CHANGELOG.mdの修正です。

Add safe html support to arrays of translationsの対応についてCHANGELOGにエントリーを追加しています。


Remove old TODO comment

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

Rails::ActionMethods#method_missingにあったコメントを削除しています。

-      # TODO: Remove once this is fully in place
       def method_missing(meth, *args, &block)
         @generator.send(meth, *args, &block)

コメントが書かれたのが7年以上前で、現状このmethod_missingを消すのは難しい状態なので、コメントを消してしまって良いのでは、という事で削除されています。


Better compatibility with SPEC.

actioncable/lib/action_cable/connection/stream.rbの修正です。

Connection::Stream#hijack_rack_socketメソッドでHijacking APIを使用する際に、rack.hijack envをcallした値を使用するよう修正しています。

-        @socket_object.env["rack.hijack"].call
-        @rack_hijack_io = @socket_object.env["rack.hijack_io"]
+        # This should return the underlying io according to the SPEC:
+        @rack_hijack_io = @socket_object.env["rack.hijack"].call
+        # Retain existing behaviour if required:
+        @rack_hijack_io ||= @socket_object.env["rack.hijack_io"]

RackのSPECによると、rack.hijack envをcallした結果はrack.hijack_ioを返すよう推奨されており、別途rack.hijack_io envを参照する必要は無い為。

参考:https://github.com/rack/rack/blob/eb040cf1bbb1b2dacd496ab0aa549de8408d8a27/SPEC#L89-L93


Use class_eval or instance_eval when triggering lazy load hooks:

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

lazy load hookを実行する際に、実行する対象がClass or Moduleの場合、instance_evalではなく、class_evalを使用するよう修正しています。

class_evalを使用しないとrun_load_hooksbaseにClass or Moduleが使用された場合に、hookに指定されたメソッドが呼び出せない為。