Obsah
Odkazy:
Sinatra is the easiest way to create a Fast, RESTful, web-application in Ruby with few dependancies, setup, and LOC.
Instalace s použitím RubyGems:
#
gem install sinatra
Nyní si můžeme napsat první jednoduchý program:
1 #!/usr/bin/env ruby 2 require 'rubygems' 3 require 'sinatra' 4 get '/hi' do 5 "Hello World!" 6 end 7
Program spusítme a prohlížečem se podíváme na http://localhost:4567/hi
.
$
./hello.rb== Sinatra/1.0 has taken the stage on 4567 for development with backup from Thin >> Thin web server (v1.2.7 codename No Hup) >> Maximum connections set to 1024 >> Listening on 0.0.0.0:4567, CTRL+C to stop
Na příkladu, na čtvrtém řádku, je vidět jak se mapuje kód na http dotazy. K tomuto mapování se používají příkazy get
, post
, put
a delete
. Mapovací metody mají jako parametr řetězec popisující část url. V tomto popisu můžeme použít "proměnné". Například v mapování
get '/hello/:name'
je :name
symbol pojmenovávající parametr na daném místě. Http příkaz GET /hello/Karel
je tedy zachycen mapováním '/hello/:name'
a hodnotou 'Karel'
je naplněn parametr params[:name]
.
get '/say/*/to/*' do params[:splat].inspect end # GET http://localhost:4567/say/hello/to/radek # => ["hello", "radek"]
Parametrů, proměnných, v cestě může být více. Můžeme dokonce použít anonymní parametry. Takové parametry zastupuje znak '*'.
get '/say/*/to/*' do |pole| pole.inspect end # http://localhost:4567/say/hello/to/Radek # => ["hello", "Radek"] # warning: multiple values for a block parameter (2 for 1)
V této ukázce nám Sinatra vypíše varování. V cestě jsme definovali dva parametry, ale v bloku kódu přebíráme jen jeden. Sinatra se s tím vyrovná tak, že nám vrátí pole všech parametrů.
get '/say/:msg/to/:name' do |m,n| "m=#{m}, n=#{n}" end # http://localhost:4567/say/hello/to/Karel # => m=hello, n=Karel
Mapování může provádat také regulárním výrazem
get %r{/hello/([\w]+)/(.*)} do "Hello, #{params.inspect}" end # http://localhost:4567/hello/Jana/Pavel # => Hello, {"captures"=>["Jana", "Pavel"]}
get %r{/hello/([\w]+)/(.*)} do |f,m| "Pár: #{f} a #{m}" end # http://localhost:4567/hello/Jana/Pavel # => Pár: Jana a Pavel
Při mapování můžeme mimo cestu zadat i podmínky. V těchto podmínkách můžeme testovat
:agent
:host_name
:provides
Pomocné metody