class ActiveAdminImport::Model
Attributes
attributes[R]
to_hash[R]
Public Class Methods
new(args = {})
click to toggle source
# File lib/active_admin_import/model.rb, line 44 def initialize(args = {}) @new_record = true @attributes = {} assign_attributes(default_attributes.merge(args), true) end
Protected Class Methods
define_get_method(attr_name)
click to toggle source
# File lib/active_admin_import/model.rb, line 188 def define_get_method(attr_name) return if method_defined? "#{attr_name}=" define_method("#{attr_name}=") { |new_value| @attributes[attr_name] = new_value } end
define_set_method(attr_name)
click to toggle source
# File lib/active_admin_import/model.rb, line 183 def define_set_method(attr_name) return if method_defined? attr_name define_method(attr_name) { attributes[attr_name] } end
Public Instance Methods
allow_archive?()
click to toggle source
# File lib/active_admin_import/model.rb, line 72 def allow_archive? attributes[:allow_archive].present? end
archive?()
click to toggle source
# File lib/active_admin_import/model.rb, line 88 def archive? file_type == CONST::ZIP_TYPE end
assign_attributes(args = {}, new_record = false)
click to toggle source
# File lib/active_admin_import/model.rb, line 50 def assign_attributes(args = {}, new_record = false) @attributes.merge!(args) @new_record = new_record args.keys.each do |key| define_methods_for(key.to_sym) end if args.is_a?(Hash) end
default_attributes()
click to toggle source
# File lib/active_admin_import/model.rb, line 62 def default_attributes { allow_archive: true, csv_headers: [], file: nil, force_encoding: 'UTF-8', hint: '' } end
force_encoding?()
click to toggle source
# File lib/active_admin_import/model.rb, line 80 def force_encoding? attributes[:force_encoding].present? end
new_record?()
click to toggle source
# File lib/active_admin_import/model.rb, line 76 def new_record? @new_record.present? end
persisted?()
click to toggle source
# File lib/active_admin_import/model.rb, line 84 def persisted? false end
read_attribute_for_validation(key)
click to toggle source
# File lib/active_admin_import/model.rb, line 58 def read_attribute_for_validation(key) @attributes[key.to_sym] end
Protected Instance Methods
content_encode(data)
click to toggle source
# File lib/active_admin_import/model.rb, line 173 def content_encode(data) encoding_name = if detect_encoding? dynamic_encoding(data) else force_encoding.to_s end data.force_encoding(encoding_name) end
correct_content_type()
click to toggle source
# File lib/active_admin_import/model.rb, line 124 def correct_content_type return if file.blank? || file.is_a?(Tempfile) || (csv_allowed_types.include? file_type) errors.add(:file, I18n.t('active_admin_import.file_format_error')) end
csv_allowed_types()
click to toggle source
# File lib/active_admin_import/model.rb, line 120 def csv_allowed_types CONST::CSV_TYPES end
define_methods_for(attr_name)
click to toggle source
# File lib/active_admin_import/model.rb, line 144 def define_methods_for(attr_name) # generate methods for instance object by attributes singleton_class.class_eval do define_set_method(attr_name) define_get_method(attr_name) end end
detect_encoding?()
click to toggle source
# File lib/active_admin_import/model.rb, line 165 def detect_encoding? force_encoding == :auto end
dynamic_encoding(data)
click to toggle source
# File lib/active_admin_import/model.rb, line 169 def dynamic_encoding(data) CharDet.detect(data)['encoding'] end
encode(data)
click to toggle source
# File lib/active_admin_import/model.rb, line 152 def encode(data) data = content_encode(data) if force_encoding? data = data.encode( 'UTF-8', invalid: :replace, undef: :replace, universal_newline: true ) begin data.sub("\xEF\xBB\xBF", '') # bom rescue StandardError => _ data end end
encode_file()
click to toggle source
# File lib/active_admin_import/model.rb, line 104 def encode_file data = File.read(file_path) File.open(file_path, 'w') do |f| f.write(encode(data)) end end
file_contents_present()
click to toggle source
# File lib/active_admin_import/model.rb, line 131 def file_contents_present return unless File.zero?(file_path) errors.add(:file, I18n.t('active_admin_import.file_empty_error')) end
file_path()
click to toggle source
# File lib/active_admin_import/model.rb, line 96 def file_path if file.is_a? ActionDispatch::Http::UploadedFile file.tempfile.path else file.path end end
file_type()
click to toggle source
# File lib/active_admin_import/model.rb, line 136 def file_type if file.is_a? ActionDispatch::Http::UploadedFile file.content_type.chomp else '' end end
unzip_file()
click to toggle source
# File lib/active_admin_import/model.rb, line 111 def unzip_file Zip::File.open(file_path) do |zip_file| self.file = Tempfile.new(CONST::TMP_FILE) data = zip_file.entries.select(&:file?).first.get_input_stream.read file << data file.close end end