From 885e742555bbbb574a884cb9b1719e72fb8be8c0 Mon Sep 17 00:00:00 2001 From: Igor Fedoronchuk Date: Sat, 18 Mar 2017 02:38:44 +0200 Subject: [PATCH] support for tsv files added --- lib/active_admin_import/dsl.rb | 1 + lib/active_admin_import/importer.rb | 2 +- lib/active_admin_import/model.rb | 4 ++++ spec/fixtures/files/authors_with_tabs.tsv | 3 +++ spec/import_spec.rb | 13 +++++++++++++ 5 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 spec/fixtures/files/authors_with_tabs.tsv diff --git a/lib/active_admin_import/dsl.rb b/lib/active_admin_import/dsl.rb index b3ab05a..bf647a3 100644 --- a/lib/active_admin_import/dsl.rb +++ b/lib/active_admin_import/dsl.rb @@ -94,6 +94,7 @@ def active_admin_import(options = {}, &block) end rescue ActiveRecord::Import::MissingColumnError, NoMethodError, ActiveRecord::StatementInvalid, CSV::MalformedCSVError => e Rails.logger.error(I18n.t('active_admin_import.file_error', message: e.message)) + Rails.logger.error(e.backtrace.join("\n")) flash[:error] = I18n.t('active_admin_import.file_error', message: e.message[0..200]) end redirect_to options[:back] diff --git a/lib/active_admin_import/importer.rb b/lib/active_admin_import/importer.rb index 5f59d2c..0d6ce70 100644 --- a/lib/active_admin_import/importer.rb +++ b/lib/active_admin_import/importer.rb @@ -119,7 +119,7 @@ def detect_csv_options model.csv_options else options[:csv_options] || {} - end.reject { |_, value| value.blank? } + end.reject { |_, value| value.nil? || value == "" } end end end diff --git a/lib/active_admin_import/model.rb b/lib/active_admin_import/model.rb index 6d74927..5927996 100644 --- a/lib/active_admin_import/model.rb +++ b/lib/active_admin_import/model.rb @@ -21,6 +21,10 @@ module CONST application/csv application/vnd.ms-excel application/vnd.msexcel + text/tsv + text/x-tsv + text/tab-separated-values + text/x-tab-separated-values ).freeze end diff --git a/spec/fixtures/files/authors_with_tabs.tsv b/spec/fixtures/files/authors_with_tabs.tsv new file mode 100644 index 0000000..472865b --- /dev/null +++ b/spec/fixtures/files/authors_with_tabs.tsv @@ -0,0 +1,3 @@ +Name Last name Birthday +John Doe 1986-05-01 +Jane Roe 1988-11-16 \ No newline at end of file diff --git a/spec/import_spec.rb b/spec/import_spec.rb index 91c9ee9..88d1861 100644 --- a/spec/import_spec.rb +++ b/spec/import_spec.rb @@ -397,6 +397,19 @@ def upload_file!(name, ext = 'csv') expect(Author.count).to eq(2) end end + + context 'with tab separator' do + let(:options) do + attributes = { csv_options: { col_sep: "\t" } } + { template_object: ActiveAdminImport::Model.new(attributes) } + end + + it 'should import file' do + upload_file!(:authors_with_tabs, 'tsv') + expect(page).to have_content 'Successfully imported 2 authors' + expect(Author.count).to eq(2) + end + end end context 'with callback procs options' do