heroku + sinatra で form

こんばんは。麺処まつば副店長です。
本日の麺処まつばのまかないは、天ぷらうどんでした。

さて、前回のメニューは Hello world だったので
今回は、フォームから hello world って入れてもらう事とします。

ということで、今回のメニューは、「"hello world"って言えよ」アプリ。
\なんだそりゃ/
ツッコミありがとうございます(ひとり上手)

フォームから送信された文字列が
hello world」という文字列かどうかを判定。
hello world」じゃなかったら「"hello world"って言えよ」
ってふてくされたメッセージが表示されます。ただそれだけです。

作り方はこんな感じです

  • appの作成
  • viewsの作成
  • 動作確認
  • 試食会

appの作成

まずは、/にGETしたときとPOSTしたときのロジックを書きます。
GETのときは、viewの指定するだけ。
POSTのときは、paramsの中のstrの値を判定して
表示するメッセージを決定しています。
app.rb

#coding:utf-8

require 'rubygems'
require 'sinatra'
require 'haml'

configure :production do
end

get '/' do
  haml :index
end # end [post /]

post '/' do
  # 表示するメッセージのデフォルト値
  @message = "はい、こんにちは"
  # もし、送信された文字列が「hello world」じゃなかったらふてくされます
  @message = "\"hello world\"って言えよ" unless params[:str] == "hello world"
  haml :index
end # end [post /]

viewの作成

ブラウザから文字列を送信するためのviewsを用意します。
sinatra で使えるやつは色々あるみたいですが
(→http://www.sinatrarb.com/intro-jp.html
ここでは、haml使ってみようと思います。
あ、haml入れてない場合は用意しといてくださいね。
(→http://haml.ursm.jp/

$ gem install haml

views/index.haml

!!! XML
!!!
%html
  %head
    %meta{ :content=>"text/html", :charset=>"utf-8" }
    %title hello worldだよ
  %body
    #main
      %h1 hello worldだよ
      %div hello worldって入力してね
      # 入力フォーム部
      %form{:action=>"/", :method=>"post"}
        %input{:type=>"texfield",:name=>"str"}
        %input{:type=>"submit", :value=>"send"}
      # 送信された文字列に応じて表示するメッセージ
      %div= @message

動作確認

それでは、ここまで作ったやつを動かしてみましょう
おっと、その前に。Gemfile に haml 使いますよ宣言しましょう。
3行目におもむろに追加です。
Gemfile

source :rubygems
gem 'sinatra'
gem 'haml'

そして起動

$ rackup

http://localhost:9292/ につないでみましょう。
GETにて表示されたフォームで、
hello world」って入力すると気持ちよく挨拶を返してくれて、
違う文字列を入力して、ふてくされたら成功です。
→成功しました。

試食会

それでは、このくだらない代物を heroku にアップしてみましょう

$ bundle install
$ git add views/
$ git commit -a -m 'say <hello world>'
$ git push heroku master
$ heroku open

動作確認の時と同じように、ふてくされたら成功。
あ。ふてくされた。成功しました。

それでは、次回は heroku でDBを使うトコロをやってみようと思います。