Sha256: bf488acdec62465b562a7c1e18eb0a89b6b90a873523f36949d5aee54856541c
Contents?: true
Size: 1.62 KB
Versions: 2
Compression:
Stored size: 1.62 KB
Contents
# frozen_string_literal: true require 'spreadsheet' require 'xls_exporter/styler' class XlsExporter::Exporter include XlsExporter::Styler attr_writer :filename def self.export(&block) exporter = new exporter.instance_exec(&block) exporter.save! end def initialize @book = Spreadsheet::Workbook.new end def add_sheet(sheet_name = nil) save_sheet! if @sheet @headers = [] @body = [] @sheet = @book.create_worksheet @sheet.default_format = @format if @format.present? @sheet.name = sheet_name end def headers(*args) @headers = args end attr_writer :body def humanize_columns(columns) columns.map do |column| column = column.keys.first if column.is_a? Hash column.to_s.humanize end end def export_models(scope, *columns) headers(*humanize_columns(columns)) @body = to_body scope, columns end def to_body(scope, columns) scope.map do |instance| columns.map do |column| column = column.values.first if column.is_a? Hash if column.is_a? Proc instance.instance_exec(&column) elsif column.is_a? Symbol instance.send column end end end end def save_sheet! @sheet.row(0).concat(@headers) @body.each_with_index do |row, index| @sheet.row(index + 1).concat(row) end end def save! save_sheet! @book.worksheets.each { |worksheet| autofit worksheet } if @filename.present? filename = "./#{@filename}_#{Time.now.to_i}.xls" @book.write(filename) puts "Report has been saved as #{filename}" else @book end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
xls_exporter-1.2.0.1 | lib/xls_exporter/exporter.rb |
xls_exporter-1.2 | lib/xls_exporter/exporter.rb |