Sha256: 2d0ef0d5e1458d440805964052aa975d1c559d88ebed8d632f4cb0096297b50b

Contents?: true

Size: 1.28 KB

Versions: 8

Compression:

Stored size: 1.28 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=1000)
        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

8 entries across 8 versions & 1 rubygems

Version Path
forklift_etl-1.1.0 lib/forklift/transports/csv.rb
forklift_etl-1.0.19 lib/forklift/transports/csv.rb
forklift_etl-1.0.18 lib/forklift/transports/csv.rb
forklift_etl-1.0.17 lib/forklift/transports/csv.rb
forklift_etl-1.0.16 lib/forklift/transports/csv.rb
forklift_etl-1.0.15 lib/forklift/transports/csv.rb
forklift_etl-1.0.14 lib/forklift/transports/csv.rb
forklift_etl-1.0.12 lib/forklift/transports/csv.rb