8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'app/services/spree/sample_data/import_runner.rb', line 8
def call(csv_path:, import_class:)
store = Spree::Store.default
admin = Spree.admin_user_class.first
raise 'No admin user found. Please run seeds first.' unless admin
import = import_class.new(
owner: store,
user: admin
)
import.number = import.generate_permalink(import_class)
import.attachment.attach(
io: File.open(csv_path),
filename: File.basename(csv_path),
content_type: 'text/csv'
)
import.save!(validate: false)
import.update_columns(status: 'processing')
import.create_mappings
row_number = 0
failed = 0
::CSV.foreach(csv_path, headers: true) do |csv_row|
row_number += 1
import_row = import.rows.create!(
row_number: row_number,
data: csv_row.to_h.to_json,
status: 'pending'
)
begin
import_row.process!
rescue StandardError => e
failed += 1
puts "\n Warning: Row #{row_number} failed: #{e.message}"
end
print '.' if (row_number % 10).zero?
end
import.update!(status: 'completed')
puts "\n Processed #{row_number} rows (#{failed} failed)"
end
|