Sha256: a273966ef54619e09b00465ed7234cb96d316c9fbe967f594420324139eb3658

Contents?: true

Size: 1.13 KB

Versions: 4

Compression:

Stored size: 1.13 KB

Contents

module Lev

  class ErrorTransferer

    def self.transfer(source, target_routine, input_mapper, fail_if_errors=false)
      case source
      when ActiveRecord::Base, Lev::Paramifier
        source.errors.each do |error|
          target_routine.nonfatal_error(
            code: error.type,
            data: {
              model: source,
              attribute: error.attribute
            },
            kind: :activerecord,
            message: error.message,
            offending_inputs: input_mapper.map(error.attribute)
          )
        end
      when Lev::Errors
        source.each do |error|
          target_routine.nonfatal_error(
            code: error.code,
            data: error.data,
            kind: error.kind,
            message: error.message,
            offending_inputs: input_mapper.map(error.offending_inputs)
          )
        end
      else
        raise Exception
      end

      # We add nonfatal errors above and then have this call here so that all
      # errors can be transferred before we freak out.
      throw :fatal_errors_encountered if target_routine.errors? && fail_if_errors
    end

  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
lev-13.0.0 lib/lev/error_transferer.rb
lev-12.1.0 lib/lev/error_transferer.rb
lev-12.0.0 lib/lev/error_transferer.rb
lev-11.0.0 lib/lev/error_transferer.rb