lib/chronicle/etl/loaders/table_loader.rb in chronicle-etl-0.3.1 vs lib/chronicle/etl/loaders/table_loader.rb in chronicle-etl-0.4.0
- old
+ new
@@ -7,24 +7,18 @@
class TableLoader < Chronicle::ETL::Loader
register_connector do |r|
r.description = 'an ASCII table'
end
- DEFAULT_OPTIONS = {
- fields_limit: nil,
- fields_exclude: ['lids', 'type'],
- fields_include: [],
- truncate_values_at: nil,
- table_renderer: :basic
- }.freeze
+ setting :fields_limit, default: nil
+ setting :fields_exclude, default: ['lids', 'type']
+ setting :fields_include, default: []
+ setting :truncate_values_at, default: 40
+ setting :table_renderer, default: :basic
- def initialize(options={})
- @options = options.reverse_merge(DEFAULT_OPTIONS)
- @records = []
- end
-
def load(record)
+ @records ||= []
@records << record.to_h_flattened
end
def finish
return if @records.empty?
@@ -32,37 +26,37 @@
headers = build_headers(@records)
rows = build_rows(@records, headers)
@table = TTY::Table.new(header: headers, rows: rows)
puts @table.render(
- @options[:table_renderer].to_sym,
+ @config.table_renderer.to_sym,
padding: [0, 2, 0, 0]
)
end
private
def build_headers(records)
headers =
- if @options[:fields_include].any?
- Set[*@options[:fields_include]]
+ if @config.fields_include.any?
+ Set[*@config.fields_include]
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?(*@options[:fields_exclude]) } if @options[:fields_exclude].any?
- headers = headers.first(@options[:fields_limit]) if @options[:fields_limit]
+ headers = headers.delete_if { |header| header.end_with?(*@config.fields_exclude) } if @config.fields_exclude.any?
+ headers = headers.first(@config.fields_limit) if @config.fields_limit
headers.to_a.map(&:to_sym)
end
def build_rows(records, headers)
records.map do |record|
values = record.values_at(*headers).map{|value| value.to_s }
- if @options[:truncate_values_at]
- values = values.map{ |value| value.truncate(@options[:truncate_values_at]) }
+ if @config.truncate_values_at
+ values = values.map{ |value| value.truncate(@config.truncate_values_at) }
end
values
end
end