summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/rubygems/version.rb9
-rw-r--r--test/rubygems/test_project_sanity.rb12
2 files changed, 21 insertions, 0 deletions
diff --git a/lib/rubygems/version.rb b/lib/rubygems/version.rb
index 20bbff4fdd..37fd71edc0 100644
--- a/lib/rubygems/version.rb
+++ b/lib/rubygems/version.rb
@@ -149,6 +149,15 @@
# For the last example, single-digit versions are automatically extended with
# a zero to give a sensible result.
+# Our code style opens classes directly without opening the intermediate
+# modules. This works because tha main entrypoint `rubygems.rb`, which defines
+# the root `Gem` module, is usually required first. But in this case we want to
+# allow using `Gem::Version` without loading the rest of rubygems, so we
+# explicit define the `Gem` placeholder module first.
+module Gem; end
+
+require_relative "deprecate"
+
class Gem::Version
autoload :Requirement, File.expand_path('requirement', __dir__)
diff --git a/test/rubygems/test_project_sanity.rb b/test/rubygems/test_project_sanity.rb
index 38c2541df6..4324c997bd 100644
--- a/test/rubygems/test_project_sanity.rb
+++ b/test/rubygems/test_project_sanity.rb
@@ -17,4 +17,16 @@ class TestProjectSanity < Gem::TestCase
assert status.success?, err
end
+
+ def test_require_and_use_rubygems_version
+ err, status = Open3.capture2e(
+ *ruby_with_rubygems_in_load_path,
+ "--disable-gems",
+ "-rrubygems/version",
+ "-e",
+ "Gem::Version.new('2.7.0.preview1') >= Gem::Version.new(RUBY_VERSION)"
+ )
+
+ assert status.success?, err
+ end
end