[BioRuby] open_uri (Fwd: [BioRuby-cvs] bioruby/lib/bio command.rb, 1.3, 1.4)

Toshiaki Katayama ktym at hgc.jp
Mon Mar 27 07:09:11 UTC 2006


Hmm, so my understanding is

* open-uri.rb sucks - doesn't allow to require w/o override Kernel#open
* but Kernel#open also sucks - use File.open instead

Thus, by KISS principle, I want to take the easiest way :)

* require 'open-uri' (in lib/bio.rb?) and add documentation about that.
* always use OpenURI.open_uri instead of Kernel#open or Net::HTTP#get

This is mainly for easier setup of the HTTP proxy (than 'net/http').

Toshiaki


On 2006/03/26, at 15:56, Naohisa Goto wrote:

>>> +   # Same as OpenURI.open_uri(*arg).
>>> +   # If open-uri.rb is already loaded, ::OpenURI is used.
>>> +   # Otherwise, internal OpenURI in sandbox is used because
>>> +   # open-uri.rb redefines Kernel.open.
>>
>> Your code seems to contain a lot of hacks, finding open-uri.rb from Ruby's load path,
>> searching a particular method from it etc...
>
> Yes, it's very complicated. It's easier to copy-and-pastepart of
> open-uri.rb but this may cause copyright problem.
>
> The easiest way is to write "Please be careful that BioRuby now
> require open-uri and the bahavior of open() is changed."
> in the documents of BioRuby and uses OpenURI.open_uri.
>
> In very rare case, the require "oprn-uri" changes behaviors.
> For example,
>
> % mkdir -p http://www.google.com
> % echo "hello world" > http://www.google.com/index.html
> % ls -R
> .:
> http:/
>
> ./http::
> www.google.com/
>
> ./http:/www.google.com:
> index.html
> % irb
> irb(main):001:0> open("http://www.google.com/index.html"){|f| f.read }
> => "hello world\n"
> irb(main):002:0> require "open-uri"
> => true
> irb(main):003:0> open("http://www.google.com/index.html"){|f| f.read }
> => "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=S
> hift_JIS\"><title>Google</title><style><!--\nbody,td,a,p,.h{font-family:;}\n.h{f
> ont-size: 20px;}\n.q{color:#0000cc;}\n//-->\n</style>\n<script>\n<!--\nfunction 
> (snip)
>
> However, I think this is very rare case. In addition, to open a local
> file, it is recommended using File.open, because Kernel#open
> accepts shell special characters such as "|rm -rf *".
> (For the same reason, it is recommended to use OpenURI.open_uri
> to open a URI.)
>
>> I don't understand what the complicated part of your Sandbox module actually does
>> (or intends), but if your purpose is just to avoid redefine of Kenel.open, to put
>> something like
>>
>>> require 'open-uri'
>>>
>>> module Kernel
>>>   private
>>>   alias open_uri open
>>>   alias open open_uri_original_open
>>> end
>>
>> isn't enough?
>
> No. Above code kills open_uri's extension to the Kernel#open,
> and users who want to use the extended Kernel#open will be failed.
>
> --
> Naohisa GOTO
> ngoto at gen-info.osaka-u.ac.jp
> Department of Genome Informatics, Genome Information Research Center,
> Research Institute for Microbial Diseases, Osaka University, Japan
>
>
> _______________________________________________
> BioRuby mailing list
> BioRuby at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioruby




More information about the BioRuby mailing list