Sha256: 2c84c53b5157e2d9e3f3526d06b3eaef90371e80404618d896a22ab8e165d58a

Contents?: true

Size: 1.3 KB

Versions: 4

Compression:

Stored size: 1.3 KB

Contents

require 'csv'
require 'fileutils'

module Forklift
  module Connection
    class Csv < Forklift::Base::Connection

      def initialize(config, forklift)
        @config = config
        @forklift = forklift
      end

      def config
        @config
      end

      def forklift
        @forklift
      end

      def read(size=forklift.config[:batch_size])
        data = []
        CSV.foreach(config[:file], headers: true, converters: :all) do |row|
          data << row.to_hash.symbolize_keys
          if(data.length == size)
            if block_given?
              yield data
              data = []
            else
              return data
            end
          end
        end

        if block_given?
          yield data
        else
          return data
        end
      end

      def write(data, append=true)
        if (append == false)
          FileUtils.rm(config[:file], {force: true})
        end

        if( !File.exists?(config[:file]) )
          keys = data.first.keys
          row = {}
          keys.each do |k|
            row[k] = k
          end
          data = [row] + data
        end

        CSV.open(config[:file],'a') do |file|
          data.each do |row|
            file << row.values
          end
        end

      end

      private

      #/private

    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
forklift_etl-1.1.12 lib/forklift/transports/csv.rb
forklift_etl-1.1.11 lib/forklift/transports/csv.rb
forklift_etl-1.1.10 lib/forklift/transports/csv.rb
forklift_etl-1.1.9 lib/forklift/transports/csv.rb