Class: AbAdmin::Utils::XlsDocument

Inherits:
Ruby2xlsx::Base
  • Object
show all
Includes:
EvalHelpers
Defined in:
lib/ab_admin/utils/xls_document.rb

Instance Method Summary collapse

Methods included from EvalHelpers

#call_method_or_proc_on, #evaluate_method

Instance Method Details

#column_dataObject



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

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

#columns_namesObject



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

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

#default_columnsObject



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

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

#each_with_indexObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/ab_admin/utils/xls_document.rb', line 66

def each_with_index
  count = 0
  if @source.is_a?(::ActiveRecord::Relation)
    @klass ||= @source.klass

    @source.find_each do |item|
      yield item, count
      count += 1
    end
  else
    items = @source.respond_to?(:to_a) ? @source.to_a : Array.wrap(@source)
    @klass ||= items.first.class unless items.empty?
    @klass ||= Default

    items.each do |item|
      yield item, count
      count += 1
    end
  end
end

#filenameObject



28
29
30
# File 'lib/ab_admin/utils/xls_document.rb', line 28

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

#renderObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/ab_admin/utils/xls_document.rb', line 32

def render
  date_format = workbook.add_format(num_format: 'dd.mm.yyyy')
  time_format = workbook.add_format(num_format: 'dd.mm.yyyy HH:MM')

  each_with_index do |item, index|
    row = index + 1

    column_data.each_with_index do |column, num|
      value = call_method_or_proc_on(item, column, exec: false)

      case value
        when Date
          worksheet.write_string(row, num, value.strftime('%Y-%m-%dT'), date_format)
        when DateTime, Time
          worksheet.write_date_time(row, num, value.strftime('%Y-%m-%dT%H:%M:%S.%L'), time_format)
        when String
          worksheet.write_string(row, num, value)
        else
          worksheet.write(row, num, AbAdmin.pretty_data(value))
      end
    end
  end

  bold = workbook.add_format(bold: 1)
  worksheet.write('A1', columns_names, bold)

  super

end

#worksheet_nameObject



62
63
64
# File 'lib/ab_admin/utils/xls_document.rb', line 62

def worksheet_name
  @worksheet_name ||= (@options[:worksheet_name] || @klass.model_name.human)
end