Sha256: 80133af133195ae0bb17a251f7ecac716092e6ee40a8a789a50fe72904e1f6ed

Contents?: true

Size: 823 Bytes

Versions: 1

Compression:

Stored size: 823 Bytes

Contents

# frozen_string_literal: true

module MrCommon
  class CSVExporter
    attr_reader :exportable
    attr_reader :adapter
    attr_reader :format_rules

    def initialize(exportable, adapter: nil, format_rules: nil)
      @exportable = exportable
      @adapter = adapter ? adapter.new(exportable) : DefaultCSVExportAdapter.new(exportable)
      @format_rules = format_rules || {}
    end

    def generate_csv
      CSV.generate do |csv|
        csv << adapter.headers

        adapter.collection.each do |item|
          row = adapter.row_from_item(item)
          csv << format_row(row)
        end
      end
    end

    def format_row(row)
      format_rules.each do |column_name, proc|
        idx = adapter.headers.index(column_name.to_s)
        row[idx] = proc.call(row[idx])
      end

      row
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mr_common-1.3.0 app/models/mr_common/csv_exporter.rb