Sha256: 1f0d6cfadd012acbe8c5555014e066f8d2a345b783c56a1a7f91612ad3a25ff7

Contents?: true

Size: 863 Bytes

Versions: 3

Compression:

Stored size: 863 Bytes

Contents

# frozen_string_literal: true

module PubSubModelSync
  class Base
    delegate :config, :log, :debug?, to: self

    class << self
      def config
        PubSubModelSync::Config
      end

      def log(message, kind = :info)
        config.log message, kind
      end

      def debug?
        config.debug
      end
    end

    # @param errors (Array(Class|String))
    def retry_error(errors, qty: 2, &block)
      retries ||= 0
      block.call
    rescue => e
      retries += 1
      res = errors.find { |e_type| match_error?(e, e_type) }
      raise if !res || retries > qty

      sleep(qty * 0.1) && retry
    end

    private

    # @param error (Exception)
    # @param error_type (Class|String)
    def match_error?(error, error_type)
      error_type.is_a?(String) ? error.message.include?(error_type) : error.is_a?(error_type)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
pub_sub_model_sync-1.0.beta2 lib/pub_sub_model_sync/base.rb
pub_sub_model_sync-1.0.beta1 lib/pub_sub_model_sync/base.rb
pub_sub_model_sync-1.0.beta lib/pub_sub_model_sync/base.rb