niedziela, 22 marca 2009

Sinatra

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.

1 komentarz:

Anonimowy pisze...

Each 8-to-1 corner that covers 4 numbers) could have $4,000 wagered on 빅카지노 it. Each 11-to-1 street that covers three numbers could have $3,000 wagered on it. Each $1,000 incremental wager would be represented by a marker that's used to specifically identify the player and the amount wager. Although most frequently named "call bets" technically these bets are more precisely referred to as "introduced bets". The authorized distinction between a "call wager" and an "introduced wager" is that a "call wager" is a wager known as by the player without him putting any cash on the table to cowl value of|the price of} the wager. In many jurisdictions this is thought of playing on credit score and is against the law|is unlawful}.