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



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

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

#columns_namesObject



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

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

#default_columnsObject



8
9
10
# File 'lib/ab_admin/utils/xls_document.rb', line 8

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

#each_with_indexObject



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/ab_admin/utils/xls_document.rb', line 58

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 = 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



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

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

#renderObject



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/ab_admin/utils/xls_document.rb', line 24

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



54
55
56
# File 'lib/ab_admin/utils/xls_document.rb', line 54

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