Sha256: e81a57d81e5ec7c3debcd895dc6f7e524905c0b9d1d6d2c3ec90812b7248aa89

Contents?: true

Size: 1.53 KB

Versions: 6

Compression:

Stored size: 1.53 KB

Contents

require 'faraday'

module Determinator
  module Retrieve

    class HttpRetriever
      def initialize(connection:)
        raise ArgumentError, "client must be a Faraday::Connection" unless connection.is_a?(Faraday::Connection)
        @connection = connection
      end

      def retrieve(name)
        before_hook
        response = @connection.get("/features/#{name}")
        after_hook(response.status)
        return Determinator::Serializers::JSON.load(response.body) if response.status == 200
        return MissingResponse.new if response.status == 404
      rescue => e
        Determinator.notice_error(e)
        after_hook(500, e)
        ErrorResponse.new
      end

      # Returns a feature name given a actor-tracking url. Used so we are able
      # to expire a cache using a feature name given an event url.
      #
      # Not intended to be generic, and makes no guarantees about support for
      # alternative url schemes.
      #
      # @param url [String] a actor tracking url
      # @return [String, nil] a feature name or nil
      def get_name(url)
        (url.match('features\/(.*)\z') || [])[1]
      end

      def before_retrieve(&block)
        @before_retrieve = block
      end

      def after_retrieve(&block)
        @after_retrieve = block
      end

      private

      def after_hook(status, error = nil)
        return unless @after_retrieve

        @after_retrieve.call(status, error)
      end

      def before_hook
        return unless @before_retrieve

        @before_retrieve.call
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
determinator-2.9.3 lib/determinator/retrieve/http_retriever.rb
determinator-2.9.2 lib/determinator/retrieve/http_retriever.rb
determinator-2.9.1 lib/determinator/retrieve/http_retriever.rb
determinator-2.9.0 lib/determinator/retrieve/http_retriever.rb
determinator-2.8.0 lib/determinator/retrieve/http_retriever.rb
determinator-2.7.1 lib/determinator/retrieve/http_retriever.rb