Sha256: f56366268f7e4312e19c0495f8883010a2708e4b971cc0d52e042ad5397065d1

Contents?: true

Size: 1014 Bytes

Versions: 14

Compression:

Stored size: 1014 Bytes

Contents

# frozen_string_literal: true

require "active_support/concern"

module Revertable
  extend ActiveSupport::Concern

  def revert!
    undo_all

    import.reverted!
  rescue => e
    import.result_message = "Exception: #{e.message}"
    Rails.logger.error "Importo exception: #{e.message} backtrace #{e.backtrace.join(";")}"
    import.failure!
  end

  private

  def undo_all
    revertable_results = import.results.select { |result| result["state"] == "success" }

    revertable_results.each do |revertable_result|
      next unless revertable_result["state"] == "success"

      begin
        undo(revertable_result["class"], revertable_result["id"], cells_from_row(revertable_result["row"]))
        revertable_result["state"] = "reverted"
        revertable_result.delete("message")
        revertable_result.delete("errors")
      rescue => e
        result["message"] = "Not reverted: #{e.message}"
      end
    end
  end

  def undo_row(klass, id, _row)
    klass.constantize.find(id).destroy
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
importo-3.0.22 app/importers/concerns/revertable.rb
importo-3.0.21 app/importers/concerns/revertable.rb
importo-3.0.20 app/importers/concerns/revertable.rb
importo-3.0.19 app/importers/concerns/revertable.rb
importo-3.0.18 app/importers/concerns/revertable.rb
importo-3.0.17 app/importers/concerns/revertable.rb
importo-3.0.16 app/importers/concerns/revertable.rb
importo-3.0.15 app/importers/concerns/revertable.rb
importo-3.0.14 app/importers/concerns/revertable.rb
importo-3.0.13 app/importers/concerns/revertable.rb
importo-3.0.12 app/importers/concerns/revertable.rb
importo-3.0.11 app/importers/concerns/revertable.rb
importo-3.0.10 app/importers/concerns/revertable.rb
importo-3.0.9 app/importers/concerns/revertable.rb