Sha256: 135f82416d0d37e94630bbdd113a21450183b3f9ed3746cbe3b16fa7ead0371d

Contents?: true

Size: 1.31 KB

Versions: 4

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

require "resend/version"
require "resend/errors"
require "httparty"

module Resend
  # This class is responsible for making the appropriate HTTP calls
  # and raising the specific errors based on the response.
  class Request
    BASE_URL = ENV["RESEND_BASE_URL"] || "https://api.resend.com/"

    attr_accessor :body, :verb

    def initialize(path = "", body = {}, verb = "POST")
      raise if Resend.api_key.nil?

      @path = path
      @body = body
      @verb = verb
      @headers = {
        "Content-Type" => "application/json",
        "Accept" => "application/json",
        "User-Agent" => "resend-ruby:#{Resend::VERSION}",
        "Authorization" => "Bearer #{Resend.api_key}"
      }
    end

    # Performs the HTTP call
    def perform
      options = {
        headers: @headers
      }

      options[:body] = @body.to_json unless @body.empty?
      resp = HTTParty.send(@verb.to_sym, "#{BASE_URL}#{@path}", options)
      resp.transform_keys!(&:to_sym) unless resp.body.empty?
      handle_error!(resp) if resp[:statusCode] && (resp[:statusCode] != 200 || resp[:statusCode] != 201)
      resp
    end

    def handle_error!(resp)
      code = resp[:statusCode]
      body = resp[:message]
      error = Resend::Error::ERRORS[code]
      raise(error.new(body, code)) if error
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
resend-0.13.0 lib/resend/request.rb
resend-0.12.0 lib/resend/request.rb
resend-0.11.0 lib/resend/request.rb
resend-0.10.0 lib/resend/request.rb