class ActiveAdminCsvWithBom::Builder

Attributes

collection[R]

Public Class Methods

new(collection) click to toggle source
# File lib/active_admin_csv_with_bom/builder.rb, line 12
def initialize(collection)
  @collection = collection
end

Public Instance Methods

build() click to toggle source
# File lib/active_admin_csv_with_bom/builder.rb, line 16
def build
  "".tap do |csv|
    csv << byte_order_mark
    csv << build_header

    collection.each do |record|
      csv << build_row(record)
    end
  end
end

Private Instance Methods

build_header() click to toggle source
# File lib/active_admin_csv_with_bom/builder.rb, line 29
def build_header
  CSV.generate_line(column_names.map { |name| encode(resource_class.human_attribute_name(name)) }, options)
end
build_row(record) click to toggle source
# File lib/active_admin_csv_with_bom/builder.rb, line 33
def build_row(record)
  CSV.generate_line(column_names.map { |name| encode(record.send(name)) }, options)
end
column_names() click to toggle source
# File lib/active_admin_csv_with_bom/builder.rb, line 41
def column_names
  @_column_names ||= resource_class.column_names
rescue NoMethodError => _e
  raise NotImplementedError, "you must implement #{resource_class}.column_names"
end
config() click to toggle source
# File lib/active_admin_csv_with_bom/builder.rb, line 55
def config
  @_config ||= OpenStruct.new(::ActiveAdminCsvWithBom.csv_options)
end
encode(value) click to toggle source
# File lib/active_admin_csv_with_bom/builder.rb, line 47
def encode(value)
  value.to_s.encode(encoding, encoding_options)
end
options() click to toggle source
# File lib/active_admin_csv_with_bom/builder.rb, line 51
def options
  @_options ||= { col_sep: col_sep, row_sep: row_sep, force_quotes: force_quotes }
end
resource_class() click to toggle source
# File lib/active_admin_csv_with_bom/builder.rb, line 37
def resource_class
  @_resource_class ||= collection[0].class
end