なるようになるブログ

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

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

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

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


use Rack::Utils.unescape_path to unescape paths

actionpack/lib/action_dispatch/middleware/static.rbの修正です。

本来、pathのescae / unescape 処理はクエリーパラメータのescaping / unescap とは異なる処理を行う必要があったのですが、今までは同じエスケープ処理を使っていました。

で、新しくrack側にpathのescape / unescape 処理を行うようのメソッドを追加したので、pathのescape / unescape 処理については、そちらのメソッド(Rack::Utils.escape_path / Rack::Utils.unescape_path)を使用するよう修正しています。

Rack::Utils.escape_pathRack::Utils.unescape_pathの実装は、この辺り。デフォルトだと、URI::Parserのescape / unescap メソッドが呼ばれる感じなんですねえ。


use path escaping for email addresses

actionview/lib/action_view/helpers/url_helper.rbactionview/test/template/url_helper_test.rbの修正です。

emailのpathのエスケープ処理に、先のコミット同様、Rack::Utils.escape_pathメソッドを使用するよう修正しています。


#where fails if opts.responds_to?(:==) unexpectedly

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

WhereChain#whereメソッドで、引数のopt:chainであるかどうかのチェックをする際、optの==メソッドを呼び出していたのを、Symbolの==メソッドを呼びだすよう修正しています。

     def where(opts = :chain, *rest)
-      if opts == :chain
+      if :chain == opts

Arel::Nodes::Groupingクラスのように、独自に==メソッドを定義しているオブジェクトをoptsに指定した場合に、==メソッドの実行結果としてArel::Nodes::Equalityが返ってきてしまい、おかしな挙動になってしまう為、Symbol#==メソッドで比較処理を行うように修正したとの事です。


stop inheriting from Rack::Request

Action Packの修正です。

ActionDispatch::RequestクラスがRack::Request継承していたのを、継承しないよう修正しています。

代わりに、必要なmodule(Rack::Request::HelpersRack::Request::Env)のみインクルードするよう修正しています。

request objectsへのdelegate処理をしやすくする為、との事です。


stop using deprecated Abstract::ID class

Action Packの修正です。

deprecatedになったRack::Session::Abstract::IDの代わりに、Rack::Session::Abstract::Persistedクラスを使用するよう修正しています。


implement abstract store methods

Action Packの修正です。

cache関係のクラスの親クラスがRack::Session::Abstract::Persistedに変わった事により、実装が必要なメソッド名も変わった為、 元々あったsessionの検索/書き込み/削除のメソッドを、新しいメソッド名に変更しています。


Remove mocha from ActionPack tests

Action Packのテストの修正です。

mock処理にmochaを使っていたのをやめて、rails内のヘルパーメソッドを使用するよう修正しています。