Sha256: 16a42ae26eb57d392ce4ad36dc1e62563be56144aaececb9ecf136f18062fc1a

Contents?: true

Size: 1.03 KB

Versions: 10

Compression:

Stored size: 1.03 KB

Contents

require 'csv'

module Chronicle
  module ETL
    class CSVExtractor < Chronicle::ETL::Extractor
      include Extractors::Helpers::InputReader

      register_connector do |r|
        r.description = 'CSV'
      end

      setting :headers, default: true

      def prepare
        @csvs = prepare_sources
      end

      def extract
        @csvs.each do |csv|
          csv.read.each do |row|
            yield Chronicle::ETL::Extraction.new(data: row.to_h)
          end
        end
      end

      def results_count
        @csvs.reduce(0) do |total_rows, csv|
          row_count = csv.readlines.size
          csv.rewind
          total_rows + row_count
        end
      end

      private

      def prepare_sources
        @csvs = []
        read_input do |csv_data|
          csv_options = {
            headers: @config.headers.is_a?(String) ? @config.headers.split(',') : @config.headers,
            converters: :all
          }
          @csvs << CSV.new(csv_data, **csv_options)
        end
        @csvs
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
chronicle-etl-0.5.5 lib/chronicle/etl/extractors/csv_extractor.rb
chronicle-etl-0.5.4 lib/chronicle/etl/extractors/csv_extractor.rb
chronicle-etl-0.5.3 lib/chronicle/etl/extractors/csv_extractor.rb
chronicle-etl-0.5.2 lib/chronicle/etl/extractors/csv_extractor.rb
chronicle-etl-0.5.1 lib/chronicle/etl/extractors/csv_extractor.rb
chronicle-etl-0.5.0 lib/chronicle/etl/extractors/csv_extractor.rb
chronicle-etl-0.4.4 lib/chronicle/etl/extractors/csv_extractor.rb
chronicle-etl-0.4.3 lib/chronicle/etl/extractors/csv_extractor.rb
chronicle-etl-0.4.2 lib/chronicle/etl/extractors/csv_extractor.rb
chronicle-etl-0.4.1 lib/chronicle/etl/extractors/csv_extractor.rb