rubyのクラス同士の継承関係を比較する演算子についてのメモ。

   1  >> class Foo;end
   2  >> class Bar<Foo;end
   3  >> class Baz<Foo;end
   4  >> [Foo < Bar, Bar < Foo, Foo > Bar, Bar > Foo]
   5  => [false, true, true, false]
   6  >> Foo <=> Bar
   7  => 1
   8  >> Foo <=> String
   9  => nil
  10  >> Bar <=> Foo
  11  => -1
  12  >> Bar <=> Baz
  13  => nil

また、以下のようにモジュールのinclude関係も取得出来ます。

   1  >> module Goo;end
   2  >> class Foo;include Goo end
   3  >> Foo < Goo
   4  => true
   5  >> Foo > Goo
   6  => false
   7  >> Goo < Foo
   8  => false
   9  >> Goo > Foo
  10  => true

posted by Png genki on Sun 25 Jan 2009 at 20:47

Rubyで、クラスの内部から基底クラスのメソッドを呼び出す場合は、 superを使えば良いのですが、 どうしても外部から基底クラスのメソッドを呼び出したい場合には、 以下のようにすれば実現出来ます。

   1  >> class Foo; def foo; puts "foo#{self}"; end end
   2  => nil
   3  >> class Bar < Foo; def foo; puts "bar#{self}"; end end
   4  => nil
   5  >> Bar.new.foo
   6  bar#<Bar:0x25c2d60>

このように、通常は基底クラスのメソッドを直接呼び出す事は出来ませんが、

   1  >> Foo.instance_method(:foo).bind(Bar.new).call
   2  foo#<Bar:0x25b7f00>

一度UnboundMethodにしてから、もう一度バインドする事で、 基底クラスのメソッドを呼び出す事が出来ます。

posted by Png genki on Sun 25 Jan 2009 at 06:43

LaTeXでenumerateを使うとき、デフォルトだと項目間の行間が結構広くて, 文章を書くときにちょっとブサイクになってしまいます。

(論文なんかを書いているとき、特にそう思います。僕だけ・・・??)

そんなときは、 \setlength{\itemep}{Xcm} を使えば、行間を調整できます。

   1  \begin{enumerate}
   2      \setlength{\itemsep}{0cm} % この場合、行間が0cm
   3      \item 1番目の項目
   4      \item 2番目の項目
   5     6     7     8  \end{enumerate}

posted by Png y_tsuda on Sat 24 Jan 2009 at 05:13

Merbを使ってWebアプリケーションを開発している or しようと考えている方の為に、 お勧めのプラグイン/Slice情報を共有するサービス Merbist Plugins をテスト公開いたします。

ss

デザインもScaffoldに毛が生えた程度で、 この手のサービスには欠かせないRatingなどの基本機能が無い状態なのですが、 そもそもMerbのプラグイン情報を共有する場所が無いので、 無いよりはちょっとましかなという事で公開しておきます。

merb_rating, dm-has-rating のようなプラグインを見つけたら、 あるいは作ったら、Rating出来るようになると思います。

ちなみに、新着プラグインのFeedも配信しています。

よろしくお願いします。

posted by Png genki on Sat 24 Jan 2009 at 02:50

I released the merb_full_url plugin that provides URL which has origin (scheme, host and port)

You can install this gem like this;

   1  % sudo gem install merb_full_url --source http://merbi.st

And you get full URLs by calling full_url/full_resource methods instead of url/resource.

But I think, it is better for merb to become providing such methods in advance :-)

posted by Png takiuchi on Sat 24 Jan 2009 at 02:30

下記のページを参考にしました:
http://wiki.github.com/aslakhellesoy/cucumber/step-organisation

モデル(テーブル)毎にstepsを作成する

原則はそれでいく、ただし認証などは別stepsとして作ったほうがベター:

  • employee_steps.rb
  • education_steps.rb
  • experience_steps.rb
  • authentication_steps.rb:認証用

all_steps.rbという巨大なファイルを作ることもできます。エレガントではないですけどね。

モデルstepsには必ずGiven-When-Then stepを作る

モデルをカバーするようなstepsファイルでは、下記のCRUDをカバーするようなGiven-When-Then stepを書くことと。

  • 作成
  • 表示
  • 更新
  • 削除

各stepsでは@variablesを作成して、オブジェクトの状態を保持できる

コントローラで取得する@userを下記のようなstepで記述できます:

   1  Give /^"(.*)"ユーザでログイン$/ do |login|
   2    @user = User.find_by_login(login)
   3  end
(注) 各stepで依存しあうことになり、再利用性が難しくなります
(注) 実際のログインシナリオはまた別にちゃんと記述する必要があります!

posted by Png satoko on Fri 23 Jan 2009 at 15:41

本日(2009年1月23日)の10:20〜10:40の間、 弊社が提供しているウェブサービスに接続しにくくなるトラブルが発生いたしました。

原因としては、利用している外部サービスが一時的に停止した事を検出する処理に問題があり、連鎖的に影響を受けてしまった可能性が高いと思われます。 現在は当該箇所を修正の上、復旧いたしております。

ご不便をおかけいたしました事をお詫びいたします。

posted by Png genki on Fri 23 Jan 2009 at 11:02

githubの仕様変更 により、githubでEdgeGem (EdgeのコードをGemにまとめたもの) を常にフレッシュな状態で公開する事が難しくなってしまったので、 Merbist向けにプラグイン配布用のGemサーバを用意しました。

gems.rubyforge.orgやgems.github.comなどの通常のGemサーバと同様に、以下のようにsourcesに登録して使う事ができます。

   1  % sudo gem sources -a http://merbi.st

仕組みとしては、http://merbi.st/fetch にアクセスされると、 登録されているgithub上のリポジトリから、Edgeのコードがpullされ、 GemとGemサーバ用のインデックスデータを作成します。

現時点では、以下のGemを公開しています。

   1  % gem list -r -s http://merbi.st
   2  
   3  *** REMOTE GEMS ***
   4  
   5  dm-has-versions (0.1.1)
   6  dm-pagination (0.1.1)
   7  merb_babel (0.1.2.2)
   8  merb_component (0.1.1)
   9  merb_recognize_path (0.0.2)
  10  merb_slice-gen (0.0.2)
  11  merb_timezone_select (0.0.2)
  12  pagination_scope (0.0.8)
  13  rttool (1.0.2)

サーバの負荷の面で不安があるので、 現時点では同期するリポジトリの登録は管理者のみに制限していますが、 http://merbi.st/plugins よりプラグイン情報を登録していただければ(要アカウント作成)、 問題が無い限り定期的に確認して同期リストに追加いたします。

反応がない場合は@takiuchi までご一報ください。

posted by Png genki on Fri 23 Jan 2009 at 05:16

最近書いたNested Resourceに関する話題をまとめておきます。

外部サイトからのリンクバックもまとめ記事作成のための検索対象に含めたら、もっと便利になるかな。

posted by Png genki on Fri 23 Jan 2009 at 04:55

config/dependency.rbの形式が変わったようなので、メモです。

   1  # dependencies are generated using a strict version, don't forget to edit the dependency versions when upgrading.
   2  merb_gems_version = "1.0.8.1"
   3  dm_gems_version   = "0.9.9"
   4  do_gems_version   = "0.9.10.1"
   5  
   6  # For more information about each component, please read http://wiki.merbivore.com/faqs/merb_components
   7  dependency "merb-core", merb_gems_version
   8  dependency "merb-action-args", merb_gems_version
   9  dependency "merb-assets", merb_gems_version
  10  dependency("merb-cache", merb_gems_version) do
  11    Merb::Cache.setup do
  12      register(Merb::Cache::FileStore)
  13    end
  14  end
  15  dependency "merb-helpers", merb_gems_version
  16  dependency "merb-mailer", merb_gems_version
  17  dependency "merb-slices", merb_gems_version
  18  dependency "merb-auth-core", merb_gems_version
  19  dependency "merb-auth-more", merb_gems_version
  20  dependency "merb-auth-slice-password", merb_gems_version
  21  dependency "merb-param-protection", merb_gems_version
  22  dependency "merb-exceptions", merb_gems_version
  23  
  24  dependency "data_objects", do_gems_version
  25  dependency "do_sqlite3", do_gems_version # If using another database, replace this
  26  dependency "dm-core", dm_gems_version
  27  dependency "dm-aggregates", dm_gems_version
  28  dependency "dm-migrations", dm_gems_version
  29  dependency "dm-timestamps", dm_gems_version
  30  dependency "dm-types", dm_gems_version
  31  dependency "dm-validations", dm_gems_version
  32  dependency "dm-serializer", dm_gems_version
  33  
  34  dependency "merb_datamapper", merb_gems_version

merb_gems_version、 dm_gems_version、 do_gems_version の三つの系列のバージョンに分かれたのですね。

posted by Png genki on Thu 22 Jan 2009 at 19:13