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
Ссылки:
В следующей главе мы поговорим о сессиях, редиректе, и шаблонах.
Лучшая благодарность автору — ваши комментарии.