るびきちです。

gzip圧縮を自動判別して読み込んでくれる File.zread メソッドがあると嬉しいです。
magicで判別しています。また、open-uriと併用できます。

たとえばopen-uriでURIを開いたときに、
Content-Encoding: gzip
だった場合も含めて透過的に「内容」を読み込めます。

どうでしょうか?

require 'zlib'
require 'open-uri'

Zlib::GZIP_MAGIC = "\037\213"
def File.zread(file)
  Object.module_eval do
    open(file) do |f|
      magic = f.read(2)
      if magic == Zlib::GZIP_MAGIC
        f.rewind
        gz = Zlib::GzipReader.new(f)
        begin
          gz.read
        ensure
          gz.close
        end
      else
        magic + f.read
      end
    end
  end    
end


require 'test/unit'
class TestZread < Test::Unit::TestCase
  def make_file(filename, content)
    begin
      open(filename, "w"){|f| f.write(content)}
      yield
    ensure
      File.unlink filename
    end
  end

  def make_zfile(filename, content)
    begin
      Zlib::GzipWriter::open(filename){|f| f.write(content)}
      yield
    ensure
      File.unlink filename
    end
  end


  

  def test_normal_file
    make_file("a.file", "normal"){
      assert_equal "normal", File.zread("a.file")
    }
  end

  def test_gzip_file
    make_zfile("a.gz", "gzipped"){
      assert_equal "gzipped", File.zread("a.gz")
    }
  end

  def test_gzipped_html
    make_zfile("a.html", "<html>gzipped</html>"){
      assert_equal "<html>gzipped</html>", File.zread("a.html")
    }
  end

  def test_uri_normal
    assert_equal '<?xml version="1.0" encoding="iso-2022-jp" ?>',
    File.zread("http://www.rubyist.net/~rubikitch/").split(/\n/)[0]
  end

  def test_uri_gzipped
    assert_equal '<HTML>', File.zread("http://2ch.net/")[0,6]
  end

end

--
rubikitch
http://www.rubyist.net/~rubikitch/