gem-searchというgemを作ってみました

gemを探す際の基準として、RubyGems.org のダウンロード数を見たりするので、
RubyGems.org API を使ってgemを作成してみました。

使い方

一応、rochefort/gem-search に記載しています。
検索時にダウンロード数を表示 + オプションでソート な感じです。

$ gem-search exif -s v
NAME                                                DL(ver)   DL(all)
-------------------------------------------------- -------- ---------
mini_exiftool (1.6.0)                                  5264    183250
exifr (1.1.3)                                          2930     74929
extexif (1.0.1)                                        1014      1751
exiftoolr (0.0.7)                                       432      1265
multi_exiftool (0.2.0)                                  186      3065
gpx2exif (0.1.0)                                         67      1167

学んだこと

標準出力のテストの書き方

2010-03-24 - pochi’s weblog
こちらを参考にしたのですが、wycats先輩が書いたとか。
(ちらっと探してみたけど、元のソースは分かんなかったです。)

なるほどという感じですが、一時的にStringIOにすげ替えています。

# http://d.hatena.ne.jp/POCHI_BLACK/20100324
# this method is written by wycats
def capture(stream)
  begin
    stream = stream.to_s
    eval "$#{stream} = StringIO.new"
    yield
    result = eval("$#{stream}").string
  ensure
    eval("$#{stream} = #{stream.upcase}")
  end

  result
end

余談

gemの名前の長さって最大でどれくらいあるのか調べてみると

# rubygemsのみ
gem list -r | awk '{print length($1), $1}' | sort -rn | head
56 selenium-webdriver-rails-support-via-monkeypatch.gemspec
50 ActionMailer-Base-to-use-an-absolute-path-template
48 selenium-webdriver-rails-support-via-monkeypatch
48 mattscilipoti-capistrano_rsync_with_remote_cache
47 unclebilly-activerecord-oracle_enhanced-adapter
47 althor880-activerecord-activesalesforce-adapter
46 silent-e-activerecord-activesalesforce-adapter
45 georgedrummond-active_paypal_adaptive_payment
45 ctreatma-activerecord-oracle_enhanced-adapter
44 jramos-activerecord-activesalesforce-adapter


# gems.github.com 込み
$ awk '{print length($1), $1}' gemlist.txt | sort -rn | head
62 saberma-saberma-activerecord-oracle_enhanced-adapter-nvarchar2
56 selenium-webdriver-rails-support-via-monkeypatch.gemspec
54 saberma-activerecord-oracle_enhanced-adapter-nvarchar2
53 WatersOfOblivion-activeresourceinstanceauthentication
50 herestomwiththeweather-oscurrency-ruby-api-wrapper
50 ActionMailer-Base-to-use-an-absolute-path-template
49 oldmoe-activerecord-neverblock-postgresql-adapter
48 sportgenic-activerecord-activesalesforce-adapter
48 selenium-webdriver-rails-support-via-monkeypatch
48 mattscilipoti-capistrano_rsync_with_remote_cache

なっげー、バカだなぁ。
バージョン込みで50文字ぐらいでいけるかと思いましたがダメでした。