def version_of(mod_)
version_ = nil
[:VERSION, :VERSION_STRING, :GemVersion].each do |sym_|
if mod_.const_defined?(sym_)
version_ = mod_.const_get(sym_)
break
end
end
if version_.kind_of?(::Module)
if version_.const_defined?(:STRING)
version_ = version_.const_get(:STRING)
elsif version_.const_defined?(:VERSION)
version_ = version_.const_get(:VERSION)
elsif version_.const_defined?(:MAJOR) && version_.const_defined?(:MINOR) && version_.const_defined?(:TINY)
version_ = Value.new([version_.const_get(:MAJOR), version_.const_get(:MINOR), version_.const_get(:TINY)], :standard)
end
end
unless version_.kind_of?(::String) || version_.kind_of?(::Array) || version_.kind_of?(Value)
[:version, :release].each do |sym_|
if mod_.respond_to?(sym_)
version_ = mod_.send(sym_)
break
end
end
end
if version_.kind_of?(::String)
version_ = parse(version_, :standard) rescue nil
elsif version_.kind_of?(::Array)
version_ = create(version_, :standard) rescue nil
elsif !version_.kind_of?(Value)
version_ = nil
end
version_
end