Sinatra::Base はルーティングや設定も継承する


Sinatra::Base を継承したクラスは、

  • 親クラスのルーティングをさらに継承したクラスでも利用できます
  • 親クラスの設定をさらに子クラスでも参照できます
app.rb
require 'sinatra/base'

class Parent < Sinatra::Base
  get '/' do
    "original root"
  end

  get '/foo' do
    "original foo"
  end

  set :some_setting, "some text"
end

class Child < Parent
  get '/foo' do
    "override foo"
  end

  get '/buz' do
    "#{settings.some_setting}"
  end
end

Child.run!

====

GET /

====

GET /foo

====

GET /buz

route! が親クラスを遡って探して行くため && settings は要するに self なので、普通に親クラスに定義されやメソッドを見に行くため、です