mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[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
64a1ea06fc
This commit is contained in:
parent
9141aae8c2
commit
b219cd5ac3
Notes:
git
2020-07-20 03:35:49 +09:00
2 changed files with 4 additions and 1 deletions
|
@ -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"]])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue