class ActiveAdmin::CSVBuilder


csv_builder.column :id
csv_builder = CSVBuilder.new humanize_name: false
csv_builder = CSVBuilder.new col_sep: “;”
csv_builder.column(“name”, humanize_name: false) { |resource| resource.full_name }
csv_builder.column(:name, humanize_name: false)
csv_builder.column(“Name”) { |resource| resource.full_name }
csv_builder.column :id
csv_builder = CSVBuilder.new
Usage example:
CSVBuilder stores CSV configuration

def self.default_for_resource(resource)

resource's content columns
The CSVBuilder's columns would be Id followed by this
Return a default CSVBuilder for a resource
def self.default_for_resource(resource)
  new resource: resource do
    column :id
    resource.content_columns.each { |c| column c }
  end
end

def build(controller, csv)

def build(controller, csv)
  columns = exec_columns controller.view_context
  bom = options[:byte_order_mark]
  column_names = options.delete(:column_names) { true }
  csv_options = options.except :encoding_options, :humanize_name, :byte_order_mark
  csv << bom if bom
  if column_names
    csv << CSV.generate_line(columns.map { |c| sanitize(encode(c.name, options)) }, **csv_options)
  end
  controller.send(:in_paginated_batches) do |resource|
    csv << CSV.generate_line(build_row(resource, columns, options), **csv_options)
  end
  csv
end

def build_row(resource, columns, options)

def build_row(resource, columns, options)
  columns.map do |column|
    sanitize(encode(call_method_or_proc_on(resource, column.data), options))
  end
end

def column(name, options = {}, &block)

def column(name, options = {}, &block)
  @columns << Column.new(name, @resource, column_transitive_options.merge(options), block)
end

def column_transitive_options

def column_transitive_options
  @column_transitive_options ||= @options.slice(*COLUMN_TRANSITIVE_OPTIONS)
end

def encode(content, options)

def encode(content, options)
  if options[:encoding]
    if options[:encoding_options]
      content.to_s.encode options[:encoding], **options[:encoding_options]
    else
      content.to_s.encode options[:encoding]
    end
  else
    content
  end
end

def exec_columns(view_context = nil)

def exec_columns(view_context = nil)
  @view_context = view_context
  @columns = [] # we want to re-render these every instance
  instance_exec &@block if @block.present?
  columns
end

def initialize(options = {}, &block)

def initialize(options = {}, &block)
  @resource = options.delete(:resource)
  @columns = []
  @options = ActiveAdmin.application.csv_options.merge options
  @block = block
end

def method_missing(method, *args, &block)

def method_missing(method, *args, &block)
  if @view_context.respond_to? method
    @view_context.public_send method, *args, &block
  else
    super
  end
end

def sanitize(content)

def sanitize(content)
  Sanitizer.sanitize(content)
end