module AMA::Entity::Mapper::Mixin::SuppressionSupport

Special module with method for playing with error suppression

Public Instance Methods

successful(enumerator, error = StandardError, ctx = nil) { |*args| ... } click to toggle source

Enumerates elements in enumerator, applying block to each one, returning result or suppressing specified error. If no element has succeeded, raises last error.

@param [Enumerator] enumerator @param [Class<? extends StandardError>] error @param [AMA::Entity::Mapper::Context] ctx

# File lib/ama-entity-mapper/mixin/suppression_support.rb, line 20
def successful(enumerator, error = StandardError, ctx = nil)
  suppressed = []
  enumerator.each do |*args|
    begin
      return yield(*args)
    rescue error => e
      ctx.logger.debug("#{e.class} raised: #{e.message}") if ctx
      suppressed.push(e)
    end
  end
  compliance_error('Empty enumerator passed') if suppressed.empty?
  raise suppressed.last
end