Sha256: e66a51da1de0e9f213731b8c1b6dbcd40e8d8604dd0ccbb7c4cdd9127b22345a

Contents?: true

Size: 1.48 KB

Versions: 44

Compression:

Stored size: 1.48 KB

Contents

module HammerCLI
  class CSVParser

    def initialize
      reset_parser
    end

    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
      raise ArgumentError.new(_("Illegal quoting in %{buffer}") % { :buffer => @raw_buffer }) unless @last_quote.nil?
      clean_buffer
      @value
    end

    private

    def handle_comma(char)
      if char == ','
        clean_buffer
        true
      else
        false
      end
    end

    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

    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

    def add_to_buffer(char)
      @buffer += char
      @raw_buffer += char
    end

    def reset_parser
      @value = []
      @buffer = ''
      @raw_buffer = ''
      @escape = false
      @last_quote = nil
    end

    def clean_buffer
      @value << @buffer
      @raw_buffer = ''
      @buffer = ''
    end
  end
end

Version data entries

44 entries across 44 versions & 1 rubygems

Version Path
hammer_cli-3.14.0 lib/hammer_cli/csv_parser.rb
hammer_cli-3.13.0 lib/hammer_cli/csv_parser.rb
hammer_cli-3.12.0 lib/hammer_cli/csv_parser.rb
hammer_cli-3.10.0 lib/hammer_cli/csv_parser.rb
hammer_cli-3.9.0 lib/hammer_cli/csv_parser.rb
hammer_cli-3.8.0 lib/hammer_cli/csv_parser.rb
hammer_cli-3.7.0 lib/hammer_cli/csv_parser.rb
hammer_cli-3.5.1 lib/hammer_cli/csv_parser.rb
hammer_cli-3.6.0 lib/hammer_cli/csv_parser.rb
hammer_cli-3.5.0 lib/hammer_cli/csv_parser.rb
hammer_cli-3.4.0 lib/hammer_cli/csv_parser.rb
hammer_cli-3.3.0 lib/hammer_cli/csv_parser.rb
hammer_cli-3.2.0 lib/hammer_cli/csv_parser.rb
hammer_cli-3.1.1 lib/hammer_cli/csv_parser.rb
hammer_cli-3.0.2 lib/hammer_cli/csv_parser.rb
hammer_cli-3.1.0 lib/hammer_cli/csv_parser.rb
hammer_cli-3.0.1 lib/hammer_cli/csv_parser.rb
hammer_cli-3.0.0 lib/hammer_cli/csv_parser.rb
hammer_cli-2.5.1 lib/hammer_cli/csv_parser.rb
hammer_cli-2.5.0 lib/hammer_cli/csv_parser.rb