• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

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

簡単にカレンダーを表示できるcalendar_helperプラグインは大変便利ですが、これをインストールすると'CalendarHelper'という名前がRuby on Railsに予約されてしまうのをご存知でしょうか。

これはつまり、CalendarControllerを作るのが難しくなるということです。もしCalendarControllerの雛形をscript/generateコマンドで作成しようとしても、以下のようなメッセージが出力されて拒まれます。

The name 'CalendarHelper' is reserved by Ruby on Rails

この問題を回避してCalendarControllerを作成する方法を紹介します。そのためには、次のような手順を踏みます。

  1. calendar_helper plugin. をインストール
  2. mv vendor/plugins/calendar_helper other_place
  3. ./script/generate controller calendar
  4. mv other_place/calendar_helper vendor/plugins
  5. vendor/plugins/calendar_helper/init.rbを編集

こんな感じに

require File.join(File.dirname(__FILE__), 'lib/calendar_helper')

[English]

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

posted by Png genki on Fri 26 Jan 2007 at 07:12

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

今年最初のRails勉強会に参加してきました。 今回は、井上さん、もろはしさんが体調不良ということでお休みだったのをはじめ、 急遽参加できなくなった方が多かった模様です。

参加したセッションは、前半が「ARとテーブル設計」、後半が「TDDB」でした。

■前半「ARとテーブル設計」

ARといえばmaihaさん、maihaさんといえばAR。最近ブログでなんだか面白そうなことを書いているなあと思ってたのですが、それでした。

内容はかなりマニアック。ウィトゲンシュタインの論理哲学論考からT字型の話、存在論の話へと展開。いやあ、面白かった。

■後半「TDDB」

僕がオーナーをやりました。もともとTDDの実演という感じだったんですが、 すぐに終わってしまいそうだったので、前半セッションの続きでDBの話もやろうということで、 TDD + DBなセッションでした。

TDDについては、railsコマンドでサンプルアプリを作り、zsh/screen/vimで開発。 お馴染みのredgreen+autotestでライブコーディングしました。

続いて前半セッションの続きでARとDB設計の話。 カラム不要論、CRUDのUD不要論、DBの負荷分散、YamazさんによるPostgressの2層コミットの話、などなど、非常に面白い内容でした。

最後は、script/renameの設計を10分ぐらいでやろうといろいろ知恵を出し合ってみたのですが、 実際なかなか難しいことが判明。evalできる言語は難しい。

■懇親会

今回は会場の予約が無かったので、ロデオでおなじみのZESTに行きました。 ogijunさんが恒例のあとで来るメソッドで合流し、高橋さん、大森さんたちとRubyの将来について話したりしていました。非常に濃い話ができて楽しかったです。

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

posted by Png genki on Mon 22 Jan 2007 at 09:26
20th Sat

rake svn:commit

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

馬場さんが書いてるやつをちょっと修正したもの。

   1  desc 'Commit to the repository safely.'
   2  task :commit => [
   3    :up,
   4    :'db:migrate',
   5    :test,
   6    :'test:plugins',
   7  ] do
   8    if msg = ENV['M']
   9      msg.gsub!(/\"/, '\"')
  10      system %Q{svn ci #{RAILS_ROOT} -m "#{msg}"}
  11    else
  12      system "svn ci #{RAILS_ROOT}"
  13    end
  14  end
  15  
  16  desc 'Update working copy.'
  17  task :up do
  18    system "svn up #{RAILS_ROOT}"
  19  end
テストが成功したときだけコミットします。結構便利ですよ。

[English Version]

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

posted by Png genki on Sat 20 Jan 2007 at 22:04

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

redgreenは、テスト結果の出力をカラフルにしてくれるRubyGemsです。 (詳しくはRailsのテストでRed Green Yellow参照。)

とてもテストを書くのが楽しくなって便利なので、 Railsプラグインのテスト結果に対しても、色づけをするプラグインを作ってみました。

http://svn.labs.drecom.jp/rails/plugins/trunk/redgreen_plugin_testing/
redgreenを導入後、このプラグインをインストールするだけで、
$ rake test:plugins
の結果が色づけされます(Rails-1.2RC)。

[English Version]

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

posted by Png genki on Fri 19 Jan 2007 at 16:14

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

Railsでは、config/routes.rbファイルでURIとコントローラ&アクションのマッピングを行いますが、URIを分解してセグメントに分けるためのセパレータは、デフォルトでは次の文字になっています(Rails-1.2RC1)

ActionController::Routing::SEPARATORS
=> ["/", ";", ".", ",", "?"]
セパレータとなる文字を追加するためには、config/environment.rbの中で、ActionController::Routing::SEPARATORSに要素を追加すればOKです。
ActionController::Routing::SEPARATORS << '@'
これでconfig/routes.rbのなかで'@'をセパレータとして使用することができます。

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

posted by Png genki on Tue 16 Jan 2007 at 15:26

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

最近まで知らなかったRubyの豆知識。

:'a*!//bc'.class => Symbol

文字列リテラルの頭にコロンを書けば、どんな文字列でもシンボルになります。

最近のRailsでは、名前空間の無いRakeタスクがDeprecatedになったので、Rakeタスクの依存関係を指定するときに、

task :foo => [:'bar:baz'] do ...

のように書けて便利かも。

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

posted by Png genki on Thu 11 Jan 2007 at 23:09

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

たいしたものじゃないですが、dJavaScriptの実装をRailsプラグインとして作ってみました。

http://svn.labs.drecom.jp/rails/plugins/trunk/djavascript

サーバ側でやることは、プラグインをインストールし、json.js, djavascript.jsをjavascript_include_tagして、コントローラの中で

djavascript :object_name

のように公開するオブジェクトを登録します。
実際には、session[:object_name]が公開されます。

あとは、クライアントサイドから以下のような感じで使います。

var obj = new DJSObject('http://foo.bar.com/controller_name/djavascript');
alert(obj.methods());

new DJSObject( ... ) の呼び出しでリモートオブジェクトのpublicメソッド一覧を取得して、プロクシメソッドをobjに定義します。

obj.methods() で、リモートオブジェクトの 'methods'メソッドを呼び出し、戻り値をto_jsonして返します。

通信にXHRを使っているので、同一ドメイン内でしか使えません。
scriptタグをappendChlidする方式にすればドメイン境界を越えられますが、戻り値をreturnできないのがかっこ悪かったので、XHRにしてます。

もうちょっとちゃんと作れば、RESTとかXML-RPCに代わるAPIの一種として使えないこともないかも。

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

posted by Png genki on Thu 11 Jan 2007 at 21:52
9th Tue

dJavaScript

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

dRubyのJavaScript版は既にあるのかな。まだないなら作ってみたい。

var obj = new DJSObject('djavascript://foo.bar.com:1234');
obj.foo();

とはいっても、dRubyと同じものを全部JavaScriptで実装するわけじゃなくて、dRubyサーバと通信できるJavaScriptで実装されたクライアントを作ろうという事ですね。Cometを使えば双方向通信できそうだけど、最初はクライアント側からリモートオブジェクトのメソッドを呼び出すだけのものが良いかな。

プロクシであるDJSObjectのほかに、dRubyサーバ側のスタブも実装しないといけないな。

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

posted by Png genki on Tue 9 Jan 2007 at 10:16