active_admin_import 4.1.0 → 4.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +5 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile +1 -1
- data/lib/active_admin_import/import_result.rb +4 -1
- data/lib/active_admin_import/importer.rb +14 -8
- data/lib/active_admin_import/version.rb +1 -1
- data/spec/fixtures/files/authors.csv +3 -3
- data/spec/import_result_spec.rb +11 -10
- data/spec/import_spec.rb +21 -8
- data/tasks/test.rake +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c8561a4c1622b426312994d56e93252fa2d6c96bd1d0e085e2a8873c3283d4b
|
4
|
+
data.tar.gz: 96a38edf7c6e7c7a787ba216b95922ed2ac7fe25d89b2d992617ad40b5209569
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a6224751a88d24ff8ceda5d690a77990c893cd1a4d5bf3a0041d1002bb946d9a54a3f0d0a4294e9bab901bb3700692431066cbcd39456763335f7eea902e039
|
7
|
+
data.tar.gz: 110c86f4845a57550024732f881ad8afd9d14ffd569907972e5a0a0c94249fa1a3caa0dbe2cb3f10d266e8b16cb0806dc279d331adeaf5209cf658675faa1113
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
@@ -33,7 +33,10 @@ module ActiveAdminImport
|
|
33
33
|
limit = options[:limit] || failed.count
|
34
34
|
failed.first(limit).map do |record|
|
35
35
|
errors = record.errors
|
36
|
-
|
36
|
+
failed_values = errors.keys.map do |key|
|
37
|
+
key == :base ? nil : record.public_send(key)
|
38
|
+
end
|
39
|
+
errors.full_messages.zip(failed_values).map { |ms| ms.compact.join(' - ') }.join(', ')
|
37
40
|
end.join(' ; ')
|
38
41
|
end
|
39
42
|
end
|
@@ -70,7 +70,7 @@ module ActiveAdminImport
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
# Use
|
73
|
+
# Use this method when CSV file contains unnecessary columns
|
74
74
|
#
|
75
75
|
# Example:
|
76
76
|
#
|
@@ -81,16 +81,22 @@ module ActiveAdminImport
|
|
81
81
|
# end
|
82
82
|
#
|
83
83
|
def batch_slice_columns(slice_columns)
|
84
|
-
use_indexes
|
85
|
-
|
86
|
-
|
84
|
+
# Only set @use_indexes for the first batch so that @use_indexes are in correct
|
85
|
+
# position for subsequent batches
|
86
|
+
unless defined?(@use_indexes)
|
87
|
+
@use_indexes = []
|
88
|
+
headers.values.each_with_index do |val, index|
|
89
|
+
@use_indexes << index if val.in?(slice_columns)
|
90
|
+
end
|
91
|
+
return csv_lines if @use_indexes.empty?
|
92
|
+
|
93
|
+
# slice CSV headers
|
94
|
+
@headers = headers.to_a.values_at(*@use_indexes).to_h
|
87
95
|
end
|
88
|
-
|
89
|
-
# slice CSV headers
|
90
|
-
@headers = headers.to_a.values_at(*use_indexes).to_h
|
96
|
+
|
91
97
|
# slice CSV values
|
92
98
|
csv_lines.map! do |line|
|
93
|
-
line.values_at(
|
99
|
+
line.values_at(*@use_indexes)
|
94
100
|
end
|
95
101
|
end
|
96
102
|
|
@@ -1,3 +1,3 @@
|
|
1
|
-
Name,Last name
|
2
|
-
|
3
|
-
|
1
|
+
Birthday,Name,Last name
|
2
|
+
1986-05-01,John,Doe
|
3
|
+
1988-11-16,Jane,Roe
|
data/spec/import_result_spec.rb
CHANGED
@@ -5,17 +5,18 @@ describe ActiveAdminImport::ImportResult do
|
|
5
5
|
context 'failed_message' do
|
6
6
|
let(:import_result) { ActiveAdminImport::ImportResult.new }
|
7
7
|
|
8
|
-
before do
|
9
|
-
Author.create(name: 'John', last_name: 'Doe')
|
10
|
-
Author.create(name: 'Jane', last_name: 'Roe')
|
11
8
|
|
9
|
+
let(:failed_instances) do
|
10
|
+
[
|
11
|
+
Author.new(last_name: 'Doe').tap {|r| r.errors.add(:last_name, :taken) },
|
12
|
+
Author.new(name: "", last_name: 'Doe').tap {|r| r.errors.add(:name, :blank); r.errors.add(:last_name, :taken) },
|
13
|
+
Author.new.tap {|r| r.errors.add(:base, 'custom') }
|
14
|
+
]
|
15
|
+
end
|
16
|
+
|
17
|
+
before do
|
12
18
|
@result = double \
|
13
|
-
failed_instances:
|
14
|
-
# {:last_name=>["has already been taken"]}
|
15
|
-
Author.create(name: 'Jim', last_name: 'Doe'),
|
16
|
-
# {:name=>["can't be blank"], :last_name=>["has already been taken"]}
|
17
|
-
Author.create(name: nil, last_name: 'Doe')
|
18
|
-
]
|
19
|
+
failed_instances: failed_instances
|
19
20
|
end
|
20
21
|
|
21
22
|
it 'should work without any failed instances' do
|
@@ -26,7 +27,7 @@ describe ActiveAdminImport::ImportResult do
|
|
26
27
|
import_result.add(@result, 4)
|
27
28
|
expect(import_result.failed_message)
|
28
29
|
.to eq(
|
29
|
-
"Last name has already been taken - Doe ; Name can't be blank - , Last name has already been taken - Doe"
|
30
|
+
"Last name has already been taken - Doe ; Name can't be blank - , Last name has already been taken - Doe ; custom"
|
30
31
|
)
|
31
32
|
end
|
32
33
|
|
data/spec/import_spec.rb
CHANGED
@@ -434,11 +434,14 @@ describe 'import', type: :feature do
|
|
434
434
|
end
|
435
435
|
|
436
436
|
context "with slice_columns option" do
|
437
|
+
let(:batch_size) { 2 }
|
438
|
+
|
437
439
|
before do
|
438
440
|
add_author_resource template_object: ActiveAdminImport::Model.new,
|
439
441
|
before_batch_import: lambda { |importer|
|
440
442
|
importer.batch_slice_columns(slice_columns)
|
441
|
-
}
|
443
|
+
},
|
444
|
+
batch_size: batch_size
|
442
445
|
visit "/admin/authors/import"
|
443
446
|
upload_file!(:authors)
|
444
447
|
end
|
@@ -446,13 +449,23 @@ describe 'import', type: :feature do
|
|
446
449
|
context "slice last column and superfluous column" do
|
447
450
|
let(:slice_columns) { %w(name last_name not_existing_column) }
|
448
451
|
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
[
|
453
|
-
|
454
|
-
|
455
|
-
|
452
|
+
shared_examples_for "birthday column removed" do
|
453
|
+
it "should not fill `birthday` column" do
|
454
|
+
expect(Author.pluck(:name, :last_name, :birthday)).to match_array(
|
455
|
+
[
|
456
|
+
["Jane", "Roe", nil],
|
457
|
+
["John", "Doe", nil]
|
458
|
+
]
|
459
|
+
)
|
460
|
+
end
|
461
|
+
end
|
462
|
+
|
463
|
+
it_behaves_like "birthday column removed"
|
464
|
+
|
465
|
+
context "when doing more than one batch" do
|
466
|
+
let(:batch_size) { 1 }
|
467
|
+
|
468
|
+
it_behaves_like "birthday column removed"
|
456
469
|
end
|
457
470
|
end
|
458
471
|
|
data/tasks/test.rake
CHANGED
@@ -3,5 +3,5 @@ desc 'Creates a test rails app for the specs to run against'
|
|
3
3
|
task :setup do
|
4
4
|
require 'rails/version'
|
5
5
|
system('mkdir spec/rails') unless File.exist?('spec/rails')
|
6
|
-
system "bundle exec rails new spec/rails/rails-#{Rails::VERSION::STRING} -m spec/support/rails_template.rb --skip-spring --skip-turbolinks"
|
6
|
+
system "bundle exec rails new spec/rails/rails-#{Rails::VERSION::STRING} -m spec/support/rails_template.rb --skip-spring --skip-turbolinks --skip-bootsnap"
|
7
7
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_admin_import
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.1.
|
4
|
+
version: 4.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Fedoronchuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord-import
|
@@ -148,8 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
148
|
- !ruby/object:Gem::Version
|
149
149
|
version: '0'
|
150
150
|
requirements: []
|
151
|
-
|
152
|
-
rubygems_version: 2.7.7
|
151
|
+
rubygems_version: 3.0.6
|
153
152
|
signing_key:
|
154
153
|
specification_version: 4
|
155
154
|
summary: ActiveAdmin import based on activerecord-import gem.
|