Sha256: 7c01927dfc73faaa4dcc3a40e3df9a22c6c39ff3af2e6221317674704f5e6134

Contents?: true

Size: 877 Bytes

Versions: 1

Compression:

Stored size: 877 Bytes

Contents

# encoding: utf-8

module Embratel
  module CSVParser
    extend self

    def parse(path)
      rows = CSV.read(path, { :skip_blanks => true })
    rescue Errno::ENOENT, Errno::EISDIR, CSV::MalformedCSVError
      raise
    else
      if File.extname(path) != '.csv'
        raise NonCSVFileError
      else
        # Skipping title and header lines.
        2.times { rows.shift }
        invalid_rows, calls, fees = [], [], []
        rows.each_with_index do |row, index|
          if (call = Call.new(row)).valid?
            calls << call
          elsif (fee = Fee.new(row)).valid?
            fees << fee
          else
            invalid_rows << index + 1
          end
        end
        if invalid_rows.empty?
          calls + fees
        else
          raise InvalidRowsError, "Erro nas linhas #{invalid_rows.join(', ')}"
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
embratel-1.1.0 lib/embratel/csv_parser.rb