-
由 Brian Williams 创作于
The export finalization process expects that each CSV entry is on a newline. As a quick fix, this change replaces newline characters with literal "\n" values.
由 Brian Williams 创作于The export finalization process expects that each CSV entry is on a newline. As a quick fix, this change replaces newline characters with literal "\n" values.
代码所有者
将用户和群组指定为特定文件更改的核准人。 了解更多。
csv_builder.rb 1.42 KiB
# frozen_string_literal: true
require 'csv'
require 'tempfile'
require 'zlib'
require_relative "csv_builder/version"
require_relative "csv_builder/builder"
require_relative "csv_builder/single_batch"
require_relative "csv_builder/stream"
require_relative "csv_builder/gzip"
# Generates CSV when given a collection and a mapping.
#
# Example:
#
# columns = {
# 'Title' => 'title',
# 'Comment' => 'comment',
# 'Author' => -> (post) { post.author.full_name }
# 'Created At (UTC)' => -> (post) { post.created_at&.strftime('%Y-%m-%d %H:%M:%S') }
# }
#
# CsvBuilder.new(@posts, columns).render
#
module CsvBuilder
#
# * +collection+ - The data collection to be used
# * +header_to_value_hash+ - A hash of 'Column Heading' => 'value_method'.
# * +associations_to_preload+ - An array of records to preload with a batch of records.
# * +replace_newlines+ - default: false - If true, replaces newline characters with a literal "\n"
#
# The value method will be called once for each object in the collection, to
# determine the value for that row. It can either be the name of a method on
# the object, or a lamda to call passing in the object.
def self.new(collection, header_to_value_hash, associations_to_preload = [], replace_newlines: false)
CsvBuilder::Builder.new(
collection,
header_to_value_hash,
associations_to_preload,
replace_newlines: replace_newlines
)
end
end