Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 5 additions & 33 deletions lib/csv.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2110,8 +2110,6 @@ def initialize(data,
strip: strip,
}
@parser = nil
@parser_enumerator = nil
@eof_error = nil

@writer_options = {
encoding: @encoding,
Expand Down Expand Up @@ -2430,24 +2428,13 @@ def to_io
end

def eof?
return false if @eof_error
begin
parser_enumerator.peek
false
rescue MalformedCSVError => error
@eof_error = error
false
rescue StopIteration
true
end
parser.eof?
end
alias_method :eof, :eof?

# Rewinds the underlying IO object and resets CSV's lineno() counter.
def rewind
@parser = nil
@parser_enumerator = nil
@eof_error = nil
@writer.rewind if @writer
@io.rewind
end
Expand Down Expand Up @@ -2687,13 +2674,7 @@ def header_convert(name = nil, &converter)
# p row
# end
def each(&block)
return to_enum(__method__) unless block_given?
begin
while true
yield(parser_enumerator.next)
end
rescue StopIteration
end
parser.parse(&block)
end

# :call-seq:
Expand Down Expand Up @@ -2801,15 +2782,10 @@ def header_row?
# # Raises IOError (not opened for reading)
# csv.shift
def shift
if @eof_error
eof_error, @eof_error = @eof_error, nil
raise eof_error
end
begin
parser_enumerator.next
rescue StopIteration
nil
parser.parse do |row|
return row
end
nil
end
alias_method :gets, :shift
alias_method :readline, :shift
Expand Down Expand Up @@ -2971,10 +2947,6 @@ def parser_options
fields_converter: parser_fields_converter)
end

def parser_enumerator
@parser_enumerator ||= parser.parse
end

def writer
@writer ||= Writer.new(@io, writer_options)
end
Expand Down
7 changes: 6 additions & 1 deletion lib/csv/parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ def scan_all(pattern)
end

def eos?
@scanner.eos?
@last_scanner and @scanner.eos?
end

def keep_start
Expand Down Expand Up @@ -444,6 +444,11 @@ def parse(&block)
end
end

def eof?
return false if @scanner.nil?
@scanner.eos?
end

def use_headers?
@use_headers
end
Expand Down
Loading