diff --git a/lib/csv/row.rb b/lib/csv/row.rb index 86323f7..b42031d 100644 --- a/lib/csv/row.rb +++ b/lib/csv/row.rb @@ -652,8 +652,13 @@ def ==(other) # row.to_h # => {"Name"=>"Foo"} def to_h hash = {} - each do |key, _value| - hash[key] = self[key] unless hash.key?(key) + each do |key, value| + new_key, new_value = if block_given? + yield(key, value) + else + [key, value] + end + hash[new_key] = new_value unless hash.key?(new_key) end hash end diff --git a/test/csv/test_row.rb b/test/csv/test_row.rb index b717945..33b70b6 100644 --- a/test/csv/test_row.rb +++ b/test/csv/test_row.rb @@ -339,6 +339,9 @@ def test_to_hash assert_predicate(string_key, :frozen?) assert_same(string_key, @row.headers[h]) end + row2 = CSV::Row.new(%w{A B C}, [1, 2, 3]) + hash2 = row2.to_hash { |k, v| [k, v ** 2] } + assert_equal({"A" => 1, "B" => 4, "C" => 9}, hash2) end def test_to_csv