Created
May 2, 2009 16:52
-
-
Save ymendel/105621 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
commit 11a75d0f2fea50ab4f35e99a7b584c450ea0e634 | |
Author: Yossef Mendelssohn <[email protected]> | |
Date: Sat May 2 11:44:52 2009 -0500 | |
Made prerelease gems stick to the release number for satisfying ~> | |
Since 1.1.pre is < 1.1, it would fail ~> 1.1 | |
Added Gem::Version#release for convenience and cleanliness | |
diff --git a/lib/rubygems/requirement.rb b/lib/rubygems/requirement.rb | |
index ba6b890..8c2a196 100644 | |
--- a/lib/rubygems/requirement.rb | |
+++ b/lib/rubygems/requirement.rb | |
@@ -26,7 +26,7 @@ class Gem::Requirement | |
"<" => lambda { |v, r| v < r }, | |
">=" => lambda { |v, r| v >= r }, | |
"<=" => lambda { |v, r| v <= r }, | |
- "~>" => lambda { |v, r| v >= r && v < r.bump } | |
+ "~>" => lambda { |v, r| v = v.release; v >= r && v < r.bump } | |
} | |
OP_RE = OPS.keys.map{ |k| Regexp.quote k }.join '|' | |
diff --git a/lib/rubygems/version.rb b/lib/rubygems/version.rb | |
index d996538..4e979a5 100644 | |
--- a/lib/rubygems/version.rb | |
+++ b/lib/rubygems/version.rb | |
@@ -160,6 +160,16 @@ class Gem::Version | |
def prerelease? | |
parts.any? { |part| part.alpha? } | |
end | |
+ | |
+ ## | |
+ # The release for this version (e.g. 1.2.0.a -> 1.2.0) | |
+ # Non-prerelease versions return themselves | |
+ def release | |
+ return self unless prerelease? | |
+ rel_parts = parts.dup | |
+ rel_parts.pop while rel_parts.any? { |part| part.alpha? } | |
+ self.class.new(rel_parts.join('.')) | |
+ end | |
def yaml_initialize(tag, values) | |
self.version = values['version'] | |
diff --git a/test/test_gem_version.rb b/test/test_gem_version.rb | |
index 29b8b5b..d87245f 100644 | |
--- a/test/test_gem_version.rb | |
+++ b/test/test_gem_version.rb | |
@@ -199,6 +199,13 @@ class TestGemVersion < RubyGemTestCase | |
refute Gem::Version.new('2.9').prerelease? | |
refute Gem::Version.new('22.1.50.0').prerelease? | |
end | |
+ | |
+ def test_release | |
+ assert_equal Gem::Version.new('1.2.0'), Gem::Version.new('1.2.0.a').release | |
+ assert_equal Gem::Version.new('1.1'), Gem::Version.new('1.1.rc10').release | |
+ assert_equal Gem::Version.new('1.9.3'), Gem::Version.new('1.9.3.alpha.5').release | |
+ assert_equal Gem::Version.new('1.9.3'), Gem::Version.new('1.9.3').release | |
+ end | |
def test_satisfied_by_eh_boxed | |
assert_inadequate("1.3", "~> 1.4") | |
@@ -212,6 +219,11 @@ class TestGemVersion < RubyGemTestCase | |
assert_adequate( "1.4.5", "~> 1.4.4") | |
assert_inadequate("1.5", "~> 1.4.4") | |
assert_inadequate("2.0", "~> 1.4.4") | |
+ | |
+ assert_inadequate("1.1.pre", "~> 1.0.0") | |
+ assert_adequate( "1.1.pre", "~> 1.1") | |
+ assert_inadequate("2.0.a", "~> 1.0") | |
+ assert_adequate( "2.0.a", "~> 2.0") | |
end | |
def test_satisfied_by_eh_multiple |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment