mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	warning. [ruby-core:20612] * lib/irb/completion.rb, lib/net/imap.rb, lib/prime.rb, lib/rinda/ring.rb, lib/racc/parser.rb, lib/shell/command-processor.rb, lib/yaml/yamlnode.rb: ditto. * lib/racc/parser.rb: remove space before parentheses. * lib/shell/command-processor.rb, lib/shell/process-controller.rb: use parentheses around arguments. * lib/irb/ext/change-ws.rb, lib/rexml/validation/relaxng.rb, lib/yaml/baseemitter.rb: indentation fix. * lib/matrix.rb: small cosmetic change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20859 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# OptionParser internal utility
 | 
						|
 | 
						|
class << OptionParser
 | 
						|
  def show_version(*pkgs)
 | 
						|
    progname = ARGV.options.program_name
 | 
						|
    result = false
 | 
						|
    show = proc do |klass, cname, version|
 | 
						|
      str = "#{progname}"
 | 
						|
      unless klass == ::Object and cname == :VERSION
 | 
						|
        version = version.join(".") if Array === version
 | 
						|
        str << ": #{klass}" unless klass == Object
 | 
						|
        str << " version #{version}"
 | 
						|
      end
 | 
						|
      [:Release, :RELEASE].find do |rel|
 | 
						|
        if klass.const_defined?(rel)
 | 
						|
          str << " (#{klass.const_get(rel)})"
 | 
						|
        end
 | 
						|
      end
 | 
						|
      puts str
 | 
						|
      result = true
 | 
						|
    end
 | 
						|
    if pkgs.size == 1 and pkgs[0] == "all"
 | 
						|
      self.search_const(::Object, /\AV(?:ERSION|ersion)\z/) do |klass, cname, version|
 | 
						|
        unless cname[1] == ?e and klass.const_defined?(:Version)
 | 
						|
          show.call(klass, cname.intern, version)
 | 
						|
        end
 | 
						|
      end
 | 
						|
    else
 | 
						|
      pkgs.each do |pkg|
 | 
						|
        begin
 | 
						|
          pkg = pkg.split(/::|\//).inject(::Object) {|m, c| m.const_get(c)}
 | 
						|
          v = case
 | 
						|
              when pkg.const_defined?(:Version)
 | 
						|
                pkg.const_get(n = :Version)
 | 
						|
              when pkg.const_defined?(:VERSION)
 | 
						|
                pkg.const_get(n = :VERSION)
 | 
						|
              else
 | 
						|
                n = nil
 | 
						|
                "unknown"
 | 
						|
              end
 | 
						|
          show.call(pkg, n, v)
 | 
						|
        rescue NameError
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
    result
 | 
						|
  end
 | 
						|
 | 
						|
  def each_const(path, base = ::Object)
 | 
						|
    path.split(/::|\//).inject(base) do |klass, name|
 | 
						|
      raise NameError, path unless Module === klass
 | 
						|
      klass.constants.grep(/#{name}/i) do |c|
 | 
						|
        klass.const_defined?(c) or next
 | 
						|
        c = klass.const_get(c)
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def search_const(klass, name)
 | 
						|
    klasses = [klass]
 | 
						|
    while klass = klasses.shift
 | 
						|
      klass.constants.each do |cname|
 | 
						|
        klass.const_defined?(cname) or next
 | 
						|
        const = klass.const_get(cname)
 | 
						|
        yield klass, cname, const if name === cname
 | 
						|
        klasses << const if Module === const and const != ::Object
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |