Sha256: ad7d1864c53f07e48e49ffe4727e62bbfea0765b578512b0678e2119dc58c6c8

Contents?: true

Size: 1.67 KB

Versions: 1

Compression:

Stored size: 1.67 KB

Contents

# frozen_string_literal: true

module Dendreo
  class Request
    attr_accessor :errors, :data

    def initialize(base_url:, api_key:)
      @url = base_url
      @api_key = api_key
      @errors = []
      @form_data = nil
      @url_data = nil
      @request = nil
    end

    def call(http_method:, endpoint:, args: {})
      update_data(args)
      handle_call_errors(http_method, endpoint, args)
      execute(
        http_method,
        Requests::Url.new(@url, endpoint, @url_data, @api_key).complete_url,
        @form_data,
      )
    end

    private

    def update_data(args)
      @form_data = args[:form_data] || []
      @url_data = args[:url_data] || []
    end

    def execute(http_method, url, options = {})
      @request = RestClient::Request.execute(
        url: url,
        method: http_method,
        payload: options,
      )
      response_json(@request)
    rescue SocketError => e
      errors << Requests::Error.new('Veuillez renseigner une url ex: https://pro.dendreo.com/my_company/api')
    rescue RestClient::ExceptionWithResponse => e
      response_json(e.response)
    end

    def response_json(result)
      JSON.parse(result == '' ? '[{}]' : result)
    end

    def handle_call_errors(http_method, endpoint, args = {})
      errors << Requests::Error.new(
        'Veuillez renseigner une méthode de requête ex: :post, :get, :delete'
      ) unless http_method

      errors << Requests::Error.new(
        'Veuillez renseigner une méthode de requête ex: :participants'
      ) unless endpoint

      errors << Requests::Error.new(
        'La data est vide sur une requête :post'
      ) if http_method == :post && args[:form_data].empty?
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
Dendreo-1.1.1 lib/dendreo/request.rb