Skip to content

Commit d00fb96

Browse files
authored
Merge pull request #9086 from tenderlove/nil-version
Undeprecate `Gem::Version.new(nil)`
2 parents 91e1748 + ded5e90 commit d00fb96

File tree

5 files changed

+43
-55
lines changed

5 files changed

+43
-55
lines changed

lib/rubygems/specification.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2517,7 +2517,7 @@ def validate_for_resolution
25172517
# Set the version to +version+.
25182518

25192519
def version=(version)
2520-
@version = Gem::Version.create(version)
2520+
@version = version.nil? ? version : Gem::Version.create(version)
25212521
end
25222522

25232523
def stubbed?

lib/rubygems/version.rb

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,7 @@ def version
171171
# True if the +version+ string matches RubyGems' requirements.
172172

173173
def self.correct?(version)
174-
nil_versions_are_discouraged! if version.nil?
175-
176-
ANCHORED_VERSION_PATTERN.match?(version.to_s)
174+
version.nil? || ANCHORED_VERSION_PATTERN.match?(version.to_s)
177175
end
178176

179177
##
@@ -182,15 +180,10 @@ def self.correct?(version)
182180
#
183181
# ver1 = Version.create('1.3.17') # -> (Version object)
184182
# ver2 = Version.create(ver1) # -> (ver1)
185-
# ver3 = Version.create(nil) # -> nil
186183

187184
def self.create(input)
188185
if self === input # check yourself before you wreck yourself
189186
input
190-
elsif input.nil?
191-
nil_versions_are_discouraged!
192-
193-
nil
194187
else
195188
new input
196189
end
@@ -206,14 +199,6 @@ def self.new(version) # :nodoc:
206199
@@all[version] ||= super
207200
end
208201

209-
def self.nil_versions_are_discouraged!
210-
unless Gem::Deprecate.skip
211-
warn "nil versions are discouraged and will be deprecated in Rubygems 4"
212-
end
213-
end
214-
215-
private_class_method :nil_versions_are_discouraged!
216-
217202
##
218203
# Constructs a Version from the +version+ string. A version string is a
219204
# series of digits or ASCII letters separated by dots.
@@ -224,7 +209,7 @@ def initialize(version)
224209
end
225210

226211
# If version is an empty string convert it to 0
227-
version = 0 if version.is_a?(String) && /\A\s*\Z/.match?(version)
212+
version = 0 if version.nil? || (version.is_a?(String) && /\A\s*\Z/.match?(version))
228213

229214
@version = version.to_s
230215

test/rubygems/test_gem_requirement.rb

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,7 @@ def test_satisfied_by_eh_bang_equal
137137
refute_satisfied_by "1.2", r
138138
assert_satisfied_by "1.3", r
139139

140-
assert_raise ArgumentError do
141-
Gem::Deprecate.skip_during do
142-
assert_satisfied_by nil, r
143-
end
144-
end
140+
assert_satisfied_by nil, r
145141
end
146142

147143
def test_satisfied_by_eh_blank
@@ -151,11 +147,7 @@ def test_satisfied_by_eh_blank
151147
assert_satisfied_by "1.2", r
152148
refute_satisfied_by "1.3", r
153149

154-
assert_raise ArgumentError do
155-
Gem::Deprecate.skip_during do
156-
assert_satisfied_by nil, r
157-
end
158-
end
150+
refute_satisfied_by nil, r
159151
end
160152

161153
def test_satisfied_by_eh_equal
@@ -165,11 +157,7 @@ def test_satisfied_by_eh_equal
165157
assert_satisfied_by "1.2", r
166158
refute_satisfied_by "1.3", r
167159

168-
assert_raise ArgumentError do
169-
Gem::Deprecate.skip_during do
170-
assert_satisfied_by nil, r
171-
end
172-
end
160+
refute_satisfied_by nil, r
173161
end
174162

175163
def test_satisfied_by_eh_gt
@@ -179,9 +167,7 @@ def test_satisfied_by_eh_gt
179167
refute_satisfied_by "1.2", r
180168
assert_satisfied_by "1.3", r
181169

182-
assert_raise ArgumentError do
183-
r.satisfied_by? nil
184-
end
170+
refute_satisfied_by nil, r
185171
end
186172

187173
def test_satisfied_by_eh_gte

test/rubygems/test_gem_specification.rb

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1247,12 +1247,37 @@ def test_initialize_prerelease_version_before_name
12471247
end
12481248

12491249
def test_initialize_nil_version
1250-
expected = "nil versions are discouraged and will be deprecated in Rubygems 4\n"
1251-
actual_stdout, actual_stderr = capture_output do
1252-
Gem::Specification.new.version = nil
1250+
spec = Gem::Specification.new
1251+
spec.name = "test-name"
1252+
1253+
assert_nil spec.version
1254+
spec.version = nil
1255+
assert_nil spec.version
1256+
1257+
spec.summary = "test gem"
1258+
spec.authors = ["test author"]
1259+
e = assert_raise Gem::InvalidSpecificationException do
1260+
spec.validate
12531261
end
1254-
assert_empty actual_stdout
1255-
assert_equal(expected, actual_stderr)
1262+
assert_match("missing value for attribute version", e.message)
1263+
end
1264+
1265+
def test_set_version_to_nil_after_setting_version
1266+
spec = Gem::Specification.new
1267+
spec.name = "test-name"
1268+
1269+
assert_nil spec.version
1270+
spec.version = "1.0.0"
1271+
assert_equal "1.0.0", spec.version.to_s
1272+
spec.version = nil
1273+
assert_nil spec.version
1274+
1275+
spec.summary = "test gem"
1276+
spec.authors = ["test author"]
1277+
e = assert_raise Gem::InvalidSpecificationException do
1278+
spec.validate
1279+
end
1280+
assert_match("missing value for attribute version", e.message)
12561281
end
12571282

12581283
def test__dump

test/rubygems/test_gem_version.rb

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ class TestGemVersion < Gem::TestCase
77
class V < ::Gem::Version
88
end
99

10+
def test_nil_is_zero
11+
zero = Gem::Version.create nil
12+
assert_equal Gem::Version.create(0), zero
13+
end
14+
1015
def test_bump
1116
assert_bumped_version_equal "5.3", "5.2.4"
1217
end
@@ -35,13 +40,6 @@ def test_class_create
3540

3641
assert_same real, Gem::Version.create(real)
3742

38-
expected = "nil versions are discouraged and will be deprecated in Rubygems 4\n"
39-
actual_stdout, actual_stderr = capture_output do
40-
assert_nil Gem::Version.create(nil)
41-
end
42-
assert_empty actual_stdout
43-
assert_equal(expected, actual_stderr)
44-
4543
assert_equal v("5.1"), Gem::Version.create("5.1")
4644

4745
ver = "1.1"
@@ -51,13 +49,7 @@ def test_class_create
5149
def test_class_correct
5250
assert_equal true, Gem::Version.correct?("5.1")
5351
assert_equal false, Gem::Version.correct?("an incorrect version")
54-
55-
expected = "nil versions are discouraged and will be deprecated in Rubygems 4\n"
56-
actual_stdout, actual_stderr = capture_output do
57-
Gem::Version.correct?(nil)
58-
end
59-
assert_empty actual_stdout
60-
assert_equal(expected, actual_stderr)
52+
assert_equal true, Gem::Version.correct?(nil)
6153
end
6254

6355
def test_class_new_subclass

0 commit comments

Comments
 (0)