refeのgemを作成してみました。

gemの勉強をかねて、refe-0.8.0のgemを作成してみました。
ゆくゆくはRubyForgeにアップロードしてみたいと思っています。と、それには青木さんの許可を得ないと…

以下はobsoleteです。id:ha-tan:20051020:1129759786を参照ください。

とりあえずgemの作成に必要なpatchを以下に添付します。
ファイル: refe-0.8.0_gem.patch

diff -ruN refe-0.8.0.orig/lib/refe/config.rb refe-0.8.0/lib/refe/config.rb
--- refe-0.8.0.orig/lib/refe/config.rb	1970-01-01 09:00:00.000000000 +0900
+++ refe-0.8.0/lib/refe/config.rb	2005-10-20 06:08:15.000000000 +0900
@@ -0,0 +1,24 @@
+require 'refe/info'
+
+module ReFe
+
+  refepaths = []
+  Gem.path.each do |gempath|
+    specpath = "#{gempath}/specifications/*.gemspec"
+    paths = Dir.glob(specpath).collect do |specfile|
+      spec = eval(File.read(specfile))
+      if spec.name == 'refe' and spec.version.to_s == Version
+        "#{gempath}/gems/#{spec.full_name}/data/refe"
+      else
+        nil
+      end
+    end.compact
+    refepaths.concat paths
+  end
+
+  if refepaths.size > 0
+    REFE_DATA_DIR = refepaths[0]
+  else
+    REFE_DATA_DIR = '/usr/local/share/refe'
+  end
+end
diff -ruN refe-0.8.0.orig/misc/gem.sh refe-0.8.0/misc/gem.sh
--- refe-0.8.0.orig/misc/gem.sh	1970-01-01 09:00:00.000000000 +0900
+++ refe-0.8.0/misc/gem.sh	2005-10-20 06:11:26.000000000 +0900
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+version=0.8.0
+
+gem build refe.gemspec \
+    && sudo gem uninstall -x refe \
+    && sudo gem install -t refe-$version.gem
diff -ruN refe-0.8.0.orig/refe.gemspec refe-0.8.0/refe.gemspec
--- refe-0.8.0.orig/refe.gemspec	1970-01-01 09:00:00.000000000 +0900
+++ refe-0.8.0/refe.gemspec	2005-10-20 06:10:37.000000000 +0900
@@ -0,0 +1,26 @@
+# -*- ruby -*-
+
+Gem::Specification.new do |spec|
+  spec.name = 'refe'
+  spec.version = '0.8.0'
+  spec.summary = 'Yet another ruby reference manual browser.'
+  spec.authors = ['Minero Aoki', 'TANAKA Shin-ya']
+  spec.email = ['zstanaka@archer.livedoor.com']
+  spec.homepage = 'http://i.loveruby.net/ja/prog/refe.html'
+
+  spec.executable = 'refe'
+
+  files = Dir.glob('{bin,data,lib,misc,test}/**/*')
+  files.push 'COPYING'
+  files.push 'ChangeLog'
+  files.push 'NEWS'
+  files.push 'README.en'
+  files.push 'README.ja'
+  files.push 'TODO'
+  files.push 'test.rb'
+  files.delete('misc/dist.sh')
+  spec.files = files
+
+  spec.test_file = 'test.rb'
+end
+
diff -ruN refe-0.8.0.orig/test.rb refe-0.8.0/test.rb
--- refe-0.8.0.orig/test.rb	2003-10-17 22:24:32.000000000 +0900
+++ refe-0.8.0/test.rb	2005-10-20 05:10:54.000000000 +0900
@@ -15,7 +15,13 @@
   unless /Test::Unit/ === RUNIT::CUI::TestRunner.superclass.name
     RUNIT::CUI::TestRunner.quiet_mode = true
   end
-  RUNIT::CUI::TestRunner.new.run load_test_suite(ARGV)
+  if ARGV.include?('-t') or ARGV.include?('--test')
+    # running under gem.
+    RUNIT::CUI::TestRunner.new.run load_test_suite([])
+  else
+    # normal command line.
+    RUNIT::CUI::TestRunner.new.run load_test_suite(ARGV)
+  end
 end
 
 

gem作成手順は次の通りです。

$ wget http://i.loveruby.net/archive/refe/refe-0.8.0-withdocsrc.tar.gz
$ tar zxvf refe-0.8.0-withdocsrc.tar.gz
$ cd refe-0.8.0                         
$ patch -p1 < /path/to/refe-0.8.0_gem.patch
$ gem build refe.gemspec
$ sudo gem install refe-0.8.0.gem

僕は、Rubyでマニュアルを読むのにrefeを愛用しています。補完機能が大変よくできていて、クラス名とかメソッド名を全部入力しなくてもよいところが気に入っています。それから日本語のマニュアルというのもポイント高いです(riは英語)。