merbでのmap.resourcesのネスト

railsよりはとても読みやすくて、構造も現状のHTTP::Routerにとても近い。

map.resourcesのbuilder部分は、以下のファイル読めばOK。
merb-core/lib/merb-core/dispatch/router/resources.rb

resource.options(:name_prefix => singular, :resource_prefix => klass_name, :parent_keys => parent_keys).
match("/#{nested_keys}", nested_match_opts).resource_block(builders, &block)
  • 168, 169行目で下位のresourceのblock渡して、下位のresourceの処理してる。path情報が下位のroute作るために渡されている。
  • matchとかtoとかはDSLで、Behaviorに定義されてる。toメソッドでrouterのroutesにフラットにrouteインスタンスを追加していっている。だから、DSL的にはネスト構造になっているけれど、merb的にはrouteはフラットな形で管理されている。これは今のHTTP::Routerの構造にマッチしている。

routing部分に限れば、railsよりは大分よみやすい気がする。merb++