前回(Haml と Sass - Rubyとか Illustratorとか SFとか折紙とか)の続き
RSpec(Rails)とか Cucumberとかちょっと更新あったので、アプリケーション作成からもう一度。
(1)hs9587@vmw04[1163] rails haml_sass -dpostgresql
[~/project/haml_sass] <pts/3> (1)hs9587@vmw04[1167] haml --rails . 14:02 0801 Haml plugin added to .
[~/project/haml_sass] <pts/3> (1)hs9587@vmw04[1168] script/generate rspec 14:03 0801
[~/project/haml_sass] <pts/3> (1)hs9587@vmw04[1169] script/generate cucumber 14:11 0801
それはこんな感じ。
About your application’s environment Ruby version 1.8.7 (i486-linux) RubyGems version 1.3.5 Rack version 1.0 Rails version 2.3.3 Active Record version 2.3.3 Action Pack version 2.3.3 Active Resource version 2.3.3 Action Mailer version 2.3.3 Active Support version 2.3.3 Application root /home/hs9587/project/haml_sass Environment development Database adapter postgresql Database schema version 20090720122318
Database schema version は前回のが後引いてる感じ、そのうち何とかなるでしょう。
index.html
ここでちょっと public/index.html を Haml化してみる。
[~/project/haml_sass] <pts/3> (1)hs9587@vmw04[1181] md public/haml 14:23 0801 [~/project/haml_sass] <pts/3> (1)hs9587@vmw04[1182] html2haml public/index.html > public/haml/index.haml
あたまのあたりとかこんな感じ、結構それっぽい。
#content #header %h1 Welcome aboard %h2 You’re riding Ruby on Rails! #about %h3 %a{ :href => "rails/info/properties", :onclick => "about(); return false" } About your application’s environment #about-content{ :style => "display: none" } #getting-started %h1 Getting started %h2 Here’s how to get rolling:
だが、これを動的に提供する術はないみたい。それに、haml/index.haml がテキストとして見えてしまう。
可視性については置いといて、もとの index.html を上書きする感じで一々 hamlコマンドする事に。
[~/project/haml_sass] <pts/3> (1)hs9587@vmw04[1187] haml public/haml/index.haml > public/index.html
さっきの #header (これは「<div id='header'>」以下を成す(「<>」全角半角注意)。あれ、「'」一重引用符(シングルクォート)良いんだっけか) にちょっと追加。次に作る Itemのリストへのリンク。
#header %h1 Welcome aboard %h2 You’re riding Ruby on Rails! %h2 %a{ :href => 'items' } Items
そのままだと #headerスタイルの形が崩れる (Railsロゴの大きさ固定値の為) けどその辺は適当にする、要は \#headerの background-image: url("images/rails.png"); 指定の所で height: をどうにかする、解除する。
rspec_scaffold
取り敢えずモデル一つ作ってみる、前回と同じく
[~/project/haml_sass] <pts/3> (1)hs9587@vmw04[1195] script/generate rspec_scaffold Item name:string description:text
[~/project/haml_sass] <pts/3> (1)hs9587@vmw04[1196] script/generate feature Item name:string description:text
前回の DB引き摺ってて rake db:migrate エラーしたり。db:drop、db:create してからまた。
で、rake spec
36 examples, 0 failures
rake features も
2 scenarios (2 passed) 9 steps (9 passed)
scaffold.css、items.html.erb
scaffold.css
そして出来てる public/stylesheets/scaffold.css を変換する。変換先ディレクトリも用意する。
[~/project/haml_sass] <pts/3> (1)hs9587@vmw04[1206] md public/stylesheets/sass 15:18 0801 [~/project/haml_sass] <pts/3> (1)hs9587@vmw04[1207] css2sass public/stylesheets/scaffold.css > public/stylesheets/sass/scaffold.sass
これで public/stylesheets/scaffold.css はそれなりに動的に生成されるようになってる(筈)
変換した scaffold.sass の出来がなんだかなあなのは前回通り。
items.html.erb
レイアウトの方。
[~/project/haml_sass] <pts/3> (1)hs9587@vmw04[1219] html2haml app/views/layouts/items.html.erb app/views/layouts/items.html.haml [~/project/haml_sass] <pts/3> (1)hs9587@vmw04[1220] ls app/views/layouts 15:32 0801 items.html.erb items.html.haml
.erb の方は無しにする。
rake spec
36 examples, 0 failures
rake features
2 scenarios (2 passed) 9 steps (9 passed)
そしてビュー
まず一覧
[~/project/haml_sass] <pts/3> (1)hs9587@vmw04[1224] html2haml app/views/items/index.html.erb app/views/items/index.html.haml
[~/project/haml_sass] <pts/3> (1)hs9587@vmw04[1226] ls app/views/items/ 15:37 0801 edit.html.erb index.html.erb index.html.haml new.html.erb show.html.erb
両方ある状態で、.haml の方が優先になるみたい、しかしエラー
Haml::SyntaxError in Items#index Showing app/views/items/index.html.haml where line #21 raised: You don't need to use "- end" in Haml. Use indentation instead: - if foo? %strong Foo! - else Not foo. Extracted source (around line #21): 18: = link_to 'Edit', edit_item_path(item) 19: %td 20: = link_to 'Destroy', item, :confirm => 'Are you sure?', :method => :delete 21: - end 22: %br 23: = link_to 'New item', new_item_path RAILS_ROOT: /home/hs9587/project/haml_sass
自動変換では、end はとってくれないようだ。しかし haml的にはそれは良くない。これくらいなんとかしてよ。
その .hamlはこんな感じ
%h1 Listing items %table %tr %th Name %th Description - @items.each do |item| %tr %td = h item.name %td = h item.description %td = link_to 'Show', item %td = link_to 'Edit', edit_item_path(item) %td = link_to 'Destroy', item, :confirm => 'Are you sure?', :method => :delete - end %br = link_to 'New item', new_item_path
まあ、直す、「- end」取る。.erbファイルの方も片付ける。
%h1 Listing items %table %tr %th Name %th Description - @items.each do |item| %tr %td = h item.name %td = h item.description %td = link_to 'Show', item %td = link_to 'Edit', edit_item_path(item) %td = link_to 'Destroy', item, :confirm => 'Are you sure?', :method => :delete %br = link_to 'New item', new_item_path
で、エラー。これでエラーだと言われてもなんだかよく分からない。
SyntaxError in Items#index Showing app/views/items/index.html.haml where line #24 raised: compile error /home/hs9587/project/haml_sass/app/views/items/index.html.haml:24: syntax error, unexpected kENSURE, expecting kEND /home/hs9587/project/haml_sass/app/views/items/index.html.haml:26: syntax error, unexpected $end, expecting kEND Extracted source (around line #24): 21: %br 22: = link_to 'New item', new_item_path Trace of template inclusion: app/views/items/index.html.haml
rake spec のエラーは直接これとは関係ないのかな
1) ActionView::MissingTemplate in '/items/index.html.erb renders a list of items' Missing template items/index.html.erb in view path app/views ./spec/views/items/index.html.erb_spec.rb:20: Finished in 0.8044 seconds 36 examples, 1 failure
rake features もエラー
Failing Scenarios: cucumber features/manage_items.feature:14 # Scenario: Delete item 2 scenarios (1 failed, 1 passed) 9 steps (1 failed, 1 skipped, 7 passed) 0m0.598s
どうしようか。よく分からなくなってきた。
すぐに追記
単純にインデントの問題であった。自動変換でこれをしてくれないのは何だかなあ。
%h1 Listing items %table %tr %th Name %th Description - @items.each do |item| %tr %td = h item.name %td = h item.description %td = link_to 'Show', item %td = link_to 'Edit', edit_item_path(item) %td = link_to 'Destroy', item, :confirm => 'Are you sure?', :method => :delete %br = link_to 'New item', new_item_path
each節のインデントが足りなかった模様。
rake spec、rake features のエラーは儘。その辺はまた後で。