diff options
author | Akira Matsuda <ronnie@dio.jp> | 2022-01-11 05:30:05 +0900 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2022-01-13 18:15:14 +0900 |
commit | 9828502570acce53f4094c23756bc82bd256eab7 (patch) | |
tree | 564cba1082afd34a4c35655d7c65ca78a61cca27 | |
parent | 9de380860d8dc78963cabb5247c6e4a93a2fc5a9 (diff) |
[rubygems/rubygems] Let Version#spaceship accept a String
With this patch, handwriting version comparisons become a little bit easier.
before:
SomeGem.version <=> Gem::Version.new('1.3')
after:
SomeGem.version <=> '1.3'
https://github.com/rubygems/rubygems/commit/7e0dbb79f2
-rw-r--r-- | lib/rubygems/version.rb | 4 | ||||
-rw-r--r-- | test/rubygems/test_gem_version.rb | 4 |
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/rubygems/version.rb b/lib/rubygems/version.rb index 42e0f23505..9a26f721d6 100644 --- a/lib/rubygems/version.rb +++ b/lib/rubygems/version.rb @@ -341,9 +341,11 @@ class Gem::Version # Compares this version with +other+ returning -1, 0, or 1 if the # other version is larger, the same, or smaller than this # one. Attempts to compare to something that's not a - # <tt>Gem::Version</tt> return +nil+. + # <tt>Gem::Version</tt> or a valid version String return +nil+. def <=>(other) + return self <=> self.class.new(other) if (String === other) && self.class.correct?(other) + return unless Gem::Version === other return 0 if @version == other._version || canonical_segments == other.canonical_segments diff --git a/test/rubygems/test_gem_version.rb b/test/rubygems/test_gem_version.rb index 422e1ee86c..f8066ecbb8 100644 --- a/test/rubygems/test_gem_version.rb +++ b/test/rubygems/test_gem_version.rb @@ -154,6 +154,10 @@ class TestGemVersion < Gem::TestCase assert_equal(-1, v("5.a") <=> v("5.0.0.rc2")) assert_equal(1, v("5.x") <=> v("5.0.0.rc2")) + assert_equal(0, v("1.9.3") <=> "1.9.3") + assert_equal(1, v("1.9.3") <=> "1.9.2.99") + assert_equal(-1, v("1.9.3") <=> "1.9.3.1") + assert_nil v("1.0") <=> "whatever" end |