なるようになるブログ

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

rails commit log流し読み(2015/09/15)

2015/09/15分のコミットです。

CHANGELOGへの追加はありませんでした。


rack_response should use the status it's given

actionpack/lib/action_dispatch/http/response.rbの修正です。

rack_responseメソッドで、statusの値のチェックをする際、メソッドの引数のstatusではなく、インスタンス変数の@statusの値を使用してしまっていたのを、メソッドの引数のstatusを使用するよう修正しています。


Merge pull request #21616 from claudiob/fix-21122

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

Callbacks moduleから不要なメソッドを削除しています。

元々は、callback処理にterminatorオプションが指定されてなかった場合に呼ばれるメソッドだったのですが、Introduce explicit way of halting callback chains by throwing :abort. Deprecate current implicit behavior of halting callback chains by returning false in apps ported to Rails 5.0. Completely remove that behavior in brand new Rails 5.0 apps の対応でActiveSupport::Callbacksがdefaultのterminatorを持つようになり、terminatorが設定されてない事が無くなり、該当のメソッドが呼ばれる事はなくなった為、削除したとの事です。


add a lock when allocating the renderer

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

Rendererクラスのインスタンス生成処理を、mutexでlockするよう修正しています。

controller classは各スレッドで共有される為、レースコンディション対策の為のようです。


initialize @renderer to avoid ivar warnings

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

先のRendererクラスのインスタンス生成処理についての対応で、@renderernilじゃない場合に処理を行うよう対応しているのですが、 @rendererが明示的に初期化されてなかった為、Rubyのwarningが出てしまっていたので、@rendererの初期化処理を追加しています。


eagerly allocate the renderer object

actionpack/lib/action_controller/base.rbactionpack/lib/action_controller/metal/rendering.rbの修正です。

controllerをloadした時点でRendererインスタンスを生成するよう修正しています。

これにより、各controller毎にRendererインスタンスを保持するようになる為、renderer生成時にlock処理が不要となり、先で追加されたmutextのlock処理は削除されています(代わりにcontrollerが全てRendererインスタンスを保持する為、その分のコストは発生するとの事)。


create a new renderer instance on calls to for

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

rendererのインスタンス生成用のメソッド(self.fornewwith_defaults)を追加しています。

+    # Create a new renderer instance for a specific controller class.
+    def self.for(controller, env = {}, defaults = DEFAULTS)
+      new(controller, env, defaults)
+    end
+
+    # Create a new renderer for the same controller but with a new env.
+    def new(env = {})
+      self.class.new controller, env, defaults
+    end
+
+    # Create a new renderer for the same controller but with new defaults.
+    def with_defaults(defaults)
+      self.class.new controller, env, self.defaults.merge(defaults)
     end

envの値を変更したRendererを生成したいのか、defaultsの値を変更したRendererを生成したいのかによって、使い分ける感じですかねえ。


Do not use conditionals at Gemfile

GemfileGemfile.lockの修正です。

Windows環境の場合のみ、nokogiriのバージョンを1.6.7.rc3以上に指定していたのを、全ての環境で1.6.7.rc3以上を指定するよう修正しています。

bundle installした環境によりGemfile.lockが変わってしまうのを防ぐため、との事。


only "normalize" once

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

Rendererクラスのコンストラクタで、keyのnormalize処理が2回呼ばれてしまっていたのを、1回で済むよう修正しています。


Merge pull request #20897 from lukechesser/guide-fix-for-acceptance-validation

rails guideのActive Record Validationsの修正です。

acceptance validationについて説明している箇所にacceptオプションについての説明を追加しています。


Bundler tzinfo-data in windows, even first generated new app are Mac

railties/lib/rails/generators/rails/app/templates/Gemfileの修正です。

rails appで生成されるGemfileに、不要なWindowsチェック処理があったのを削除しています。


Merge pull request #20848 from deivid-rodriguez/fix_undefined_method_error_on_exception

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

MySQLDatabaseTasks#createメソッドでエラーになり、エラーメッセージを表示する際、存在しないメソッドを使おうとして、undefined methodがおきてしまっていたのを対応しています。

-          $stdout.print error.error
+          $stdout.print error.message

なお、JDBCを使用している際に起こったの事。使われている方いらっしゃるんですねえ。


allocate request objects with the env hash, set routes on the request

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

Renderer#renderメソッドでcontrollerのインスタンスを生成する際、メソッドの中で直接env hashを使用してRequestオブジェクトを生成し、それをcontrollerに設定するよう修正しています。

env hashを直接参照するのを無くす為に、requestオブジェクトのroutesメソッド経由でroutesを設定する為に、Requestオブジェクトを先に生成するようにしたようです。G


fewer direct env manipulations

actionpack/lib/action_controller/metal/request_forgery_protection.rbactionpack/lib/action_dispatch/http/request.rbの修正です。

env hashに直接値を設定している箇所があったのを、ラッパーメソッド経由で値を設定するよう修正しています。