class ActiveReport::Base

Public Class Methods

evaluate(value = true) click to toggle source
# File lib/active_report/base.rb, line 31
def self.evaluate(value = true)
  @@evaluate = value
  self
end
export(data, opts = {}) click to toggle source
# File lib/active_report/base.rb, line 36
def self.export(data, opts = {})
  klass = new(data, opts)
  klass.export
end
import(data, opts = {}) click to toggle source
# File lib/active_report/base.rb, line 41
def self.import(data, opts = {})
  klass = new(data, opts)
  klass.import
end
new(data, opts = {}) click to toggle source
# File lib/active_report/base.rb, line 7
def initialize(data, opts = {})
  @data = data
  @opts = opts

  %i[except only].each { |key| @opts[key] = munge(@opts[key]) }
  { batch_size: 1_000, options: csv_options }.each { |key, val| @opts[key] ||= val }
end

Public Instance Methods

csv_force_encoding?() click to toggle source
# File lib/active_report/base.rb, line 19
def csv_force_encoding?
  ActiveReport.configuration.csv_force_encoding
end
csv_options() click to toggle source
# File lib/active_report/base.rb, line 15
def csv_options
  ActiveReport.configuration.csv_options
end
import_adapter() click to toggle source
# File lib/active_report/base.rb, line 23
def import_adapter
  ActiveReport.configuration.import_adapter
end
import_options() click to toggle source
# File lib/active_report/base.rb, line 27
def import_options
  ActiveReport.configuration.import_options
end

Private Instance Methods

active_record_column_names(object) click to toggle source
# File lib/active_report/base.rb, line 60
def active_record_column_names(object)
  return object.klass.column_names if ransack_object?(object)

  object.column_names
end
active_record_table_class?(object) click to toggle source
# File lib/active_report/base.rb, line 54
def active_record_table_class?(object)
  return if object.nil? || active_relation_object?(object)

  object.respond_to?(:table_name) || ransack_object?(object)
end
active_record_table_object?(object) click to toggle source
# File lib/active_report/base.rb, line 48
def active_record_table_object?(object)
  return if object.nil?

  !object.respond_to?(:table_name)
end
active_relation_object?(object) click to toggle source
# File lib/active_report/base.rb, line 66
def active_relation_object?(object)
  object.is_a?(ActiveRecord::Relation)
end
encode_to_utf8(line) click to toggle source
# File lib/active_report/base.rb, line 70
def encode_to_utf8(line)
  line.map do |chr|
    next if chr.nil?

    chr = chr.tr('"', '')
    chr.encode!('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
  end
end
evaluate?() click to toggle source
# File lib/active_report/base.rb, line 79
def evaluate?
  value = @@evaluate
  @@evaluate = false
  value
end
filter(object) click to toggle source
# File lib/active_report/base.rb, line 85
def filter(object)
  if @opts[:only].empty?
    return object if @opts[:except].empty?

    object.delete_if { |key, _| @opts[:except].include?(key) }
  else
    object.keep_if { |key, _| @opts[:only].include?(key) }
  end
end
filter_humanize_keys(data) click to toggle source
# File lib/active_report/base.rb, line 99
def filter_humanize_keys(data)
  filter(data.first).collect { |key, _| humanize(key) }
end
filter_values(data) click to toggle source
# File lib/active_report/base.rb, line 95
def filter_values(data)
  filter(data).values
end
humanize(object) click to toggle source
# File lib/active_report/base.rb, line 103
def humanize(object)
  object.to_s.tr('_', ' ').capitalize
end
humanize_values(data) click to toggle source
# File lib/active_report/base.rb, line 107
def humanize_values(data)
  data.map { |col| humanize(col) }
end
merge(object) click to toggle source
# File lib/active_report/base.rb, line 111
def merge(object)
  [object].compact
end
metaform(value) click to toggle source

rubocop:disable Security/Eval

# File lib/active_report/base.rb, line 116
def metaform(value)
  eval(value.to_s)
rescue Exception
  value
end
metaform_array(data) click to toggle source

rubocop:enable Security/Eval

# File lib/active_report/base.rb, line 123
def metaform_array(data)
  data.map { |val| metaform(val) }
end
metaform_hash(data) click to toggle source
# File lib/active_report/base.rb, line 127
def metaform_hash(data)
  data.each { |key, val| data[key] = metaform(val) }
end
metamorph(data) click to toggle source
# File lib/active_report/base.rb, line 139
def metamorph(data)
  case data.class.name
  when 'Array' then metamorph_array(data)
  when 'Hash' then metaform_hash(data)
  else metaform(data)
  end
end
metamorph_array(data) click to toggle source
# File lib/active_report/base.rb, line 131
def metamorph_array(data)
  case data.first.class.name
  when 'Array' then data.map { |arr| metaform_array(arr) }
  when 'Hash' then data.map { |hsh| metaform_hash(hsh) }
  else metaform_array(data)
  end
end
metatransform(data) click to toggle source
# File lib/active_report/base.rb, line 147
def metatransform(data)
  return if data.empty?

  evaluate? ? metamorph(data) : data
end
munge(data) click to toggle source
# File lib/active_report/base.rb, line 153
def munge(data)
  data.is_a?(Array) ? data : merge(data)
end
munge_first(data) click to toggle source
# File lib/active_report/base.rb, line 157
def munge_first(data)
  data.first.is_a?(Array) ? data : merge(data)
end
ransack_object?(object) click to toggle source
# File lib/active_report/base.rb, line 161
def ransack_object?(object)
  return false unless defined?(::Ransack)

  object.is_a?(::Ransack::Search)
end