diff options
Diffstat (limited to 'lib/optparse/version.rb')
| -rw-r--r-- | lib/optparse/version.rb | 58 |
1 files changed, 35 insertions, 23 deletions
diff --git a/lib/optparse/version.rb b/lib/optparse/version.rb index 8e99836878..b5ed695146 100644 --- a/lib/optparse/version.rb +++ b/lib/optparse/version.rb @@ -1,55 +1,65 @@ +# frozen_string_literal: false # OptionParser internal utility class << OptionParser - def show_version(*pkg) + # + # Shows version string in packages if Version is defined. + # + # +pkgs+:: package list + # + def show_version(*pkgs) progname = ARGV.options.program_name - show = proc do |klass, version| - version = version.join(".") if Array === version + result = false + show = proc do |klass, cname, version| str = "#{progname}" - str << ": #{klass}" unless klass == Object - str << " version #{version}" - case - when klass.const_defined?(:Release) - str << " (#{klass.const_get(:Release)})" - when klass.const_defined?(:RELEASE) - str << " (#{klass.const_get(:Release)})" + 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 pkg.size == 1 and pkg[0] == "all" + 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, version) + show.call(klass, cname.intern, version) end end else - pkg.each do |pkg| - /\A[A-Z]\w*((::|\/)[A-Z]\w*)*\z/ni =~ pkg or next + pkgs.each do |pkg| begin - pkg = eval(pkg) + pkg = pkg.split(/::|\//).inject(::Object) {|m, c| m.const_get(c)} v = case when pkg.const_defined?(:Version) - pkg.const_get(:Version) + pkg.const_get(n = :Version) when pkg.const_defined?(:VERSION) - pkg.const_get(:VERSION) + pkg.const_get(n = :VERSION) else + n = nil "unknown" end - show.call(pkg, v) + show.call(pkg, n, v) rescue NameError - puts "#{progname}: #$!" end end end - exit + result end - def each_const(path, klass = ::Object) - path.split(/::|\//).inject(klass) do |klass, name| + # :stopdoc: + + 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) + klass.const_get(c) end end end @@ -65,4 +75,6 @@ class << OptionParser end end end + + # :startdoc: end |
