Sha256: 288d62fe4acb8c0e50aa90b0428f4ef14b9a39cbb1685faa5d52f19346384968
Contents?: true
Size: 1.37 KB
Versions: 1
Compression:
Stored size: 1.37 KB
Contents
require "csv" require "ostruct" require "active_support/core_ext/module/delegation" module ActiveAdminCsvWithBom class Builder attr_reader :collection delegate :byte_order_mark, :encoding, :encoding_options, :col_sep, :row_sep, :force_quotes, to: :config def initialize(collection) @collection = collection end def build "".tap do |csv| csv << byte_order_mark csv << build_header collection.each do |record| csv << build_row(record) end end end private def build_header CSV.generate_line(column_names.map { |name| encode(resource_class.human_attribute_name(name)) }, options) end def build_row(record) CSV.generate_line(column_names.map { |name| encode(record.send(name)) }, options) end def resource_class @_resource_class ||= collection[0].class end def column_names @_column_names ||= resource_class.column_names rescue NoMethodError => _e raise NotImplementedError, "you must implement #{resource_class}.column_names" end def encode(value) value.to_s.encode(encoding, encoding_options) end def options @_options ||= { col_sep: col_sep, row_sep: row_sep, force_quotes: force_quotes } end def config @_config ||= OpenStruct.new(::ActiveAdminCsvWithBom.csv_options) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
active_admin_csv_with_bom-0.1.0 | lib/active_admin_csv_with_bom/builder.rb |