Sinatra で Controller を分割したくなったら Rack::URLMap を使うとよさそう
こういう感じのアプリケーションがあったとします。
で、この例だとまったくファットじゃないんだけど、Controller がファットになってきてしまった場合に、いい感じに分割したくなることもありますよね。
ということでとりあえずこうしてみた。
各クラスが Sinatra::Base
を継承するではなくて、Base
を設けてそれを継承するようにしているのは、各クラス内でそれぞれ before
を書きたくなかったからです。
が、このように書いてしまうと、リクエストパスによっては 1 回のリクエスト中に before
内の処理が複数回実行されてしまいます。(実際に before
に適当に p 123
とか書いて起動して、アクセスしてみるとわかる)
それだと最悪なので、最終的にこうした。
ルーティングを config.ru
に書きたくなかったので、定数化して呼び出すようにしています。
参考