Sinatra::ContribSinatra::Namespaceの話です。

ウェブアプリなどを作る際、全部あるいは一部の機能を/foo/barなど特定のパス配下に置くことはよくあることでしょう。Sinatraでものを作っているとき、そのようなパスによるグループ化が欲しいと思いました。

require 'sinatra'
 
get '/app/api/a' do
  'Hello'
end
 
get '/app/api/b' do
  'Doumo'
end

なんかこう、/app/apiを何度も書くのが格好悪いからなんとかならないかと考えたわけです。まず始めに、ちゃんとSinatra::Baseを継承してやる方式ならやりようがあるだろうとは思いました。しかし、当時(今も)私はRackの知識は持っておらず、お手軽にちゃっちゃと作りたいため今ここでその勉強に向かうことには躊躇しました。

そこで何かあるだろうとググった結果見つけたのが、Sinatra::Namespaceです。上記のコードがこうなりました。

require 'sinatra'
require 'sinatra/namespace'
 
namespace '/app/api' do
  get '/a' do
    'Hello'
  end
 
  get '/b' do
    'Doumo'
  end
end

お見事です。無事、解決しました。というわけで、Sinatra::Namespaceを使ったというお話でした。


なお、Gemfileは以下の通りです。Sinatra::Namespaceには’sinatra-contrib’が必要です。

source 'https://rubygems.org'
 
gem 'sinatra'
gem 'sinatra-contrib'
スポンサード リンク

この記事のカテゴリ

  • ⇒ Sinatra::Namespaceを使ってみる