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 sinatraNyní 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=KarelMapová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:providesPomocné metody
