プログラミング的なSomething

プログラミング的なSomething

ITエンジニア(?)目線で生活・自転車・トレーニング話を綴ります

sinatraでアプリ書くために基本処理まとめ

sinatraでコード書くために基本的な処理書いた

Railsチュートリアルをボツボツ読んでましたが、Ruby自体への理解のなさに嫌気がさし舵を切り直して言語限定の学習に移行、パーフェクトRubyなんかを読み進めてますが肝心のアプリが手付かずなのでいろいろ考えた結果sinatraでコード書くことにしました。

きっかけはこの記事

今すぐ辞めて欲しい、「Ruby on Rails勉強してます」「CakePHP勉強してます」

全面同意なわけです。

Railsチュートリアルも、読んで理解できるというレベルには達するけど、アプリケーションにした場合に!どうしたら!いいの!!って心の底では思ってた。うん、sinatraだね。

基本処理

今回勉強のため書いたコードは以下です。

require 'sinatra'
require 'sinatra/reloader'

# リクエスト前の処理
before do
  # 共通の変数を使用することができる
  # before/afterは before '/admin/*' do のようにリクエストを指定することも可能
  @author = "hogehoge"
end

# リクエスト後の処理
after do
  # 例としてリクエスト後に正常完了したログメッセージを吐き出すようにした
  logger.info "page displayed successfully"
end

# ヘルパーによる共通関数の定義
helpers do
  def strong(s)
    "<strong>#{s}</strong>"
  end
end

get '/' do
  # helperで定義したstrongメソッドを使用した例
  "hello world " + strong("admin")
end

get '/hello/:name' do
  "hello #{params[:name]}"
end

get '/hello/:id/:name?' do |n,i|
  # 2値をブロックで与えることができる
  # ?を付けることでパラメータをオプションにすることができる
  "hello #{n} #{i}"
end

get '/from/*/to/*' do |f, t|
  # シンボルではなくワイルドカードでもパラメータを渡せる
  "from #{f} to #{t}"
end

get %r{/users/([0-9]*)} do |i|
  # 正規表現でも記述することができる
  "user id = #{i}"
end

get '/erb' do
  # ERBの使用例
  # ERBファイルのインデックスを読み込ませる
  erb :index
end

get '/:name' do |n|
  # パラメータをインスタンス変数で渡せる。テンプレート側で使用可能
  @name = n
  # パラメータでなくとも変数は格納可能
  @hoge = "hoge"
  erb :index
end