Feature #12347 ยป 0001-lib-csv.rb-CSV-Row-Table-each-delete_if-Returns-an-e.patch
lib/csv.rb | ||
---|---|---|
#
|
||
# This method returns the row for chaining.
|
||
#
|
||
# If no block is given, an Enumerator is returned.
|
||
#
|
||
def delete_if(&block)
|
||
block or return enum_for(__method__) { size }
|
||
@row.delete_if(&block)
|
||
self # for chaining
|
||
... | ... | |
#
|
||
# Yields each pair of the row as header and field tuples (much like
|
||
# iterating over a Hash).
|
||
# iterating over a Hash). This method returns the row for chaining.
|
||
#
|
||
# Support for Enumerable.
|
||
# If no block is given, an Enumerator is returned.
|
||
#
|
||
# This method returns the row for chaining.
|
||
# Support for Enumerable.
|
||
#
|
||
def each(&block)
|
||
block or return enum_for(__method__) { size }
|
||
@row.each(&block)
|
||
self # for chaining
|
||
... | ... | |
#
|
||
# This method returns the table for chaining.
|
||
#
|
||
# If no block is given, an Enumerator is returned.
|
||
#
|
||
def delete_if(&block)
|
||
block or return enum_for(__method__) { @mode == :row or @mode == :col_or_row ? size : headers.size }
|
||
if @mode == :row or @mode == :col_or_row # by index
|
||
@table.delete_if(&block)
|
||
else # by header
|
||
... | ... | |
#
|
||
# This method returns the table for chaining.
|
||
#
|
||
# If no block is given, an Enumerator is returned.
|
||
#
|
||
def each(&block)
|
||
block or return enum_for(__method__) { @mode == :col ? headers.size : size }
|
||
if @mode == :col
|
||
headers.each { |header| block[[header, self[header]]] }
|
||
else
|
test/csv/test_row.rb | ||
---|---|---|
# by header
|
||
assert_equal(["C", 3], @row.delete("C"))
|
||
# using a block
|
||
end
|
||
def test_delete_if
|
||
assert_equal(@row, @row.delete_if { |h, f| h == "A" and not f.nil? })
|
||
assert_equal([["A", nil]], @row.to_a)
|
||
assert_equal([["B", 2], ["C", 3], ["A", nil]], @row.to_a)
|
||
end
|
||
def test_delete_if_without_block
|
||
enum = @row.delete_if
|
||
assert_instance_of(Enumerator, enum)
|
||
assert_equal(@row.size, enum.size)
|
||
assert_equal(@row, enum.each { |h, f| h == "A" and not f.nil? })
|
||
assert_equal([["B", 2], ["C", 3], ["A", nil]], @row.to_a)
|
||
end
|
||
def test_fields
|
||
... | ... | |
# verify that we can chain the call
|
||
assert_equal(@row, @row.each { })
|
||
# without block
|
||
ary = @row.to_a
|
||
enum = @row.each
|
||
assert_instance_of(Enumerator, enum)
|
||
assert_equal(@row.size, enum.size)
|
||
enum.each do |pair|
|
||
assert_equal(ary.first.first, pair.first)
|
||
assert_equal(ary.shift.last, pair.last)
|
||
end
|
||
end
|
||
def test_enumerable
|
test/csv/test_table.rb | ||
---|---|---|
# verify that we can chain the call
|
||
assert_equal(@table, @table.each { })
|
||
# without block
|
||
enum = @table.each
|
||
assert_instance_of(Enumerator, enum)
|
||
assert_equal(@table.size, enum.size)
|
||
i = 0
|
||
enum.each do |row|
|
||
assert_equal(@rows[i], row)
|
||
i += 1
|
||
end
|
||
###################
|
||
### Column Mode ###
|
||
###################
|
||
... | ... | |
assert_equal(@table[header], column)
|
||
end
|
||
# without block
|
||
enum = @table.each
|
||
assert_instance_of(Enumerator, enum)
|
||
assert_equal(@table.headers.size, enum.size)
|
||
headers = @table.headers
|
||
enum.each do |header, column|
|
||
assert_equal(headers.shift, header)
|
||
assert_equal(@table[header], column)
|
||
end
|
||
############################
|
||
### One Shot Mode Change ###
|
||
############################
|
||
... | ... | |
END_RESULT
|
||
end
|
||
def test_delete_if_row_without_block
|
||
######################
|
||
### Mixed/Row Mode ###
|
||
######################
|
||
enum = @table.delete_if
|
||
assert_instance_of(Enumerator, enum)
|
||
assert_equal(@table.size, enum.size)
|
||
# verify that we can chain the call
|
||
assert_equal(@table, enum.each { |row| (row["B"] % 2).zero? })
|
||
# verify resulting table
|
||
assert_equal(<<-END_RESULT.gsub(/^\s+/, ""), @table.to_csv)
|
||
A,B,C
|
||
4,5,6
|
||
END_RESULT
|
||
end
|
||
def test_delete_if_column
|
||
###################
|
||
### Column Mode ###
|
||
... | ... | |
END_RESULT
|
||
end
|
||
def test_delete_if_column_without_block
|
||
###################
|
||
### Column Mode ###
|
||
###################
|
||
@table.by_col!
|
||
enum = @table.delete_if
|
||
assert_instance_of(Enumerator, enum)
|
||
assert_equal(@table.headers.size, enum.size)
|
||
assert_equal(@table, enum.each { |h, v| h > "A" })
|
||
assert_equal(<<-END_RESULT.gsub(/^\s+/, ""), @table.to_csv)
|
||
A
|
||
1
|
||
4
|
||
7
|
||
END_RESULT
|
||
end
|
||
def test_values_at
|
||
##################
|
||
### Mixed Mode ###
|