[#15841] abstract method — Tanaka Akira <akr@...17n.org>
最近、abstract method が欲しくなり、次のようなものを書きました。
[#15846] Ruby M17N request — "K.Kosako" <kosako@...>
今書いているライブラリを、あらかじめRuby M17Nに対応させておこうとして、
まつもと ゆきひろです
Yukihiro Matsumotoさんの<1012831868.125952.28017.nullmailer@ev.netlab.jp>から
<20020205045749.0AAA015B@helium.ruby-lang.org>から
At Mon, 25 Feb 2002 19:57:05 +0900,
At Mon, 25 Feb 2002 21:00:46 +0900,
まつもと ゆきひろです
まつもと ゆきひろです
Yukihiro Matsumotoさんの<1014656883.878972.23459.nullmailer@ev.netlab.jp>から
At Mon, 25 Feb 2002 19:57:05 +0900,
At Sun, 3 Mar 2002 07:15:40 +0900,
まつもと ゆきひろです
Yukihiro Matsumotoさんの<1015574625.778743.29060.nullmailer@ev.netlab.jp>から
まつもと ゆきひろです
なかだです。
nobu.nakada@nifty.ne.jpさんの
なかだです。
nobu.nakada@nifty.ne.jpさんの
なかだです。
なかだです。
nobu.nakada@nifty.ne.jpさんの
あおきです。
なかだです。
[#15855] Re: [ruby-cvs] ruby: * io.c (fptr_finalize): should raise error when fclose fails. — nobu.nakada@...
なかだです。
[#15861] syscall — nobu.nakada@...
なかだです。
西山和広です。
なかだです。
In article <200202091509.g19F9mO16072@sharui.nakada.kanuma.tochigi.jp>,
まつもと ゆきひろです
なかだです。
[#15867] [BUG?] include after module definition and extend module — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
In article <1014021831.527593.5892.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
In article <1014100898.366150.14204.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
In article <1014126659.698034.15364.nullmailer@ev.netlab.jp>,
[#15903] -L option in extmk.rb — nobu.nakada@...
なかだです。
[#15914] making net/*.rb grok URI — "Akinori MUSHA" <knu@...>
net/*.rb モジュール群をぜひとも標準添付となった URI クラスに
At Mon, 18 Feb 2002 04:33:42 +0900,
あおきです。
At Mon, 18 Feb 2002 15:24:22 +0900,
あおきです。
高橋征義です。
In article <200202190432.NAA18796@mx.inac.co.jp>,
高橋征義です。
In article <20020221020159R.maki@rubycolor.org>,
なかだです。
In article <200202202350.g1KNoc731179@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
In article <200202210553.g1L5rk713061@sharui.nakada.kanuma.tochigi.jp>,
まつもと ゆきひろです
In article <1014277711.428770.25909.nullmailer@ev.netlab.jp>,
[#15918] win32 方面 — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#15988] Re: [rubyist:1097] Re: % 記法 — nobu.nakada@...
なかだです。
なかだです。
西山和広です。
まつもと ゆきひろです
なかだです。
[#15994] subdir in mkmf.rb — nobu.nakada@...
なかだです。
[#16040] Digest::MD5 SEGV (ruby_1_6) — m_seki@...
[#16049] defined? autoload constant — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
なかだです。
けいじゅ@日本ラショナルソフトウェアです.
なかだです。
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
[#16050] ParseDate.to_time — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#16059] New Struct — Shin-ichiro HARA <sinara@...>
原です。
[#16068] UNIXSocket#{send_io,recv_io} — Tanaka Akira <akr@...17n.org>
しばらく前にふと気が向いて UNIXSocket#{send_io,recv_io} というものをでっ
まつもと ゆきひろです
In article <1014700933.711454.28068.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
[#16082] Array#select without block — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
新井です。
まつもと ゆきひろです
[#16102] No trace_func event at if-elsif-else line — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。どうせ一年も先の話なのでのんびりと。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
[#16112] ruby 1.6.7 preview 1 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#16126] patch for gdbm, dbm and sdbm — Koji Arai <JCA02266@...>
新井です。
[#16134] Defining (Python) Source Code Encoding — TAKAHASHI Masayoshi <maki@...>
高橋征義です。ruby-list の「localized document」ともやや関係あり?
新井です。
なかだです。
[#16138] Hash implementation — MORITA Naoyuki <naohaq@...>
はじめまして、森田と申すものです。
[#16145] ruby 1.6.7 (2002-02-27)/marshal data too short (ArgumentError) — m_seki@...
[ruby-dev:16015] Re: making net/*.rb grok URI
In article <200202202350.g1KNoc731179@sharui.nakada.kanuma.tochigi.jp>,
nobu.nakada@nifty.ne.jp writes:
> URI.openでは。
そりゃそうですね。そうしましょう。
でも、Kernel#open の修正にも惹かれるものがあります。open-uri.rb とか別
のファイルがいいのかな。
というわけで適当に作ってみました。
# 難しいところは実装してませんが。
URI.open("http://www.ruby-lang.org/en/index.html") {|f|
f.each_line {|line| p line}
p f.content_type
p f.content_encoding
p f.last_modified
}
というように使えます。
uri/open.rb というように新しいファイルを作るか、あるいは
uri/generic.rb, uri/http.rb, uri/ftp.rb あたりに分けるか、どっちがいい
かはよくわかりません。あと、つい StringIO を使ってしまったので、当然
StringIO が本体に入るまでは本体には入れられません。StringIO を使うとこ
ろを外すということはできますが。rough の uri に入れるかどうかは... や
まださんの意見を聞きたいところです。
少し使って思ったのですが、StringIO と IO で共通に使える size/length と
いうメソッドが欲しいです。中身はそれぞれ self.string.size と
self.stat.size でいいんですが、今は polymorphic に使えるものがありませ
ん。
あと、IO#truncate (とむろん StringIO#truncate)がないことにも気がつきま
した。ftruncate は SUSv2 にもありますから、あってもいいんじゃないかと
思います。これがないとバッファを切り詰められません。
require 'uri'
require 'stringio'
require 'tempfile'
module URI
def URI.open(uri, *rest, &block)
uri = URI.parse(uri) if String === uri
uri.open(*rest, &block)
end
def URI.find_proxy(uri)
name = uri.scheme + '_proxy'
if proxy_uri = ENV[name] || ENV[name.upcase]
proxy_uri = URI.parse(proxy_uri)
name = 'no_proxy'
if no_proxy = ENV[name] || ENV[name.upcase]
no_proxy.scan(/([^:,]*)(?::(\d+))?/) {|host, port|
if /(\A|\.)#{Regexp.quote host}\z/i =~ proxy_uri.host &&
(!port || uri.port == port.to_i)
proxy_uri = nil
break
end
}
end
proxy_uri
else
nil
end
end
class HTTP
def open(&block)
Buf.open(lambda {|buf|
require 'net/http'
if proxy_uri = URI.find_proxy(self)
klass = Net::HTTP.Proxy(proxy_uri.host, proxy_uri.port)
else
klass = Net::HTTP
end
resp = nil
klass.start(self.host, self.port) {|http|
header = {}
resp, = http.get(self.request_uri, header, buf)
}
# If Redirection 3xx ...
# If 401 Unauthorized ...
unless resp.code == '200'
raise StandardError.new("HTTP fetch failed")
end
buf.stream.extend HTTPInfo
buf.stream.init_httpinfo(resp)
},
&block)
end
end
class FTP
def open(&block)
Buf.open(lambda {|buf|
if proxy_uri = URI.find_proxy(uri)
require 'net/http'
resp = nil
Net::HTTP.start(proxy_uri.host, proxy_uri.port) {|http|
resp, = http.get(uri.to_s, nil, buf)
}
buf.stream.extend HTTPInfo
buf.stream.init_httpinfo(resp)
else
require 'net/ftp'
# xxx: extract user/passwd from .netrc.
user = 'anonymous'
passwd = nil
if uri.userinfo
user, passwd = uri.userinfo.split(/:/)
end
ftp = Net::FTP.open(uri.host)
ftp.login(user, passwd)
ftp.getbinaryfile(uri.path, '/dev/null', Net::FTP::DEFAULT_BLOCKSIZE,
lambda {|data| buf << data})
ftp.close
end
},
&block)
end
end
module HTTPInfo
def init_httpinfo(resp)
@http_resp = resp
end
attr_reader :http_resp
def content_type
@http_resp['content-type']
end
def content_encoding
@http_resp['content-encoding']
end
def last_modified
if @http_resp.key? 'last-modified'
require 'time'
Time.httpdate(@http_resp['last-modified'])
else
nil
end
end
end
class Buf
def Buf.open(init_contents=nil)
buf = Buf.new
if init_contents
init_contents.call buf
buf.stream.rewind
end
stream = buf.stream
if block_given?
begin
yield stream
ensure
stream.close
end
else
stream
end
end
def initialize(basename='ruby-uri', size_limit=10240)
@basename = basename
@size_limit = size_limit
@stream = StringIO.new('', 'w+')
@size = 0
end
attr_reader :stream
def <<(data)
@size += data.length
if @size_limit < @size && StringIO === @stream
f = Tempfile.new(@basename)
f << @stream.string
@stream = f
end
@stream << data
end
end
end
module Kernel
alias uri_original_open open
def open(name, *rest, &block)
if %r{\A(http|ftp)://} =~ name
URI.open(name, *rest, &block)
else
uri_original_open(name, *rest, &block)
end
end
end
--
[田中 哲][たなか あきら][Tanaka Akira]
「ふえろ! わかめちゃん作戦です$(C⊇」(Little Worker, 桂遊生丸)