読者です 読者をやめる 読者になる 読者になる

WEB系エンジニアの勉強日記

Baby steps to Giant strides!

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