module Superbot::Cloud::Api
Constants
- BASE_URI
- ENDPOINT_MAP
Public Class Methods
request(type, params: {})
click to toggle source
# File lib/superbot/cloud/api.rb, line 36 def self.request(type, params: {}) method, endpoint, required_param = ENDPOINT_MAP[type].values uri = URI.parse([BASE_URI, endpoint, params[required_param] && CGI.escape(params[required_param])].compact.join('/')) request_class = Net::HTTP.const_get(method.to_s.split('_').map(&:capitalize).join('::')) params = params.compact req = case method when :get uri.query = URI.encode_www_form(params) req = request_class.new(uri) when :post_multipart request_class.new(uri, params) else request_class.new(uri).tap { |r| r.set_form_data(params) } end auth_token = ENV['SUPERBOT_TOKEN'] || Superbot::Cloud.credentials&.slice(:username, :token)&.values&.join(':') if auth_token auth_type = ENV['SUPERBOT_TOKEN'] ? 'Bearer' : 'Basic' req['Authorization'] = "#{auth_type} #{Base64.urlsafe_encode64(auth_token)}" end response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https', read_timeout: 300, max_retries: 4) do |http| http.request(req) end parsed_response = response.class.body_permitted? && JSON.parse(response.body, symbolize_names: true) || {} return parsed_response if response.is_a? Net::HTTPSuccess abort parsed_response[:error] end