partydrone/connect-sdk-ruby

View on GitHub
lib/op_connect/connection.rb

Summary

Maintainability
A
0 mins
Test Coverage
module OpConnect
  # Network layer for API clients.
  #
  module Connection
    # Make an HTTP GET request.
    #
    # @param url [String] The path, relative to {#api_endpoint}.
    # @param params [Hash] Query parameters for the request.
    # @param headers [Hash] Header params for the request.
    #
    # @return [Faraday::Response]
    #
    def get(url, params: {}, headers: {})
      request :get, url, params, headers
    end

    # Make an HTTP POST request.
    #
    # @param url [String] The path, relative to {#api_endpoint}.
    # @param body [Hash] Body params for the request.
    # @param headers [Hash] Header params for the request.
    #
    # @return [Faraday::Response]
    #
    def post(url, body:, headers: {})
      request :post, url, body, headers
    end

    # Make an HTTP PUT request.
    #
    # @param url [String] The path, relative to {#api_endpoint}.
    # @param body [Hash] Body params for the request.
    # @param headers [Hash] Header params for the request.
    #
    # @return [Faraday::Response]
    #
    def put(url, body:, headers: {})
      request :put, url, body, headers
    end

    # Make an HTTP PATCH request.
    #
    # @param url [String] The path, relative to {#api_endpoint}.
    # @param body [Hash] Body params for the request.
    # @param headers [Hash] Header params for the request.
    #
    # @return [Faraday::Response]
    #
    def patch(url, body:, headers: {})
      request :patch, url, body, headers
    end

    # Make an HTTP DELETE request.
    #
    # @param url [String] The path, relative to {#api_endpoint}.
    # @param params [Hash] Query params for the request.
    # @param headers [Hash] Header params for the request.
    #
    # @return [Faraday::Response]
    #
    def delete(url, params: {}, headers: {})
      request :delete, url, params, headers
    end

    # Connection object for the 1Password Connect API.
    #
    # @return [Faraday::Client]
    #
    def connection
      @connection ||= Faraday.new(api_endpoint) do |http|
        http.headers[:user_agent] = user_agent

        http.request :authorization, :Bearer, access_token
        http.request :json

        http.use OpConnect::Response::RaiseError

        http.response :dates
        http.response :json, content_type: "application/json"

        http.adapter adapter, @stubs
      end
    end

    # Response for the last HTTP request.
    #
    # @return [Faraday::Response]
    #
    def last_response
      @last_response if defined? @last_response
    end

    private

    def request(method, path, data, headers = {})
      @last_response = response = connection.send(method, path, data, headers)
      response
    rescue OpConnect::Error => error
      @last_response = nil
      raise error
    end
  end
end