ActionDispatch::Http::Headers のコードリーディング
なぜ?
CakePHPを長く使っていて、Railsを趣味でちょいちょい触ってみている状態で、
その差として思いつくのが、
この標準機能の知識と言語の慣れを埋めるために、railsのコードを読んでみるのは面白いんじゃないか?ということで。
プログラムの開始点ということで、ディスパッチ周りから適当にピックアップ。
概要
HTTPヘッダー情報を取得する処理
ActionDispatch::HttpモジュールにHeaderクラスを定義している
pick up
Set#include Setはinclude?をArrayより高速に使えるので使ってる?
http://docs.ruby-lang.org/ja/2.2.0/library/set.html
%W記法でスペース区切りで配列を表現出来る http://qiita.com/mogulla3/items/46bb876391be07921743#2-4
Object#freezeで変更不可に出来る 定数的に表現出来る
文字列の置換 string#tr http://ref.xaio.jp/ruby/classes/string/tr
Headers constructorの引数のrequestが@reqに入れられてるけど、実態が解らない。
@reqの正体は、Rack::Request http://www.rubydoc.info/gems/rack/Rack/Request
Rackとは http://route477.net/d/?date=20080716
今回は偶々わかったけど、実体を見つけるのは結構面倒そう?
alias method の定義 http://qiita.com/akishin/items/41f03a513c7ffd51a014
headerのマージ処理。 dupで複製してから、!付きでマージ。
# Returns a new Http::Headers instance containing the contents of # <tt>headers_or_env</tt> and the original instance. def merge(headers_or_env) headers = @req.dup.headers headers.merge!(headers_or_env) headers end
正規表現について
String#=~ でパターンマッチ http://ref.xaio.jp/ruby/classes/string/match_operator
\A, \z は開始文字と終了文字を表す http://qiita.com/jnchito/items/ea7832df6f64a9034872