Amon2を読むぞい その1
現時点で最新の6.10を読んでみる。 まずは全体の構成を眺める。
lib ├── [ 374] Amon2 │ ├── [ 102] Config │ │ └── [1.4K] Simple.pm │ ├── [ 436] ContextGuard.pm │ ├── [ 424] Declare.pm │ ├── [ 102] Plugin │ │ └── [ 272] Web │ │ ├── [1.5K] FillInFormLite.pm │ │ ├── [4.9K] JSON.pm │ │ ├── [ 783] NoCache.pm │ │ ├── [ 491] PlackSession.pm │ │ ├── [2.6K] Streaming.pm │ │ └── [3.0K] WebSocket.pm │ ├── [ 204] Setup │ │ ├── [ 408] Asset │ │ │ ├── [ 15K] Blueprint.pm │ │ │ ├── [900K] Bootstrap.pm │ │ │ ├── [ 14K] ES5Shim.pm │ │ │ ├── [1.7K] MicroDispatcherJS.pm │ │ │ ├── [2.8K] MicroLocationJS.pm │ │ │ ├── [1.8K] MicroTemplateJS.pm │ │ │ ├── [6.9K] SprintfJS.pm │ │ │ ├── [5.9K] StrftimeJS.pm │ │ │ ├── [1.2K] XSRFTokenJS.pm │ │ │ └── [ 83K] jQuery.pm │ │ ├── [ 170] Flavor │ │ │ ├── [4.9K] Basic.pm │ │ │ ├── [7.6K] Large.pm │ │ │ └── [2.2K] Minimum.pm │ │ ├── [6.0K] Flavor.pm │ │ └── [ 102] VC │ │ └── [1.1K] Git.pm │ ├── [2.2K] Trigger.pm │ ├── [1.9K] Util.pm │ ├── [ 238] Web │ │ ├── [ 170] Dispatcher │ │ │ ├── [1.2K] Lite.pm │ │ │ ├── [5.6K] RouterBoom.pm │ │ │ └── [1.8K] RouterSimple.pm │ │ ├── [5.2K] Request.pm │ │ ├── [ 102] Response │ │ │ └── [1.6K] Callback.pm │ │ ├── [ 363] Response.pm │ │ └── [1.3K] WebSocket.pm │ └── [8.0K] Web.pm └── [7.2K] Amon2.pm
Setup系が多い印象。
メインはAmon2::Web
あたりなのかな。
ひとまず上の階層から中身を覗いてみる。
Amon2.pm
- 設定を持ったりプラグインを読んだりする場所
- context
これは、インスタンス/クラスどちらから呼んでも$proto
にクラス名の文字列が入るようにするイディオムっぽい。
sub base_dir { my $proto = ref $_[0] || $_[0]; # ... }
ここだけ読んでもいまいちわからんから、後でまた読む。
Amon2/Config/Simple.pm
$c
はAmon2
のインスタンス- 所定の場所に置かれた、ハッシュリファレンスを返す設定ファイルを読む
- 異常が無ければそのハッシュリファレンスを返す
Amon2::Util.pm
フレームワーク外から使う想定のものではないようだ。
add_method
クラスにメソッドを生やす君
base_dir
ファッ?!
sub base_dir($)
とはいったい...。
「perldoc.jp sub 検索」
...どうやら、引数がただ1つだけであることを明示しているようだ。
random_string
/dev/urandom
から乱数を得ている/dev/urandom
が無い時はDigest::SHA
で生成
Amon2/Trigger.pm
- 任意のクラス、オブジェクトに、文字列でメソッドを関連づける君
- フックポイントに使っている
Class::Trigger
と同じようなアレっぽい
そろそろWeb内を漁りたい
疲れたから次の記事にて...