Class: CSV::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/csv/parser.rb

Overview

Note: Don’t use this class directly. This is an internal class.

Defined Under Namespace

Classes: InputsScanner, InvalidEncoding, Scanner, UnexpectedError, UnoptimizedStringIO

Instance Method Summary collapse

Constructor Details

#initialize(input, options) ⇒ Parser

Returns a new instance of Parser.



326
327
328
329
330
331
332
# File 'lib/csv/parser.rb', line 326

def initialize(input, options)
  @input = input
  @options = options
  @samples = []

  prepare
end

Instance Method Details

#column_separatorObject



334
335
336
# File 'lib/csv/parser.rb', line 334

def column_separator
  @column_separator
end

#field_size_limitObject



346
347
348
# File 'lib/csv/parser.rb', line 346

def field_size_limit
  @max_field_size&.succ
end

#header_row?Boolean

Returns:

  • (Boolean)


366
367
368
# File 'lib/csv/parser.rb', line 366

def header_row?
  @use_headers and @headers.nil?
end

#headersObject



362
363
364
# File 'lib/csv/parser.rb', line 362

def headers
  @headers
end

#liberal_parsing?Boolean

Returns:

  • (Boolean)


378
379
380
# File 'lib/csv/parser.rb', line 378

def liberal_parsing?
  @liberal_parsing
end

#lineObject



386
387
388
# File 'lib/csv/parser.rb', line 386

def line
  last_line
end

#linenoObject



382
383
384
# File 'lib/csv/parser.rb', line 382

def lineno
  @lineno
end

#max_field_sizeObject



350
351
352
# File 'lib/csv/parser.rb', line 350

def max_field_size
  @max_field_size
end

#parse(&block) ⇒ Object



390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
# File 'lib/csv/parser.rb', line 390

def parse(&block)
  return to_enum(__method__) unless block_given?

  if @return_headers and @headers and @raw_headers
    headers = Row.new(@headers, @raw_headers, true)
    if @unconverted_fields
      headers = add_unconverted_fields(headers, [])
    end
    yield headers
  end

  begin
    @scanner ||= build_scanner
    if quote_character.nil?
      parse_no_quote(&block)
    elsif @need_robust_parsing
      parse_quotable_robust(&block)
    else
      parse_quotable_loose(&block)
    end
  rescue InvalidEncoding
    if @scanner
      ignore_broken_line
      lineno = @lineno
    else
      lineno = @lineno + 1
    end
    raise InvalidEncodingError.new(@encoding, lineno)
  rescue UnexpectedError => error
    if @scanner
      ignore_broken_line
      lineno = @lineno
    else
      lineno = @lineno + 1
    end
    message = "This should not be happen: #{error.message}: "
    message += "Please report this to https://github.com/ruby/csv/issues"
    raise MalformedCSVError.new(message, lineno)
  end
end

#quote_characterObject



342
343
344
# File 'lib/csv/parser.rb', line 342

def quote_character
  @quote_character
end

#return_headers?Boolean

Returns:

  • (Boolean)


370
371
372
# File 'lib/csv/parser.rb', line 370

def return_headers?
  @return_headers
end

#row_separatorObject



338
339
340
# File 'lib/csv/parser.rb', line 338

def row_separator
  @row_separator
end

#skip_blanks?Boolean

Returns:

  • (Boolean)


374
375
376
# File 'lib/csv/parser.rb', line 374

def skip_blanks?
  @skip_blanks
end

#skip_linesObject



354
355
356
# File 'lib/csv/parser.rb', line 354

def skip_lines
  @skip_lines
end

#unconverted_fields?Boolean

Returns:

  • (Boolean)


358
359
360
# File 'lib/csv/parser.rb', line 358

def unconverted_fields?
  @unconverted_fields
end

#use_headers?Boolean

Returns:

  • (Boolean)


431
432
433
# File 'lib/csv/parser.rb', line 431

def use_headers?
  @use_headers
end