Sha256: 4807b5d1b461f945abf9a6ab51f73e0089a7bf8d4756262434e24c12c2ce5a8a

Contents?: true

Size: 1 KB

Versions: 2

Compression:

Stored size: 1 KB

Contents

require 'json'

module MobilizeAmericaClient
  module Request
    API_DOMAIN = 'api.mobilize.us'.freeze
    API_BASE_PATH = '/v1'.freeze

    def get(path:, params: {})
      request(method: :get, path:, params:)
    end

    def post(path:, body:)
      request(method: :post, path:, body:)
    end

    private

    def esc(untrusted)
      CGI.escape(untrusted.to_s)
    end

    def request(method:, path:, params: {}, body: {})
      response = connection.send(method) do |req|
        req.path = "#{API_BASE_PATH}#{path}"
        req.params = params
        req.headers['Content-Type'] = 'application/json'

        unless api_key.nil?
          req.headers['Authorization'] = "Bearer #{api_key}"
        end

        req.body = ::JSON.generate(body) unless body.empty?
      end

      if response.status == 401
        raise MobilizeAmericaClient::UnauthorizedError
      end

      if response.status == 404
        raise MobilizeAmericaClient::NotFoundError
      end

      JSON.parse(response.body)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mobilize-america-client-0.5.1 lib/mobilize_america_client/request.rb
mobilize-america-client-0.5.0 lib/mobilize_america_client/request.rb