[BioRuby-cvs] bioruby/lib/bio command.rb,1.3,1.4

Naohisa Goto ngoto at pub.open-bio.org
Mon Mar 20 10:34:59 UTC 2006


Update of /home/repository/bioruby/bioruby/lib/bio
In directory pub.open-bio.org:/tmp/cvs-serv30042/lib/bio

Modified Files:
	command.rb 
Log Message:
* New module Bio::Command::NetTools for miscellaneous network methods.
  Currently, this module is intended to be used only inside
  BioRuby library. Please do not use it in user's programs now.
* New methods: Bio::Command::NetTools.open_uri(uri, *arg) and
  Bio::Command::NetTools.read_uri(uri).
* Changed license to Ruby's.


Index: command.rb
===================================================================
RCS file: /home/repository/bioruby/bioruby/lib/bio/command.rb,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** command.rb	4 Nov 2005 17:36:00 -0000	1.3
--- command.rb	20 Mar 2006 10:34:57 -0000	1.4
***************
*** 2,32 ****
  # = bio/command.rb - general methods for external command execution
  #
! # Copyright::	Copyright (C) 2003-2005
  # 		Naohisa Goto <ng at bioruby.org>,
  #		Toshiaki Katayama <k at bioruby.org>
! # License::	LGPL
  #
  #  $Id$
  #
- #--
- #
- #  This library is free software; you can redistribute it and/or
- #  modify it under the terms of the GNU Lesser General Public
- #  License as published by the Free Software Foundation; either
- #  version 2 of the License, or (at your option) any later version.
- #
- #  This library is distributed in the hope that it will be useful,
- #  but WITHOUT ANY WARRANTY; without even the implied warranty of
- #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- #  Lesser General Public License for more details.
- #
- #  You should have received a copy of the GNU Lesser General Public
- #  License along with this library; if not, write to the Free Software
- #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
- #
- #++
- #
  
  require 'open3'
  
  module Bio
--- 2,15 ----
  # = bio/command.rb - general methods for external command execution
  #
! # Copyright::	Copyright (C) 2003-2006
  # 		Naohisa Goto <ng at bioruby.org>,
  #		Toshiaki Katayama <k at bioruby.org>
! # License::	Ruby's
  #
  #  $Id$
  #
  
  require 'open3'
+ require 'uri'
  
  module Bio
***************
*** 162,165 ****
--- 145,291 ----
  
  end # module Tools
+ 
+ 
+ # = Bio::Command::NetTools
+ #
+ # Bio::Command::NetTools is a collection of miscellaneous methods
+ # for data transport through network.
+ #
+ # Library internal use only. Users should not directly use it.
+ #
+ # Note that it is under construction.
+ module NetTools
+ 
+   # 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.
+   def self.open_uri(uri, *arg)
+     if defined? ::OpenURI
+       ::OpenURI.open_uri(uri, *arg)
+     else
+       SandBox.load_openuri_in_sandbox
+       uri = uri.to_s if ::URI::Generic === uri
+       SandBox::OpenURI.open_uri(uri, *arg)
+     end
+   end
+ 
+   # Same as OpenURI.open_uri(uri).read.
+   # If open-uri.rb is already loaded, ::OpenURI is used.
+   # Otherwise, internal OpenURI in sandbox is used becase
+   # open-uri.rb redefines Kernel.open.
+   def self.read_uri(uri)
+     self.open_uri(uri).read
+   end
+ 
+   # Sandbox to load open-uri.rb.
+   # Internal use only.
+   module SandBox #:nodoc:
+ 
+     # Dummy module definition.
+     module Kernel #:nodoc:
+       # dummy method
+       def open(*arg); end #:nodoc:
+     end #module Kernel
+     
+     # a method to find proxy. dummy definition
+     module FindProxy; end #:nodoc:
+     
+     # dummy module definition
+     module OpenURI #:nodoc:
+       module OpenRead; end #:nodoc:
+     end #module OpenURI
+     
+     # Dummy module definition.
+     module URI #:nodoc:
+       class Generic < ::URI::Generic #:nodoc:
+         include SandBox::FindProxy
+       end
+       
+       class HTTPS < ::URI::HTTPS #:nodoc:
+         include SandBox::FindProxy
+         include SandBox::OpenURI::OpenRead
+       end
+       
+       class HTTP  < ::URI::HTTP  #:nodoc:
+         include SandBox::FindProxy
+         include SandBox::OpenURI::OpenRead
+       end
+       
+       class FTP  < ::URI::FTP    #:nodoc:
+         include SandBox::FindProxy
+         include SandBox::OpenURI::OpenRead
+       end
+       
+       # parse and new. internal use only.
+       def self.__parse_and_new__(klass, uri) #:nodoc:
+         scheme, userinfo, host, port,
+         registry, path, opaque, query, fragment = ::URI.split(uri)
+         klass.new(scheme, userinfo, host, port,
+                   registry, path, opaque, query,
+                   fragment)
+       end
+       private_class_method :__parse_and_new__
+       
+       # same as ::URI.parse. internal use only.
+       def self.parse(uri) #:nodoc:
+         r = ::URI.parse(uri)
+         case r
+         when ::URI::HTTPS
+           __parse_and_new__(HTTPS, uri)
+         when ::URI::HTTP
+           __parse_and_new__(HTTP, uri)
+         when ::URI::FTP
+           __parse_and_new__(FTP, uri)
+         else
+           r
+         end
+       end
+     end #module URI
+     
+     @load_openuri = nil
+     # load open-uri.rb in SandBox module.
+     def self.load_openuri_in_sandbox #:nodoc:
+       return if @load_openuri
+       fn = nil
+       unless $:.find do |x|
+           fn = File.join(x, 'open-uri.rb')
+           FileTest.exist?(fn)
+         end then
+         warn('Warning: cannot find open-uri.rb in $LOAD_PATH')
+       else
+         # reading open-uri.rb
+         str = File.read(fn)
+         # eval open-uri.rb contents in SandBox module
+         module_eval(str)
+         
+         # finds 'find_proxy' method
+         find_proxy_lines = nil
+         flag = nil
+         endstr = nil
+         str.each do |line|
+           if flag then
+             find_proxy_lines << line
+             if endstr == line[0, endstr.length] and
+                 /^\s+end(\s+.*)?$/ =~ line then
+               break
+             end
+           elsif /^(\s+)def\s+find_proxy(\s+.*)?$/ =~ line then
+             flag = true
+             endstr = "#{$1}end"
+             find_proxy_lines = line 
+           end
+         end
+         if find_proxy_lines
+           module_eval("module FindProxy;\n#{find_proxy_lines}\n;end\n")
+         else
+           warn('Warning: cannot find find_proxy method in open-uri.rb.')
+         end
+         @load_openuri = true
+       end
+     end
+   end #module SandBox
+ end #module NetTools
+ 
  end # module Command
  end # module Bio




More information about the bioruby-cvs mailing list