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

これは、インスタンス/クラスどちらから呼んでも$protoにクラス名の文字列が入るようにするイディオムっぽい。

sub base_dir {
  my $proto = ref $_[0] || $_[0];
  # ...
}

ここだけ読んでもいまいちわからんから、後でまた読む。

Amon2/Config/Simple.pm

  • $cAmon2インスタンス
  • 所定の場所に置かれた、ハッシュリファレンスを返す設定ファイルを読む
  • 異常が無ければそのハッシュリファレンスを返す

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内を漁りたい

疲れたから次の記事にて...