lib/chronicle/etl/loaders/loader.rb in chronicle-etl-0.4.1 vs lib/chronicle/etl/loaders/loader.rb in chronicle-etl-0.4.2

- old
+ new

@@ -1,13 +1,19 @@ +require_relative 'helpers/encoding_helper' + module Chronicle module ETL # Abstract class representing a Loader for an ETL job class Loader extend Chronicle::ETL::Registry::SelfRegistering include Chronicle::ETL::Configurable + include Chronicle::ETL::Loaders::Helpers::EncodingHelper setting :output + setting :fields + setting :fields_limit, default: nil + setting :fields_exclude # Construct a new instance of this loader. Options are passed in from a Runner # == Parameters: # options:: # Options for configuring this Loader @@ -23,9 +29,26 @@ raise NotImplementedError end # Called once there are no more records to process def finish; end + + private + + def build_headers(records) + headers = + if @config.fields && @config.fields.any? + Set[*@config.fields] + else + # use all the keys of the flattened record hash + Set[*records.map(&:keys).flatten.map(&:to_s).uniq] + end + + headers = headers.delete_if { |header| header.end_with?(*@config.fields_exclude) } + headers = headers.first(@config.fields_limit) if @config.fields_limit + + headers.to_a.map(&:to_sym) + end end end end require_relative 'csv_loader'