たけ(tk)です

[ruby-ext:02244] Re: vfs.rb & Windows path にて
Tanaka Akira <akr / m17n.org> さん曰く:

> 私は、open-uri.rb で実装してある、「Kernel#open は 引数が open に反応
> できるならそれを呼ぶ」という機構が良いと思っています。

uriって普通は文字列ではないのかな?

> > * Linuxのデスクトップの「ネットワークサーバ」(Nautilus)でSambaのサー
> > バにアクセスすると「smb://server」という形式のpathになります。これにも、
> > 対応してくれるとありがたいです。
> >
> > * ssh でアクセス可能なサーバのファイルは開けないかな?
> 
> というようなことがしたければ、それぞれのファイルを指し示すオブジェクト
> を作り、open という(public な)メソッドを実装してください。そのオブジェ
> クトを Kernel#open に渡せばその open が呼ばれます。

具体的には、どうやるのでしょう?

試しに、
"file://server/share_name/dir/neme.ext"
形式のために
  @@schemes['FILE'] = ::File
としてみたが、見事に失敗しました。(言われたことと違うことをやっている)

----
require "open-uri"

module URI
  @@schemes['FILE'] = ::File
end

path =  "file://edicube-01/public/apollo/2.rb"

open(path) {|f|
   f.each_line {|line| p line}
 }
##"file://edicube-01/public/apollo/2.rb"
##No such file or directory - file://edicube-01/public/apollo/2.rb (Errno::ENOENT)
##  C:/Program Files/Apollo/lib/ruby/1.8/open-uri.rb:78:in `initialize'
##  C:/Program Files/Apollo/lib/ruby/1.8/open-uri.rb:78:in `open_uri_original_open'
##  C:/Program Files/Apollo/lib/ruby/1.8/open-uri.rb:78:in `open'
----

----
require "open-uri"

module URI
  @@schemes['FILE'] = ::File
end

path =  "file://edicube-01/public/apollo/2.rb"
p path

uri = URI.parse(path)
uri.open(path) {|f|
   f.each_line {|line| p line}
 }

##"file://edicube-01/public/apollo/2.rb"
##wrong number of arguments(9 for 3) (ArgumentError)
##  C:/Program Files/Apollo/lib/ruby/1.8/uri/common.rb:373:in `initialize'
##  C:/Program Files/Apollo/lib/ruby/1.8/uri/common.rb:373:in `new'
##  C:/Program Files/Apollo/lib/ruby/1.8/uri/common.rb:373:in `parse'
----

あと、こんなエラーもでました。

----
require "open-uri"

path =  "http://www.ruby-lang.org/"
p path

uri = URI.parse(path)
uri.open(path) {|f|
   f.each_line {|line| p line}
 }

##"http://www.ruby-lang.org/"
##uninitialized constant OpenURI::O_RDONLY (NameError)
##  C:/Program Files/Apollo/lib/ruby/1.8/open-uri.rb:103:in `open_uri'
##  C:/Program Files/Apollo/lib/ruby/1.8/open-uri.rb:316:in `open'
----

Take_tk = KUMAGAI Hidetake
たけ(tk)=熊谷秀武