Sha256: 634cfd364f975b456bd3b9911739712ddf720701c10c80b04acb04de410a73df

Contents?: true

Size: 1.31 KB

Versions: 1

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

module LoopsSdk
  class Base
    class << self
      private

      def handle_response(response)
        case response.status
        when 200
          JSON.parse(response.body)
        when 429
          limit = response.headers["x-ratelimit-limit"]
          remaining = response.headers["x-ratelimit-remaining"]
          raise RateLimitError.new(limit, remaining)
        when 400, 404, 405, 409, 500
          raise APIError.new(response.status, response.body)
        else
          raise APIError.new(response.status, "Unexpected error occurred")
        end
      end

      def make_request(method, path, params = {}, body = nil)
        response = LoopsSdk.configuration.connection.send(method, path, params) do |req|
          req.body = body.to_json if body
        end
        handle_response(response)
      end
    end
  end

  class RateLimitError < StandardError
    attr_reader :limit, :remaining

    def initialize(limit, remaining)
      @limit = limit
      @remaining = remaining
      super("Rate limit of #{limit} requests per second exceeded.")
    end
  end

  class APIError < StandardError
    attr_reader :status, :body

    def initialize(status, body)
      @status = status
      @body = body
      super("API request failed with status #{status}: #{body}")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
loops_sdk-0.2.0 lib/loops_sdk/base.rb