[rubygems/rubygems] feat: Gem::Requirement#initialize_copy deep-copies @requirements
to avoid accidentally mutating the original's state when doing: ```ruby req2 = req.dup req2.concat([">= 3.3.22"]) ``` see https://github.com/rake-compiler/rake-compiler/pull/236 for a real-world use case that would be made simpler with this behavior. https://github.com/rubygems/rubygems/commit/8e0c03144e
This commit is contained in:
parent
d2f004cf6a
commit
66a6f2b15a
@ -284,6 +284,11 @@ class Gem::Requirement
|
||||
def _tilde_requirements
|
||||
@_tilde_requirements ||= _sorted_requirements.select {|r| r.first == "~>" }
|
||||
end
|
||||
|
||||
def initialize_copy(other) # :nodoc:
|
||||
@requirements = other.requirements.dup
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
class Gem::Version
|
||||
|
@ -12,6 +12,14 @@ class TestGemRequirement < Gem::TestCase
|
||||
assert_equal [[">=", v(1)], ["<", v(2)]], r.requirements
|
||||
end
|
||||
|
||||
def test_initialize_copy
|
||||
r = req("= 1.2")
|
||||
r2 = r.dup
|
||||
|
||||
assert_equal r.requirements, r2.requirements
|
||||
refute_same r.requirements, r2.requirements
|
||||
end
|
||||
|
||||
def test_equals2
|
||||
r = req "= 1.2"
|
||||
assert_equal r, r.dup
|
||||
|
Loading…
x
Reference in New Issue
Block a user