Sinatra: Введение и роутинг

сентября 25, 2011  |  Published in Sinatra

Новая рубрика в RubyDev — разработка на Sinatra Framework.

Кто не знает, Sinatra — это минималистичный веб фреймворк написанный на Ruby, построенный на основе Rack. Sinatra отлично подходит для разработки простых сайтов и сервисов, где Rails будет слишком избыточным решением. Сами разработчики называют Sinatra — «Domain Specific Language for quickly creating web-applications in Ruby».

Установка Sinatra

$ gem install sinatra
Fetching: tilt-1.3.3.gem (100%)
Fetching: sinatra-1.2.6.gem (100%)
Successfully installed tilt-1.3.3
Successfully installed sinatra-1.2.6
2 gems installed

RubyGems установит собственно Sinatra Framework и gem Tilt — интерфейс для множества языков шаблонов реализованных на Ruby (erb, haml, textile, markdown, slim и т.д.).

В Sinatra, также, как и в Rails присутствуют запросы: get, post, put, delete, последние два эмулируются, так как браузеры их не поддерживают. В то время, когда в Rails правила маршрутизации (роутинга) хранятся в файле ./config/route.rb, в Sinatra роутинг описывается прямо в том, что я, с вашего позволения, назову контроллером. Выглядит роутинг примерно так:

<request> 'pattern' do
  # что-то тут делаем
end

Конкретный пример:

#./app.rb
require 'sinatra'

get '/' do
  "Welcome to RubyDev.ru"
end

Запускаем:
$ ruby app.rb
== Sinatra/1.2.6 has taken the stage on 4567 for development with backup from WEBrick
[2011-09-25 18:33:45] INFO  WEBrick 1.3.1
[2011-09-25 18:33:45] INFO  ruby 1.9.2 (2011-02-18) [i686-linux]
[2011-09-25 18:33:45] INFO  WEBrick::HTTPServer#start: pid=4785 port=4567

Именованные параметры роутинга реализованы похожим образом как в Rails — через символы — ключи доступа к параметрам:

require 'sinatra'

get '/' do
  "Welcome to RubyDev.ru"
end

get '/:id' do
  "Article ##{params[:id]}"
end

При переходе по адресу http://localhost:4567/12 мы увидим текст: «Article #12″.

Безымянные (splat) параметры. Пример:

require 'sinatra'

get '/' do
  "Welcome to RubyDev.ru"
end

get '/:id' do
  "Article ##{params[:id]}"
end

get '/*/edit' do
  "Edit #{params[:splat].first}"
end

При переходе по адресу http://localhost:4567/hello/edit мы увидим текст «Edit hello».

Именованными и splat параметрами можно пользоваться не только используя params, но и используя аргументы блока кода. Для демонстрации перепишем пример выше:

require 'sinatra'

get '/' do
  "Welcome to RubyDev.ru"
end

get '/:id' do |id|
  "Article ##{id}"
end

get '/*/edit' do |prop|
  "Edit #{prop}"
end

Этот пример полностью эквивалентен примеру выше.

Замечание: Параметр :id в Sinatra по умолчанию должен быть только целочесленного типа.

Фильтры
В Sinatra, также как и в контроллерах Rails имеются before и after фильтры. Пример:

require 'sinatra'

before do
  @title = "Sinatra Tutorial"
end

before '/' do
  @welcome = "Welcome to RubyDev.ru"
end

get '/' do
  "#{@title}<br />#{@welcome}"
end

get '/:id' do |id|
  #@welcome не определена
  "#{@title}<br />#{@welcome}"
end

get '/*/edit' do |prop|
  "#{@title}<br />Edit #{prop}"
end

Ссылки:

В следующей главе мы поговорим о сессиях, редиректе, и шаблонах.

Лучшая благодарность автору — ваши комментарии.

Tags: ,

Leave a Response

Для подсветки кода используйте BB - коды: [language]...[/language], где language может быть: ruby, javascript, css, html.