Rails Plugin - View系

投稿者 nanki 2006-04-25 23:28:00 GMT
hotkey
  • link_toブラザーズの仲間?
  • <!-- d を押すと リモートリクエスト -->
    <%= hotkeytoremote :d, :url => {:controller => 'somecontroller'} %>
    <!-- h を押すと /home/ へジャンプ -->
    <%= hotkeyto :h, :controller => 'home'} %>
    <!-- p を押すと showPreferencesPanel を実行 -->
    <%= hotkeytofunction :p, "showPreferencesPanel();" %>
SimpleSidebar
  • class ApplicationController < ActionController::Base
     helper SimpleSidebarHelper
     include SimpleSidebar
    end
    で準備完了。
  • コントローラに
    sidebar :search
    と指定すると、
    <%= render_sidebars %>
    app/views/sidebars/_search.rhtmlが展開される。
  • :only, :except, :if, :unless
    などのオプションで条件が指定可能。
google maps
  • Cartographerよりよさそう。
  • <%
    map = GoogleMap.new
    map.markers << GoogleMapMarker.new(:map => map,
                                    :lat => 47.6597,
                                    :lng => -122.318,
                                    :html => 'My House')
    -%>
    <%= map.to_html %>
    <%= map.div %>
  • unbacked dom id pluginに依存。
  • $ script/plugin install https://secure.near-time.com/svn/plugins/trunk/unbacked_dom_id/
  • GoogleMapLetterIcon.new("A")で、文字入りアイコンも取れるよう。
InPlaceControls
  • Ajaxを利用した、in-placeな部品を使って、即時変更。
  • booleanを返す属性には、in_place_edit_forの代わりにin_place_edit_for_booleanを。
  • <%= inplacecheckbox :user, :verified, :checked => 1, :unchecked => 0 %>
    <!-- :checked, :unchecked は、チェックされた時/はずされた時に設定したい値を -->

<%= inplaceradio_buttons :post, :published, :choices => [[true, "Yes"],[false, "No"]] %> <!-- :choicesは、値の配列 or 値とラベルの配列 -->

<%= inplaceselect :address, :country, :choices => countryoptionsforselect %> <!-- :choicesは、値の配列 or 値とラベルの配列 or optionsfor_selectの結果 -->

* svn://rubyforge.org/var/svn/inplacecontrols

widgets
  • app/views/widgets/以下にテンプレートファイルを置いて
  • <%= render :widget => 'text/yell_banner', :text => 'Hello, world!' %>
    と使う。
  • module ApplicationHelper
    include Widgets
    widget 'text/yell_banner' do |params|
     {:text => params[:text].upcase}
    end
    end
    のように、Helperに定義を追加することで、パラメータに手を加える事が可能に。
  • Helperに定義を書かなかったらほとんど:partialと同じ?
acts_as_wizard
  • 既存のアクションを繋げてウィザードにする。
  • $ script/generate wizard CreateCatAndDogでひな形作成。
  • class CreateCatAndDogWizard < Wizard::Base
    addstep do
     # 名前
     named 'Insert your cat'
     # コントローラ
     controlledby :cats
     # 有効なアクション
     enableactions :new, :create
     # new -> create -> list と行きたいところだが、dogs/newに飛んでもらわないと困る
     addrewrite({:action=>'list'}, {:controller => 'dogs', :action => 'new'})
    end

add_step do

named <span class="string"><span class="delimiter">'</span><span class="content">Insert your dog</span><span class="delimiter">'</span></span>
controlled_by <span class="symbol">:dogs</span>
enable_actions <span class="symbol">:new</span>, <span class="symbol">:create</span>
<span class="comment"># main/finishedに飛んでもらわないと困る</span>
add_rewrite({<span class="symbol">:action</span>=&gt;<span class="string"><span class="delimiter">'</span><span class="content">list</span><span class="delimiter">'</span></span>}, {<span class="symbol">:controller</span> =&gt; <span class="string"><span class="delimiter">'</span><span class="content">main</span><span class="delimiter">'</span></span>, <span class="symbol">:action</span> =&gt; <span class="string"><span class="delimiter">'</span><span class="content">finished</span><span class="delimiter">'</span></span>})

end

add_step do

named <span class="string"><span class="delimiter">'</span><span class="content">Finished!</span><span class="delimiter">'</span></span>
controlled_by <span class="symbol">:main</span>
enable_actions <span class="symbol">:finished</span>

end end

な感じで。 * application.rbに require 'create_cat_and_dog_wizard'をお忘れなく。 * URLはそのままだと、/cats/new?wizard=create_cat_and_dogになってかっこわるいので、
# routes.rb
map.connect 'createcatand_dog/:controller/:action/:id',

        <span class="symbol">:wizard</span> =&gt; <span class="string"><span class="delimiter">'</span><span class="content">create_cat_and_dog</span><span class="delimiter">'</span></span></span></notextile></pre></div>でかっこよく。
  • wizardのURLは、
    urlfor :controller => 'cats', :action => 'new', :wizard => 'createcatanddog'
tabnav
  • タブナビゲーションを簡単に。
  • $ script/generate tabnav Main
  • <!-- layout.rhtml -->
    <%= starttabnav :main %>
    <%= @contentforlayout %>
    <%= endtabnav %>
  • class MainTabnav < Tabnav::Base     
    addtab do named 'User' # タブの名前 titled 'User!' # title属性(ブラウザによってはtooltipが出る) linksto :controller => 'user' # リンク先(url_forと同じオプション) end

add_tab do

named <span class="string"><span class="delimiter">'</span><span class="content">Admin</span><span class="delimiter">'</span></span>
links_to <span class="symbol">:controller</span> =&gt; <span class="string"><span class="delimiter">'</span><span class="content">admin</span><span class="delimiter">'</span></span>
show_if <span class="string"><span class="delimiter">&quot;</span><span class="content">params[:admin] == true</span><span class="delimiter">&quot;</span></span> <span class="comment"># 表示条件</span>

end
end

のように。 * links_toで指定されたページを表示している時は、自動的にハイライトされるが、それ以外のページでもハイライトさせたかったらhighligths_onを使う。

UJS Rails
  • cssのセレクタを使って、Javascriptの適用が可能。
  • $ rake unobtrusive_javascript:installで必要なファイルをインストールし、
  • # in config/routes.rb
    UJS.routes
  • <!-- in layout file -->
    <%= javascriptincludetag 'prototype', :unobtrusive %>
  • apply_behavior 'a.help:click', 'Help.open(this.href)'
    でhelpクラスを持つaタグのclickイベントを設定。
  • RJS+CSSセレクタみたいなの。
  • sessionが有効じゃないと使えない。
rails-tidy
  • Tidy,RubyTidy(gemあり)が必要。
  • Unix で使う場合はRubyTidyに添付のパッチを当てること。
  • config/environment.rb に RailsTidy.tidy_path = "/path/to/your/libtidy.so"
  • $ rake test_template でテンプレートの正当性チェック
  • test において、assert_tidyで、レンダリング結果の正当性をチェック
  • class ApplicationController < ActionController::Base
    after_filter :tidy
    def tidy
     RailsTidy.filter(response)
    end
    end
    で出力をきれいにしてくれる。
12_hour_time
  • 日時入力のセレクトボックスにAM/PMが追加されて、12時間表記で時間指定ができるようになる。
live_tree
  • DHTMLでツリー表示ができるコンポーネント。
  • 非同期通信による更新に対応。
  • 基本的には、acts_as_tree な ActiveRecord を使う。
  • 非ARデータでも使う方法あり。
  • 画像,css,jsなどを各ディレクトリに配置。
  • controllerに
    class FamilyController < ApplicationController
    livetree :familytree, :model => :person
    def show_tree
     @root = Person.find(params[:id]);
    end
    end
  • viewに
    <%= livetree(:familytree, { :initialdataroot => @root, :onclickitem => "alert('You clicked on ' + item.name)", }) %>
  • layoutにstylesheet\_link\_tag, javascript\_link\_tagも忘れずに。
  • demo
browser_filters
  • UnicodeContentType: text/html; charset=utf-8 の設定を自動で
  • SafariUnicodeFix: SafariでAjaxを使う時の問題を回避
  • LinkPrefetchingBlock: Google Web Accerator などがリンクを先読みするのをブロック
labeled_form_helper
  • <label>タグのalias
  • <% formfor :person, @person, :url => { :action => "update" } do |f| %>
    First name: <%= f.textfield :first_name %>
    <% end %>
    と書くとFirst name: をラベルに変換してくれる
label_helpers
  • <%= label "person", "name", "Name:" %>
    というコードで、labelを生成。
  • エラーメッセージもラベルと一緒に出してくれる。
restifarian
  • Rails をRESTful にしてくれるらしい
  • RailsのモデルにアクセスするためのRESTfulな?URL形式をRoutesで定義しているだけみたい
    • /models/:action -> コレクションに対する操作
    • /model -> 新規作成
    • /model/:id -> エンティティを表示
    • /model/:id/:action -> エンティティに対する操作 といった感じで、ModelsControllerにマッピングしてくれる。
scriptaculous_slider
  • rake scriptaculous_slider_install でslider.jsをインストール。
  • <%= sliderstylesheet %>
    <%= sliderfield :object, :method, :range => 1..10 %>
    とやると、form中で使えるスライダーが、
  • <div id="slider">
    <div id="handle"></div>
    </div>
    <%= sliderelement 'slider', :range => (0..100), :slidervalue => 50 %>
    でただのスライダーが作れる。
localization
  • 多言語対応用
  • <%=_ 'yes' %> のように参照
  • 単数/複数にも対応できる
css_graphs
  • ドキュメントは無い
  • 棒グラフが生成できる
  • 一ページに付き一個という制限
  • プラグインではないが、同じ人が作ったGruff, Sparklinesはよさそう。gem でインストールできるようだし。
  • GruffをRailsで使うも参考に。
asset_timestamping
  • この画像、ブラウザにキャッシュされては困る、というときに使う
  • image_tag('smiley.jpg')
    => <img src="/images/smiley.jpg?1129811151" />
    と展開される。
  • add\_query\_mtime とほぼ同じだが、こっちはimage\_tag にもスタンプが付く。
  • Rails1.1.1で取り込まれたみたい。
add_query_mtime
  • asset\_timestampingとほとんど同じ。
  • こっちは、javascript\_include\_tagstylesheet\_link\_tag にのみ働く。
javascript_generator_templates
  • RJS Templates として知られるものと同じ
  • サーバ側でJavascriptを動的に生成、ブラウザに実行させることができる
us_states
  • アメリカ51州のセレクトボックス。
  • 残念ながら日本は含まれていないので、あまり用途はない。
wiki_engine
  • rails_engineでこんなこともできるんだぞ!という例。
  • production品質ではありません、と書かれている
date_slider
  • Flashを使ったデータ表示コンポーネント
  • かっこいいデモムービー
  • Flash/JavaScript間の通信ライブラリを使っているので、Railsから動作をいじれる
head-helper
  • doctype,stylesheet,script,metaなど、<head>の中で使いそうなものを集めました。
enhanced-form-tag-helper
  • formのinput系のタグに、id,class属性が自動的に付加されるようになる
liquid
  • template engineをerbからliquidに変更
  • .rhtml -> .liquid
  • .rhtml と混在可能
  • {{ item.name }} みたいな記法
  • {{ item.name | upcase }} のように、パイプのような表現で出力フィルタをかけられるのが特徴的
  • フォーマット付きテキストを多様するような場合は、記述がシンプルになってよさそう
rails_pdf
  • PDFWriterを使ってPDFが出力できるようになる。
  • テンプレートは.rpdf 中身はrubyのコード
  • 1ページだけ、画像対応無し
  • ほかの方法についてはHow to generate PDF in Ruby on Railsを参照
upload_progress
  • アップロードの進み具合を表すバーを作る。
  • demo
  • requirements
  • コントローラに
    uploadstatusfor  :create
    という感じの記述を加えると、:createアクションでプログレスバーが使えるようになる。
datebox_engine
  • 日付入力(yesterday とかを日付にしてくれる)、カレンダー
  • カレンダーは各国語に対応。
  • app/controllers/application.rbに
    include DateboxEngine
    を追加。
  • app/helpers/application_helper.rbに
    include DateboxEngine
    を追加。
  • Engines.start :datebox もお忘れなく
  • app/views/layout/layout.rhtmlに
    <%= enginestylesheet "dateboxengine", "calendar-blue" %>
    <%= enginejavascript "dateboxengine", "calendar", "lang/calendar-en", "calendar-setup" %>
  • demo など
HTML Output
  • Railsの出力をXHTMLじゃなくてHTMLにしてくれるらしい。
  • https://svn.turnipspatch.com/public/html_output/trunk/
syntax_highlight
  • Syntax Highlightingを可能に。
  • <%= syntax_highlight(text) %> でOK.
  • syntax が必要。gemあり。
theme_support
  • アプリケーションをテーマ対応に。
  • layouts, images, stylesheets, javascripts, views を簡単に切り替えられる。
  • class ApplicationController < ActionController::Base
    layout 'default'
    theme 'blue_bird'
    ...
    end
    とすることで、テーマを変更可能。
  • theme :get\_theme とすることで、実行時にController#get\_theme でテーマを決めることも。
  • ASPサービス作るときに便利そう。
selector
  • ここ
  • InPlaceEditor のセレクトボックス版。
  • InPlaceEditor 同様に、 in\_place\_selector\_for をcontrollerに、in\_place\_selector\_field をview側に。
  • <%= javascript\_include\_tag "controls2" %>を忘れずに。
  • 選択リストはDBから取ってくる。
safe_render
  • render :partial => “…” で、ファイルが存在しなかった時に、例外を投げずにnilを返すので、safe_render(:partial => ‘toolbar’) || “ ” という書き方ができるらしい。
  • rescue の後置ではだめなんだっけ?
  • safe_render(:partial => [‘toolbar’, ‘shared/toolbar’]) とすることで、見つかるまでテンプレートを探してくれる。こっちはいいかも。
RUtils
  • ちょ・・・何語だ?,ストヤンなら読めるに違いない。
  • どうも、ロシア語化を支援するためのものらしい。
  • rutilize /Sites/my_app /Sites/my_other_app で、ロシア語化されるみたい。
cartographer
  • Google Mapsを簡単に組み込める。
  • vendor/plugins/cartographer/lib/keys.rb にGoogle MapのAPI Keyを置き、
  • app/views/layout/layout.rhtml に
    <head>
    <%= gmaps_header %>
    ...
    </head>
  • def map
    @map = Cartographer::Map.new( :name => 'mymap', :width => 300, :center => [-110,33], :debug => true)
    @map.markers << Cartographer::Marker.new( :position => [-110,33], :info_window => 'Clicky clicky!!', :map => @map )
    end
    とすれば、
  • <%= @map.to_html > で地図がでる。
  • ピンの動的更新とかはない。
  • 実装途中のところが多くて、.ymlでAPIKeyをおけるようになっているようで、ドキュメントには言及がなかったり。
  • svn://cartographer.rubyforge.org/trunk/vendor/plugins/cartographer はアクセスできなくて、svn://rubyforge.org//var/svn/cartographer/trunk/vendor/plugins/cartographer ?
markaby
  • erbの代わりに、拡張子 .mab の、DSL風記法が使える。
  • "item\_#{@item.id}"みたいなidにしたい時、どうするんだろう?
  • html do
    head do
     title 'Products: ' + actionname
     stylesheetlinktag 'scaffold'
    end
    body do
     p flash[:notice], :style => "color:green"
     self << contentfor_layout
    end
    end
  • <div class="window">, <div id="logo">
    は、div.window, div.logo!。

Rails Plugin - 開発系

投稿者 nanki 2006-04-25 23:27:00 GMT
row_version_migrations
  • createtable :orders, :rowversion => false do |t|
    ...
    end
    とやると、
    :createdat,   :datetime,  :null => false
    :updatedat,   :datetime,  :null => false
    # optimistic lock用
    :lock_version, :integer,   :null => false, :default => 0
    が自動で追加される。
Safe ERB
  • ActiveRecordでDBから取ってきた値や、リクエスト由来の値を<%=h ... %>を使わずに表示しようとすると例外を発生させる。
ARTS
  • RJSのテスト用
  • *_test.rbにて
    include Arts
  • def testcreate
    post :create
    assertrjs :insert_html, :bottom, 'post'
    end
    などとすることで、RJSの結果がテストできる。
  • RJSで使えるメソッドは全部用意してあるもよう。
annotate_models
  • app/models/*.rb にテーブルのスキーマ情報を書き出してくれる。
  • app/modelsの下にサブディレクトリがあるのはうまく扱えないらしい。
  • 使う前にファイルをバックアップしてくれ・・・とのこと。
assert_valid_markup
  • functional testの中で、assert\_valid\_markupとすると、W3C Validatorでチェックしてくれる。
  • 結果がキャッシュされるので、変更がなければ遅くならない。
  • CSSもvalidateできるようになってassert\_valid\_asset が登場。
assert-valid-asset
  • assert\_valid\_css\_files 'layout', 'standard', 'theme' などとすることで、CSSもvalidateできるように。
debug_view_helper
  • <% if RAILSENV == 'development' %>
    <button onclick="showdebugpopup(); return false;">Show debug popup</button>
    <%= debugpopup %>
    <% end %>
    でデバッグ用のポップアップが開く。
continuous_builder
  • 最新のリビジョンでのテストの結果をメールで送信してくれる
  • 時間がかかるようなものや、複数のアプリケーションにまたがるような変更をしたときなどに便利そう?
  • Continuous integrationを実現するためのものらしい
exception_notification
  • include ExceptionNotifiable すると、例外が発生したときに然るべき所にメールを送信してくれる
ar_fixtures
  • テスト用のfixturesを今あるデータベースから生成してくれる?
engines
  • ほにゃらら_engine の親分
refactor
  • model,controllerのpublic methodに対するtest stubを自動生成してくれる。
  • $ rake find_unused_viewsで使われてないview を見つけてくれる。
assert_accessible
javascript-packaging
  • 複数のJavaScriptのソースファイルを実行時にひとつにまとめてくれる
  • 開発時はばらばらなので、見通しがよくなる
  • まだあんまりテストされてない
migrate_ext
  • rake migrate に機能を付加
    • rake current_schema # 現在のバージョン番号を表示
    • rake migrate_ext VERSION=-1 # 一つ前に戻す
Foreign Key Schema Dumper
  • schema dumpや、migration で、 add\_foreign\_key\_constraint, remove\_foreign\_key_constraint といったメソッドが使えるようになり、外部キーによる依存関係を元にした削除、更新が行えるようになる。

Rails Plugin - その他

投稿者 nanki 2006-04-25 23:26:00 GMT
history
  • セッションに、アクセス履歴を保存。
  • class ApplicationController < ActionController::Base
    history
     # デフォルト
     :default => "http://default.url.com/",
     # 履歴件数
     :max => 10

# actiontoskip アクションは対象外 historyskip :actionto_skip end

# 一個前の履歴を見る peeklastlocation(1)

# redirectで一つ前に戻る redirect_back(1)

# 現在のアクションを履歴に保存 storelocation # historyskipだろうがおかまいなし store_location(true)

inject
url_for_domain
legacy_interop
auto_hash
output_compression
Better Output Compression
google_analytics
json_webservice
numeric_spell
referenced_page_caching
foo_with_install
Flash Fixes

Rails Plugins...

投稿者 nanki 2006-01-14 22:10:00 GMT

ユーザ認証をプラグインを使って作ろうと思ったんだけど、

$ script/plugin list

すると、たくさんでてきてどれが何やらさっぱり。 そこでまとめてみた。

認証系

account_location
acts_as_authenticated
login_engine
user_engine
ssl_requirement
security_extensions
sentry

View系

browser_filters
labeled_form_helper
restifarian
scriptaculous_slider
localization
css_graphs
asset_timestamping
javascript_generator_templates
us_states
wiki_engine
date_slider
head-helper
enhanced-form-tag-helper
liquid
rails_pdf
upload_progress

開発系

continuous_builder
exception_notification
ar_fixtures
engines
refactor
assert_accessible
javascript-packaging
migrate_ext

ActiveRecord 拡張

acts_as_taggable
acts_as_versioned
deadlock_retry
acts_as_paranoid
calculations
guid
where
count_limit_associations

その他

numeric_spell
referenced_page_caching
foo_with_install

宿題

とりあえず、script/plugin list のは無くなった。ふぅ。

参考:

Plugins in Ruby on Rails え、まだこんなにあるの!?

こっちも。 rails2u SVN Nowhere Near SVN

actsasferret

datebox_engine


SwitchTower インストール

投稿者 nanki 2006-01-09 18:21:00 GMT

もう二ヶ月近くほったらかしてたSwitchTowerをインストールしてみた。

$ sudo gem install switchtower
...
$ switchtower --apply-to ../rails_app
      exists  config
      create  config/deploy.rb
      exists  lib/tasks
      create  lib/tasks/switchtower.rake

ふむふむ。

config/deploy.rb に設定がたくさんあって、lib/tasks/switchtower.rake にはrake のタスクの記述がある。

さあ、早速使うぞと思いきや、まだデプロイ先がないんだった・・・


rails generatorsの位置

投稿者 nanki 2005-11-27 07:20:00 GMT

script/generate のヘルプによると、 ”#{RAILS_ROOT}/generators/[a-z]*” でいいらしいけど、ソースコードを追ったら

"#{RAILS_ROOT}/lib/generators/[a-z]*"
"#{RAILS_ROOT}/vendor/plugins/**/generators/[a-z]*"
"~/.rails/generators/[a-z]*"

の三つが対象みたい。


Rails 新機能

投稿者 nanki 2005-11-19 18:46:00 GMT

つい先日、Rails1.0 RC4 がでたので、気になる点を(今回の新機能に限らず)ピックアップしようとおもったけど、数が少ないので随時追加予定。


Rails 勉強会@関西 第0回

投稿者 nanki 2005-11-13 02:18:00 GMT

Rails 勉強会@関西 第0回 に参加してきた。

今回は、babieさんの取り計らいで「ポジションペーパー」方式が導入され、自己紹介がスムーズに。

これはいい。自己紹介だけじゃなくて、十数人くらいの単位で何か議論する際に、固定的なメディアである紙の上に各自のスタンスを述べることで、議論すべきポイントが明確になりそうだ。 今回の勉強会は、Rails 以外にも、こういう点で期待している。

で、自己紹介も終わり、勉強会の方針について決める。→ 議事録

京都の勉強会が存続してよかった。

休憩をはさんで、moriq さんのajax 講座。 observer 以外はちょうど使ったばかりなのでタイムリー。

ストヤンさんが、会社でのサーバ構成、デプロイ環境を発表して勉強会は終わり。

部屋を片付け、懇親会へ。

懇親会では、babieさん、高木さんに挟まれ、向かいにはcuzicさんという恵まれた環境で、rails話で盛り上がったりした。

高木さんは、すでにかなりAWDwR を読み倒している感じで、何か言うと「ああそれは、320ページくらいに書いてあった」といって周りを驚きの渦に。 ピンと言えばポンというテンポのいいレスポンスはこういう集まりならでは。

ページごとにキーワードをメモっておくのはいいな。 是非取り入れたいけど、本に書き込むのは気が引ける。

これ以上書くと日記になってしまうのでこの辺でやめ。


Enterprise Ruby.

投稿者 nanki 2005-11-12 15:47:00 GMT

Rails勉強会@大阪にて。 開発、デプロイ環境の話を、silver egg のストヤンさんがアドリブ講演。

要するに、効率のいい開発環境、デプロイ環境、運用環境、という話。

web サーバとして、lighttpd を動かし、lighttpd の機能でmod_rewrite のreverse proxy みたいにして、裏にいる各サービス単体で動くマシンに繋ぐというやりかた。

などが楽になる。

また、SwitchTower(gem にあり)を使う事で、迅速で柔軟なdeployが可能になっている。

rakeで、deploy,rollback などができるらしい。


agiledox with rails

投稿者 nanki 2005-11-06 17:50:00 GMT

rails のwiki を眺めていたら、こんなページ(TDDinRails)を発見。(見つけるの遅い)

この中で、rails のrake に agiledox 風の機能を追加するという小技が紹介されている。 要は、テストクラスのメソッド名を説明的に書いて(test_should….)、テストを書くと同時にクラスの仕様のリストまで作成してしまおう、というやり方のようだ。

task :agiledox do
  tests = FileList['test/**/*_test.rb']
  tests.each do |file|
    m = %r".*/([^/].*)_test.rb".match(file)
    puts m[1]+" should:\n"
    test_definitions = File::readlines(file).select {|line| line =~ /.*def test.*/}
    test_definitions.each do |definition|
      m = %r"test_(should_)?(.*)".match(definition)
      puts " - "+m[2].gsub(/_/," ")
    end
    puts "\n"
  end
end

の様なコードをRakefile に追加することで、

$ rake agiledox
user_controller should:
 - store user in session on successful login
 - not store user in session on unsuccessful login
...

という使い方ができるようになる。 テストに失敗しても、メソッド名から何がどう失敗しているかがわかりやすいし、TODO 管理の様にも使える。

なるほど、これならテスト駆動開発が楽しいものになりそうだ、と心の中でわくわくした。

さらに、ruby ではメソッド名に日本語が使えるので、

def test_ログインに成功したらsessionにuserが保存される。
...
end

ともできる。

これは良さそうということで、早速後輩に勧めたら、テストコードが書きたくてしょうがなくなったようだ。 テスト駆動開発定着までの近道として参考になる。

参考