diff options
author | David RodrÃguez <deivid.rodriguez@riseup.net> | 2021-12-05 09:23:28 +0100 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2021-12-06 18:43:29 +0900 |
commit | d044ffd77fb3a486bbaca350980beee3f222bdb1 (patch) | |
tree | 981fe291a44b1bbbde21908b6646c996bd482414 | |
parent | e41c195cc52b2ce1ba00126917be606d52d75a30 (diff) | |
download | ruby-d044ffd77fb3a486bbaca350980beee3f222bdb1.tar.gz |
[rubygems/rubygems] Allow using `Gem::Version` without loading the rest of rubygems
https://github.com/rubygems/rubygems/commit/1b862537a5
-rw-r--r-- | lib/rubygems/version.rb | 9 | ||||
-rw-r--r-- | test/rubygems/test_project_sanity.rb | 12 |
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 |