Обработчики маршрутов внутри класса - PullRequest
11 голосов
/ 25 января 2011

У меня есть настройка приложения Sinatra, в которой большая часть логики выполняется внутри различных классов, а маршруты post / get создают экземпляры этих классов и вызывают их методы.

Я думаю о том, будет ли лучше использовать структуру маршрутов post / get внутри самих классов.

В любом случае, я хотел бы знать, возможно ли это. Так, например:

class Example
  def say_hello
    "Hello"
  end

  get '/hello' do
    @message = say_hello
  end
end

Без модификации вышесказанного Синатра скажет, что для объекта SinatraApplication нет метода say_hello.

Ответы [ 2 ]

21 голосов
/ 25 января 2011

Вам просто нужно наследовать от Sinatra::Base:

require "sinatra/base"

class Example < Sinatra::Base
  def say_hello
    "Hello"
  end

  get "/hello" do
    say_hello
  end
end

Вы можете запустить свое приложение с Example.run!.


Если вам нужно больше разделения между частями вашего приложения, просто создайте другое приложение Sinatra. Поместите общую функциональность в классы моделей и помощников и запустите все свои приложения вместе с Rack.

module HelloHelpers
  def say_hello
    "Hello"
  end
end

class Hello < Sinatra::Base
  helpers HelloHelpers

  get "/?" do
    @message = say_hello
    haml :index
  end
end

class HelloAdmin < Sinatra::Base
  helpers HelloHelpers

  get "/?" do
    @message = say_hello
    haml :"admin/index"
  end
end

config.ru:

map "/" do
  run Hello
end

map "/admin" do
  run HelloAdmin
end

Установите Thin и запустите ваше приложение с thin start.

0 голосов
/ 25 января 2011

Возможно, вы захотите использовать Sinatra Helpers .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...