Dzisiaj będzie o
Sinatrze, nie o Franku Sinatrze, słynnym wokaliście, ale o frameworku nazwanym jego nazwiskiem. Framework napisany jest w Ruby. Czerpie nieco z Merba, z Ruby on Rails. Jest na tyle ciekawy, że najprostsza aplikacja zawiera się w kilku linijkach:
#sinatraweb.rb
require 'rubygems'
require 'sinatra'
get '/' do
"Hello World!"
end
Po czym w konsoli odpalamy:
gem install sinatra ; instalujemy gem sinatra
ruby websinatra.rb
A w przeglądarce wchodzimy pod adres
http://localhost:4567 i gotowe, pierwsza aplikacja w Sinatrze została uruchomiona. Może wynik nie imponuje, bo to tylko sam tekst, ale w ciągu kilku minut udało się uruchomić aplikację, działającą na własnym serwerze.
W tym przypadku Ruby on Rails jest kolosem, w którym trzeba nieco bardziej się napracować aby cokolwiek zrobić ;) Dobra, koniec żartów i nabijania się bądź co bądź z bardzo dobrego frameworku. W Sinatrze, bez problemu można dodać layouty dla stron. Do katalogu, w którym znajduje się aplikacja dodajemy katalog
views, do którego dodajemy plik
layout.erb (Sinatra obsługuje także szablony haml, builder. Ja wybrałem erb gdyż znam go z RoR.):
<html>
<head>
<title>Sinatra</title>
</head>
<body>
<div>
<h1>Sing!</h1>
</div>
<div>
<%= yield %>
</div>
</body>
</html>
Słowo
yield umieszczamy w miejscu gdzie ma pojawić się treść. W tym samym katalogu dodajemy kolejny plik,
index.erb wyświetlający konkretną treść:
<p>
Witaj, może znajdziesz tu coś dla siebie!
Teraz jest: <%= @data %>
<p>
I jeszcze modyfikujemy główny plik aplikacji:
require 'rubygems'
require 'sinatra'
get '/' do
@data = DateTime.now
erb :index
end
Jak widzimy, sposób używania widoków wygląda podobnie jak w RoR. Poprzez metodę get definiujemy ścieżkę dostępu do zasobu a w bloku definiowane jest zachowanie kontrolera. Nie przypadkowo użyłem tu słowa "zasób" gdyż mamy od dyspozycji jeszcze metody:
post, put i delete. Czyli istnieje możliwość implementacji kompletnego interfejsu
REST.
Sinatra pozwala na napisanie aplikacji opartych o wzorzec Model-View-Controller, mimo iż w przykładowej aplikacji nie występuje żaden model. Nie narzuca też jakiegoś konkretnego rozwiązania, dlatego też można użyć ActiveRecord, Og, lub innych podobnych rozwiązań do połączenia się z bazą danych.