[ruby-list:43631] クラス名の衝突

From: Kentaro KAWAMOTO <kentaro.kawamoto@...>
Date: 2007-06-19 09:42:06 UTC
List: ruby-list #43631
川本と申します。


Rails を使ったウェブアプリの中で、
ruby-htmltools (http://bike-nomad.com/ruby/) を使っています。

そうすると、assert_tag を使ったテストに失敗するようになりました。
----------------------------------------------------------------
ArgumentError: wrong number of arguments (6 for 2)
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/assertions/../vendor/html-scanner/html/node.rb:199:in `initialize'
----------------------------------------------------------------

この原因は、
HTML::Tag というクラスが、
actionpack と ruby-htmltools の両方で定義されており、
initialize の引数の数が異なるからなのですが、
このような場合、どういう対処方法がありますでしょうか?

わたしが考え付くのは、
「書き換え易い方 (例えば ruby-htmltools) を書き換えて、
HTML2::Tag というクラス名に変更する。」
というものですが、かなり手間がかかります。


以前に、[ruby-list:41596] で、
module 名の衝突について質問させていただき、
[ruby-list:41600]で
「module 名を変更する」という方法を教えていただきました。

しかし今回は、ruby-htmltools がそこそこ複雑なライブラリで、
その中で HTML::Tag を参照している箇所があるので、
モジュール名のみ変更すると、ruby-htmltools 自体が
動かなくなってしまうと思います。


Ruby, Perl などでは、ライブラリに HTML::Tag というような
名前をつけることは一般的なようで、
衝突する可能性は高いと思うのですが、
みなさんがどのように回避しているのか
教えていただければ幸いです。


よろしくお願いします。

---
Kentaro KAWAMOTO
mailto:kentaro.kawamoto@gmail.com

In This Thread

Prev Next