# frozen_string_literal: true require "http" require "qismo/operations" module Qismo # # Qismo client object # # @!attribute app_id [String] # @!attribute secret_key [String] # @!attribute base_url [String] # @!attribute admin_email [String] class Client # @!parse # include Qismo::Helpers::BaseHelper include Qismo::Helpers::BaseHelper # @!parse # include Qismo::Operations include Qismo::Operations # @return [String] default base url constant DEFAULT_BASE_URL = "https://multichannel.qiscus.com" attr_accessor :app_id, :secret_key, :base_url, :admin_email, :proxy # # Initialize Qismo client # # @param options [Hash] # @option options [String] :app_id # @option options [String] :secret_key # @option options [String] :base_url # def initialize(options = {}) options = options.compact options[:base_url] = DEFAULT_BASE_URL if options[:base_url].nil? options.each do |key, value| instance_variable_set("@#{key}", value) end if @admin_email.nil? && !@app_id.nil? @admin_email = "#{app_id}_admin@qismo.com" end end # # Call HTTP request raw # # @param method [String] # @param url [String] # @param options [Hash] # @option options [Hash] :headers # @option options [Hash] :params # @option options [Hash] :json # # @return [Response] # def raw_request(method, url, options = {}) resp = if Qismo.client.proxy.nil? HTTP.request(method, url, options) else proxy = Qismo.client.proxy proxy_args = [proxy[:host], proxy[:port], proxy[:username], proxy[:password]] HTTP.via(*proxy_args).request(method, url, options) end resp = Response.new(resp) resp.raise_for_error resp end # # Do HTTP request # # @param method [String] # @param path [String] # @param options [Hash] # @option options [Hash] :params # @option options [Hash] :json # @options options [Hash] :headers # # @return [Response] # def request(method, path, options = {}) url = Qismo.client.base_url + path if !options[:headers].nil? && options[:headers].is_a?(Hash) && !options[:headers][:authorization].nil? options[:header].merge({ qiscus_app_id: Qismo.client.app_id, qiscus_secret_key: Qismo.client.secret_key, }) else options[:headers] = { qiscus_app_id: Qismo.client.app_id, qiscus_secret_key: Qismo.client.secret_key, } end raw_request(method, url, options) end # # Do HTTP request using GET method # # @param path [String] # @param params [Hash] # # @return [Response] # def get(path, params = {}) request(:get, path, params: params) end # # Do HTTP request using POST method # # @param path [String] # @param body [Hash] # # @return [Response] # def post(path, body = {}) request(:post, path, json: body) end end end