Sha256: af451bc3af9e34459e5945a1088005ba2c41b68f7f5f00a90aae17f6feccb283

Contents?: true

Size: 1.42 KB

Versions: 1

Compression:

Stored size: 1.42 KB

Contents

# frozen_string_literal: true

module Mihari
  module Enrichers
    class Base
      include Mixins::Configurable
      include Mixins::Retriable

      include Dry::Monads[:result, :try]

      # @return [Hash]
      attr_reader :options

      def initialize(options: nil)
        @options = options || {}
      end

      #
      # @return [Integer]
      #
      def retry_interval
        options[:retry_interval] || Mihari.config.retry_interval
      end

      #
      # @return [Boolean]
      #
      def retry_exponential_backoff
        options[:retry_exponential_backoff] || Mihari.config.retry_exponential_backoff
      end

      #
      # @return [Integer]
      #
      def retry_times
        options[:retry_times] || Mihari.config.retry_times
      end

      #
      # @return [Integer, nil]
      #
      def timeout
        options[:timeout]
      end

      def query_result(value)
        Try[StandardError] do
          retry_on_error(
            times: retry_times,
            interval: retry_interval,
            exponential_backoff: retry_exponential_backoff
          ) { query value }
        end.to_result
      end

      #
      # @param [String] value
      #
      def query(value)
        raise NotImplementedError, "You must implement #{self.class}##{__method__}"
      end

      class << self
        def inherited(child)
          super
          Mihari.enrichers << child
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mihari-5.5.0 lib/mihari/enrichers/base.rb