class ActiveList::Exporters::AbstractExporter

Attributes

generator[R]
table[R]

Public Class Methods

new(generator) click to toggle source
# File lib/active_list/exporters/abstract_exporter.rb, line 6
def initialize(generator)
  @generator = generator
  @table = generator.table
end

Public Instance Methods

columns_headers(options = {}) click to toggle source
# File lib/active_list/exporters/abstract_exporter.rb, line 50
def columns_headers(options = {})
  headers = []
  columns = table.exportable_columns
  for column in columns
    datum = column.header_code
    headers << (options[:encoding] ? datum + ".to_s.encode('#{options[:encoding]}', invalid: :replace, undef: :replace)" : datum)
  end
  headers
end
columns_to_array(nature, options = {}) click to toggle source
# File lib/active_list/exporters/abstract_exporter.rb, line 60
def columns_to_array(nature, options = {})
  columns = table.exportable_columns

  array = []
  record = options[:record] || 'record_of_the_death'
  for column in columns
    next unless column.is_a?(ActiveList::Definition::AbstractColumn)
    datum = if nature == :header
              column.header_code
            else
              column.exporting_datum_code(record)
            end
    array << (options[:encoding] ? datum + ".to_s.encode('#{options[:encoding]}', invalid: :replace, undef: :replace)" : datum)
  end
  array
end
columns_to_hash() click to toggle source
# File lib/active_list/exporters/abstract_exporter.rb, line 77
def columns_to_hash
  table.exportable_columns.map do |column|
    [column.header_code, column.exporting_datum_code('record').to_s]
  end.to_h
end
file_extension() click to toggle source
# File lib/active_list/exporters/abstract_exporter.rb, line 11
def file_extension
  'txt'
end
file_name_code() click to toggle source
# File lib/active_list/exporters/abstract_exporter.rb, line 15
def file_name_code
  "file_name = #{table.model.name}.model_name.human\n".c
end
generate_data_code() click to toggle source
# File lib/active_list/exporters/abstract_exporter.rb, line 46
def generate_data_code
  raise NotImplementedError.new("#{self.class.name}#generate_data_code must be implemented in sub-classes.")
end
generate_file_code(format) click to toggle source
# File lib/active_list/exporters/abstract_exporter.rb, line 23
def generate_file_code(format)
  code = file_name_code
  if generator.export_class
    code << generator.exportable_query_code
    code << "#{generator.export_class}.perform_later(user: current_user,\n"
    code << "                                        query: query,\n"
    code << "                                        content: #{columns_to_hash},\n"
    code << "                                        file_name: file_name,\n"
    code << "                                        format: '#{format}',\n"
    code << "                                        file_extension: '#{file_extension}')\n"
    code << "notify_success(:document_in_preparation)\n"
    code << "redirect_to(:back)\n"
  else
    code << generate_data_code
    code << send_data_code
  end
  code.c
end
mime_type() click to toggle source
# File lib/active_list/exporters/abstract_exporter.rb, line 19
def mime_type
  Mime::TEXT
end
send_data_code() click to toggle source
# File lib/active_list/exporters/abstract_exporter.rb, line 42
def send_data_code
  raise NotImplementedError.new("#{self.class.name}#send_data_code must be implemented in sub-classes.")
end