こちらの続きで、
https://qiita.com/gussan-dayo/items/00b7b5a84cb67c8376ae
ルーティングにいて見ていきます。
※参考
http://sinatrarb.com/intro.html
#Routes
In Sinatra, a route is an HTTP method paired with a URL-matching pattern. Each route is associated with a block:
Sinatraでは、ルートはURLマッチングパターンとペアのHTTPメソッドです。それぞれのルートはブロックと結び付けられています。と書かれています。
get '/' do
.. show something ..
end
post '/' do
.. create something ..
end
put '/' do
.. replace something ..
end
patch '/' do
.. modify something ..
end
delete '/' do
.. annihilate something ..
end
options '/' do
.. appease something ..
end
link '/' do
.. affiliate something ..
end
unlink '/' do
.. separate something ..
end
最初にマッチしたルートの情報が呼び出されます。
例えば、
require 'sinatra'
get '/' do
'Hello world!'
end
では http://localhost:4567/
を開くと画面にHello world!と表示されます。
##ルート情報の追記
ルート情報を追記してみます。
# myapp.rb
require 'sinatra'
get '/' do
'Hello world!'
end
get '/hello/' do
'Hello '
end
次に、http://localhost:4567/hello
にアクセスしてみます。
おっとエラーが出ました。
http://localhost:4567/hello/
のように、helloの後に / が抜けていたのが原因でした。
次に、
# myapp.rb
require 'sinatra'
get '/' do
'Hello world!'
end
get '/hello' do
'Hello '
end
として、サーバをもう一度立ち上げ直し、http://localhost:4567/hello
に接続すると、うまく接続出来ました。
##名前付きルート
名前付きのルート情報について見てみましょう。
require 'sinatra'
get '/' do
'Hello world!'
end
get '/hello/:name' do
"Hello #{params['name']}!"
end
get '/hello/:name' do
のように[:変数]とすることで、URLに任意の変数を持たせることが出来ます。
paramsハッシュでnameを取得することが出来ます。
http://localhost:4567/hello/ruby
に接続すると、nameにrubyという文言が入ります。
また、こう記述することも出来ます。
require 'sinatra'
get '/' do
'Hello world!'
end
get '/hello/:name' do
"Hello #{params['name']}!"
end
get '/hello2/:name2' do |n|
"Hello #{n}!"
end
ここでは、新しくルート情報を追記しました。
繰り返し構文の変数を使用しても、ルートを表示出来るます。
##ワイルドカード
ワイルドカードもルーティングに含めることが出来ます。
require 'sinatra'
get '/say/*/to/*' do
# matches /say/hello/to/world
params['splat'] # => ["hello", "world"]
end
get '/download/*.*' do
# matches /download/path/to/file.xml
params['splat'] # => ["path/to/file", "xml"]
end
こちらもparams['splat']でルート情報を取得することが出来ます。
正規表現にもマッチさせることもできます。
get /\/hello\/([\w]+)/ do
"Hello, #{params['captures'].first}!"
end
こちらも繰り返し構文で表現することが出来ます。
get %r{/hello/([\w]+)} do |c|
"Hello, #{c}!"
end
##まとめ
ルーティング用のファイル名っていまのところ何でも?良さそうです。
わくわくしますね~