Sha256: 870b4342b8ada33083a9e94e22c8aad588f3df0351e98ddcd597e09e7036010c

Contents?: true

Size: 1.41 KB

Versions: 3

Compression:

Stored size: 1.41 KB

Contents

require_relative "preconditions"
require_relative "result"
require_relative "errors"

module Freno
  class Client
    class Request

      include Freno::Client::Preconditions

      attr_reader :faraday, :args, :options
      attr_reader :raise_on_timeout

      def self.perform(**kwargs)
        new(kwargs).perform
      end

      def initialize(**kwargs)
        @args    = kwargs
        @faraday = kwargs.delete(:faraday) || nil
        @options = kwargs.delete(:options) || Hash.new

        @raise_on_timeout = options.fetch(:raise_on_timeout, true)
        @verb = options.fetch(:verb, :head)
      end

      def perform
        response = request(verb, path)
        process_response(response)
      rescue Faraday::TimeoutError => ex
        raise Freno::Error.new(ex) if raise_on_timeout
        Result.from_meaning(:request_timeout)
      rescue => ex
        raise Freno::Error.new(ex)
      end

      protected

      def request(verb, path)
        faraday.send(verb, path)
      end

      def path
        @path || begin
          raise NotImplementedError("must be overriden in specific requests, or memoized in @path")
        end
      end

      def verb
        @verb || begin
          raise NotImplementedError("must be overriden in specific requests, or memoized in @verb")
        end
      end

      def process_response(response)
        Result.from_faraday_response(response)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
freno-client-0.7.0 lib/freno/client/request.rb
freno-client-0.6.0 lib/freno/client/request.rb
freno-client-0.4.0 lib/freno/client/request.rb