Class: AbAdmin::Utils::CsvDocument

Inherits:
Object
  • Object
show all
Defined in:
lib/ab_admin/utils/csv_document.rb

Instance Method Summary collapse

Constructor Details

#initialize(source, options = {}) ⇒ CsvDocument

Returns a new instance of CsvDocument.



6
7
8
9
10
# File 'lib/ab_admin/utils/csv_document.rb', line 6

def initialize(source, options = {})
  @source = source
  @options = options
  @klass = @options.delete(:klass) || extract_klass
end

Instance Method Details

#column_dataObject



16
17
18
# File 'lib/ab_admin/utils/csv_document.rb', line 16

def column_data
  @columns_names ||= @options[:column_data] || default_columns
end

#columns_namesObject



20
21
22
# File 'lib/ab_admin/utils/csv_document.rb', line 20

def columns_names
  (@options[:column_names] || default_columns).map { |column| column.is_a?(Symbol) ? @klass.human_attribute_name(column) : column }
end

#default_columnsObject



12
13
14
# File 'lib/ab_admin/utils/csv_document.rb', line 12

def default_columns
  @default_columns ||= @klass.column_names
end

#each_recordObject



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/ab_admin/utils/csv_document.rb', line 43

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

#filenameObject



24
25
26
# File 'lib/ab_admin/utils/csv_document.rb', line 24

def filename
  @filename ||= [@options[:filename] || "#{@klass.model_name.plural}-#{Time.now.strftime('%Y-%m-%d')}", '.csv'].join
end

#render(context = nil, options = {}) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/ab_admin/utils/csv_document.rb', line 28

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