ngelx/solidus_import_products

View on GitHub
app/services/solidus_import_products/import.rb

Summary

Maintainability
A
0 mins
Test Coverage
module SolidusImportProducts
  class Import
    attr_accessor :product_imports, :logger

    def initialize(args = { product_imports: nil })
      self.product_imports = args[:product_imports]
      self.logger = SolidusImportProducts::Logger.instance
    end

    def self.call(options = {})
      new(options).call
    end

    def call
      skus_of_products_before_import = Spree::Product.all.map(&:sku)
      parser = product_imports.parse
      col = parser.column_mappings

      product_imports.start
      ActiveRecord::Base.transaction do
        parser.data_rows.each do |row|
          SolidusImportProducts::ProcessRow.call(
            parser: parser,
            product_imports: product_imports,
            row: row,
            col: col,
            skus_of_products_before_import: skus_of_products_before_import
          )
        end
      end

      product_imports.complete
    rescue SolidusImportProducts::Exception::Base => e
      product_imports.failure!
      raise e
    end
  end
end