Sha256: 242233a21a555c3f2a67d77a54fc844799e0c722a5cc81b227e21db46fe90b88
Contents?: true
Size: 1.71 KB
Versions: 2
Compression:
Stored size: 1.71 KB
Contents
require 'csv' module AbAdmin module Utils class CsvDocument def initialize(source, options = {}) @source = source @options = options @klass = @options.delete(:klass) || extract_klass end def default_columns @default_columns ||= @klass.column_names end def column_data @columns_names ||= @options[:column_data] || default_columns end def columns_names (@options[:column_names] || default_columns).map { |column| column.is_a?(Symbol) ? @klass.human_attribute_name(column) : column } end def filename @filename ||= [@options[:filename] || "#{@klass.model_name.plural}-#{Time.now.strftime('%Y-%m-%d')}", '.csv'].join end def render(context=nil, options={}) ::CSV.generate(col_sep: @options[:column_separator] || ',') do |csv| csv << columns_names I18n.with_locale options[:locale] do each_record do |item| csv << column_data.map do |column| value = column.is_a?(Symbol) ? item.public_send(column) : context.instance_exec(item, &column) AbAdmin.pretty_data value end end end end end def each_record if @source.respond_to?(:find_each) @source.find_each do |item| yield item end else Array(@source).each do |item| yield item end end end protected def extract_klass if @source.respond_to?(:klass) @source.klass elsif @source.is_a?(Array) @source.first.try(:class) else @source.class end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ab_admin-0.11.0 | lib/ab_admin/utils/csv_document.rb |
ab_admin-0.10.0 | lib/ab_admin/utils/csv_document.rb |