Rails勉強会@東京第36回に行ってきた
年の瀬も近づく中,忘年会の前座Rails勉強会@東京に行ってきました.今回は50人近い参加者と,かなり大規模になりました.盛り上がってる感があるのはいいことですよね.
- 今回は株式会社Cuon | 業務システム開発をRuby on Railsで |さん提供の会場にて開催
セッションネタ
- 前半
- Scaffold の半歩先へ
- Cucumber をゆっくりしゃべる
- 後半
- 優しい Merb の育て方
- 『実践 Rails』を愛でる
Cucumber がアツい and Webrat がスゴい
- Cucumber
- feature がテストの大きな枠組みで,scenario が各テストに対応
- 自然言語プログラミングじゃなくて,正規表現使いまくり
- 後方参照(\d+ など)でパラメータを利用できる
- Webrat(on github at 2008/12/21)
- Web アプリを外から操作する DSL セット
- <input /> にはラベルでアクセスできる
- リンクもテキストでアクセスできる
- あとはアプリケーション独自の step を用意する
- モデル・データの準備など
- まとめ
- 日本人が見てわかる文章でテストが実行されるので,お客さんにわかるテキストになる
- 受け入れテスト結果がわかりやすくなる?
- 日本人が見てわかる文章でテストが実行されるので,お客さんにわかるテキストになる
- RAQ(Rarely Asked Question)
- header("ACCEPT_LANGUAGE", "ja") などとヘッダーを追加できる
- Post -> Redirect のときには,Integration テストではヘッダーが追加されないので,Post -> Redirect -> Reload しなくてはヘッダーが有効にならない(Rails 2.1.2)
- OpenID 認証のテストするときは,
- 自分でログインページにポストする
- リダイレクト先を取ってきて,そこに Net::HTTP.start で接続する
- 結果は Nokogiri で解析してボタンをクリックしたことにする
- レスポンスから認証結果を判断する
- OpenID Fake Server(http://github.com/kakutani/openid_fake_server/tree/master)を使ってる
- rcov 連携することで,外からのアクセスでたどるようなページでエラーがないことも確認できそう
- RSpec と Cucumber を組み合わせて
- Step ファイルの分割方針は?
- features/**/*.rb は全部読み込む
- 一人でプログラムする場合の利点は?
- 有用性と英語じゃなくて日本語で書く意義について論争展開
- Locale に依存した場合は?
- 日本語か英語でロジックとして共通している部分をテストして,言語に依存する部分について別のテストを用意するのがいいのではないか
Merb 的雑談 + locale と i18n + Rack と Metal
- インストール
- gem install merb
- アプリケーション作成
- merb-gen app hello
- script/console
- merb -i
- mi
- alias !!
- Merb
- module
- Merb.root
- RAILS_ROOT
- RSpec がデフォルト
% merb gen model item
- モデルは普通の class
- DataMapper を使うときは include DataMapper::Resource
- property :id, Serial
- t.integer :id な感じ
- モデルのクラスに型や何を O/R Mapper として使うかを指定できる
- :key => true
- 主キー指定
- db:automigration
- rake db:automigration
- モデルのテーブル定義をやり直す -> DROP and CREATE
- db:autoupgrade
- 自動的に変更したカラムの差異を適用してくれる
- Extlib
- Dictionary
- Ordered Hash
- dirty tracking 有り
- Pref.all :name.like => "%to%"
- :conditions => ["name like ?", "%to%"]
- Pref.all の戻り値は DataMapper::Collection
- LazyArray を継承している
- 必要になるまで Query を発行しない
- Pref.all.last が 1 クエリーで実行できる
- LazyLoading
- クラスメソッドを作れば,named_scope のようなことができる
- Pref.all.active.tokyo など
def self.active all(:deleted => false) end
- 関連
- has n, :items
- has_many :items
- has 2..4, :items なんてのもできる
- has n, :items
- callbacks
- Extlib::Hook から
- before / after
- validation
- validates_length :name, :is => 3 などとする
- obj.save!
- validation を skip する
- ActsAsParanoid的な機能もある
- Repository
- 複数データベース対応
- 親と子を別のデータベースに保存することも可能
- 関連も勝手に見てくれる
- slice
- 小さなMVCのセット
- partial view のセットとかのイメージ?
- cheat コマンド
- gem install cheat
- Wikiにある情報をネット越しに取得して表示するコマンド