Sha256: 68d4ceec0ba0f9c7e20bbcfb7c1bb2e90b08549ee2e893f6e4f28357e695d062

Contents?: true

Size: 1.58 KB

Versions: 7

Compression:

Stored size: 1.58 KB

Contents

require_relative 'fetchers/file'
require_relative 'fetchers/consul'
require_relative 'fetchers/consul_secure'

module Gorynich
  class Fetcher
    attr_reader :fetcher, :namespace, :cache_expiration

    #
    # Create instance of fetcher
    #
    # @param [Object] fetcher data source
    # @param [String, Symbol] namespace cache namespace
    # @param [Integer] cache_expiration how long your cache will be alive
    #
    def initialize(fetcher: nil, namespace: nil, cache_expiration: nil)
      @fetcher = fetcher || Gorynich.configuration.fetcher
      @namespace = namespace || Gorynich.configuration.namespace
      @cache_expiration = cache_expiration || Gorynich.configuration.cache_expiration
    end

    #
    # Load data from source
    #
    # @return [Hash]
    #
    def fetch
      cfg = Gorynich.configuration.cache.fetch(
        cache_key, expires_in: @cache_expiration.seconds, namespace: @namespace
      ) do
        if @fetcher.nil?
          {}
        elsif @fetcher.is_a?(Array)
          result = {}
          @fetcher.each do |f|
            result =
              begin
                f.fetch
              rescue ::StandardError
                {}
              end
            break unless result.empty?
          end
          result
        else
          @fetcher.fetch
        end
      end

      raise Error, 'Config is empty' if cfg.empty?

      cfg.deep_transform_keys(&:downcase)
    end

    #
    # Delete cache
    #
    def reset
      Gorynich.configuration.cache.delete(cache_key)
    end

    private

    def cache_key
      %i[gorynich fetcher fetch]
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
gorynich-1.3.6.289376 lib/gorynich/fetcher.rb
gorynich-1.3.5.288811 lib/gorynich/fetcher.rb
gorynich-1.3.4.273062 lib/gorynich/fetcher.rb
gorynich-1.3.3.231946 lib/gorynich/fetcher.rb
gorynich-1.3.2.231715 lib/gorynich/fetcher.rb
gorynich-1.3.1.213701 lib/gorynich/fetcher.rb
gorynich-1.3.0.213297 lib/gorynich/fetcher.rb