class RailsAdminImport::Formats::CSVImporter
Public Class Methods
new(import_model, params)
click to toggle source
Calls superclass method
# File lib/rails_admin_import/formats/csv_importer.rb, line 12 def initialize(import_model, params) super @encoding = params[:encoding] @header_converter = RailsAdminImport.config.header_converter end
Public Instance Methods
each_record() { |attr| ... }
click to toggle source
A method that yields a hash of attributes for each record to import
# File lib/rails_admin_import/formats/csv_importer.rb, line 19 def each_record CSV.foreach(filename, **csv_options) do |row| attr = convert_to_attributes(row) yield attr unless attr.all? { |field, value| value.blank? } end end
Private Instance Methods
convert_to_attributes(row)
click to toggle source
# File lib/rails_admin_import/formats/csv_importer.rb, line 65 def convert_to_attributes(row) row.each_with_object({}) do |(field, value), record| next if field.blank? field = field.to_sym if import_model.has_multiple_values?(field) field = import_model.pluralize_field(field) (record[field] ||= []) << value else record[field] = value end end end
csv_options()
click to toggle source
# File lib/rails_admin_import/formats/csv_importer.rb, line 28 def csv_options defaults = RailsAdminImport.config.csv_options options = { headers: true, header_converters: @header_converter, encoding: encoding, } defaults.merge(options) end
detect_encoding()
click to toggle source
# File lib/rails_admin_import/formats/csv_importer.rb, line 56 def detect_encoding charset = CharlockHolmes::EncodingDetector.detect File.read(filename) if charset[:confidence] > 0.6 from_encoding = charset[:encoding] from_encoding = "UTF-8" if from_encoding == "ascii" end from_encoding end
encoding()
click to toggle source
# File lib/rails_admin_import/formats/csv_importer.rb, line 39 def encoding from_encoding = if !@encoding.blank? @encoding else detect_encoding end to_encoding = import_model.abstract_model.encoding if from_encoding && from_encoding != to_encoding "#{from_encoding}:#{to_encoding}" else nil end end