ページ

2010年12月4日土曜日

Sinatra,erbのHello WorldをHamlを使って書き直す

Slimというよさげなものが出てきて、是非とも流行ってほしいところですが、Sinatraに搭載されるのは次のリリースかららしいですし、僕はまずHamlをSinatraで使うのも覚束ないので、練習がてらに、

ここ↓に載ってるSinatraとerbを使ってのHello Worldのerb部分をHamlで書き直してみた。
http://gihyo.jp/dev/serial/01/ruby/0009?page=2

これが元のコード
require 'rubygems'
require 'sinatra'
helpers do
include Rack::Utils; alias_method :h, :escape_html
end
template :layout do
"<html><body><h1>Hello World</h1><%= yield %></body></html>"
end
get '/' do
erb %{
<p>あなたの名前は?</p>
<form action='/hello' method='POST'>
<input type='text' name='name'>
<input type='submit' value='送信'>
</form>
}
end
post '/hello' do
erb %{
<p>こんにちは,<%= h params[:name] %>さん!</p>
<a href='/'>戻る</a>
}
end
view raw hello_erb.rb hosted with ❤ by GitHub


そしてこれがHamlを使って書き直したもの。
# -*- coding: utf-8 -*-
require 'rubygems'
require 'sinatra'
require 'haml'
helpers do
include Rack::Utils; alias_method :h, :escape_html
end
template :layout do "
%html
%body
%h1 Hello World
=yield
"
end
get '/' do
haml '
%p あなたの名前は?
%form{:action=>"/hello", :method=>"POST"}
%input{:type=>"text", :name=>"name"}
%input{:type=>"submit", :value=>"送信"}
'
end
post '/hello' do
haml '
%p== こんにちは、#{h params[:name]}さん!
%a{:href=> "/"} 戻る
'
end
view raw hello_haml.rb hosted with ❤ by GitHub

「template :layout」には、htmlタグとかみたいな、各ページに共通する、まさにテンプレ部分を書くらしい。
ページによって無効にしたいときは、「haml :layout => false」してやればいいようだ。
ちなみに各タグに¥nとかの改行コードをつけてやれば、erbみたいに1行で書くこともできるけど、やってみたら気持ち悪い&見辛かった、のでこういう風にした。

インデントは全体的にちょっと気持ち悪いけど、Hamlはインデントに意味を持たせてるから下手にいじるとエラーが出ちゃう。
SinatraでHamlを使うときは、きちんと別ファイルを作ってやるとかしたほうがよさげなのかな。

追記:
別ファイルに作ってやった
http://zakuni.blogspot.com/2010/12/sinatrahaml.html

0 件のコメント:

コメントを投稿