зеркало из https://github.com/github/ruby.git
[ruby/csv] Make CSV::Row#dup return a usable Row (#108)
* Make CSV::Row#dup return a usable Row Previously, calling `dup` on a `CSV::Row` object yielded an object whose copy was too shallow. Changing the clone's fields would also change the fields on the source. This change makes the clone more distinct from the source, so that changes can be made to its fields without affecting the source. * Simplify https://github.com/ruby/csv/commit/64a1ea06fc
This commit is contained in:
Родитель
9141aae8c2
Коммит
b219cd5ac3
|
@ -50,7 +50,7 @@ class CSV
|
||||||
|
|
||||||
def initialize_copy(other)
|
def initialize_copy(other)
|
||||||
super
|
super
|
||||||
@row = @row.dup
|
@row = @row.collect(&:dup)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns +true+ if this is a header row.
|
# Returns +true+ if this is a header row.
|
||||||
|
|
|
@ -425,6 +425,9 @@ class TestCSVRow < Test::Unit::TestCase
|
||||||
def test_dup
|
def test_dup
|
||||||
row = CSV::Row.new(["A"], ["foo"])
|
row = CSV::Row.new(["A"], ["foo"])
|
||||||
dupped_row = row.dup
|
dupped_row = row.dup
|
||||||
|
dupped_row["A"] = "bar"
|
||||||
|
assert_equal(["foo", "bar"],
|
||||||
|
[row["A"], dupped_row["A"]])
|
||||||
dupped_row.delete("A")
|
dupped_row.delete("A")
|
||||||
assert_equal(["foo", nil],
|
assert_equal(["foo", nil],
|
||||||
[row["A"], dupped_row["A"]])
|
[row["A"], dupped_row["A"]])
|
||||||
|
|
Загрузка…
Ссылка в новой задаче