class ForemanMaintain::CSVParser

Public Class Methods

new() click to toggle source
# File lib/foreman_maintain/csv_parser.rb, line 3
def initialize
  reset_parser
end

Public Instance Methods

parse(data) click to toggle source
# File lib/foreman_maintain/csv_parser.rb, line 7
def parse(data)
  return [] if data.nil?
  reset_parser
  data.each_char do |char|
    handle_escape(char) || handle_quoting(char) || handle_comma(char) || add_to_buffer(char)
  end
  unless @last_quote.nil?
    raise(ArgumentError, format('Illegal quoting in %s', @raw_buffer))
  end
  clean_buffer
  @value
end

Private Instance Methods

add_to_buffer(char) click to toggle source
# File lib/foreman_maintain/csv_parser.rb, line 62
def add_to_buffer(char)
  @buffer += char
  @raw_buffer += char
end
clean_buffer() click to toggle source
# File lib/foreman_maintain/csv_parser.rb, line 75
def clean_buffer
  @value << @buffer
  @raw_buffer = ''
  @buffer = ''
end
handle_comma(char) click to toggle source
# File lib/foreman_maintain/csv_parser.rb, line 22
def handle_comma(char)
  if char == ','
    clean_buffer
    true
  else
    false
  end
end
handle_escape(char) click to toggle source
# File lib/foreman_maintain/csv_parser.rb, line 48
def handle_escape(char)
  if @escape
    add_to_buffer(char)
    @escape = false
    true
  elsif char == '\\'
    @escape = true
    @raw_buffer += char
    true
  else
    false
  end
end
handle_quoting(char) click to toggle source
# File lib/foreman_maintain/csv_parser.rb, line 31
def handle_quoting(char)
  if @last_quote.nil? && ["'", '"'].include?(char)
    @last_quote = char
    @raw_buffer += char
    true
  elsif @last_quote == char
    @last_quote = nil
    @raw_buffer += char
    true
  elsif @last_quote
    add_to_buffer(char)
    true
  else
    false
  end
end
reset_parser() click to toggle source
# File lib/foreman_maintain/csv_parser.rb, line 67
def reset_parser
  @value = []
  @buffer = ''
  @raw_buffer = ''
  @escape = false
  @last_quote = nil
end