class VismaEaccounting::APIRequest

Public Class Methods

new(builder: nil) click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 4
def initialize(builder: nil)
  @request_builder = builder
end

Public Instance Methods

delete(params: nil, headers: nil) click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 60
def delete(params: nil, headers: nil)
  validate_token

  begin
    response = self.rest_client.delete do |request|
      configure_request(request: request, params: params, headers: headers)
    end
    parse_response(response)
  rescue => e
    handle_error(e)
  end
end
get(params: nil, headers: nil) click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 47
def get(params: nil, headers: nil)
  validate_token

  begin
    response = self.rest_client.get do |request|
      configure_request(request: request, params: params, headers: headers)
    end
    parse_response(response)
  rescue => e
    handle_error(e)
  end
end
patch(params: nil, headers: nil, body: nil) click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 21
def patch(params: nil, headers: nil, body: nil)
  validate_token

  begin
    response = self.rest_client.patch do |request|
      configure_request(request: request, params: params, headers: headers, body: MultiJson.dump(body))
    end
    parse_response(response)
  rescue => e
    handle_error(e)
  end
end
post(params: nil, headers: nil, body: nil) click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 8
def post(params: nil, headers: nil, body: nil)
  validate_token

  begin
    response = self.rest_client.post do |request|
      configure_request(request: request, params: params, headers: headers, body: MultiJson.dump(body))
    end
    parse_response(response)
  rescue => e
    handle_error(e)
  end
end
put(params: nil, headers: nil, body: nil) click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 34
def put(params: nil, headers: nil, body: nil)
  validate_token

  begin
    response = self.rest_client.put do |request|
      configure_request(request: request, params: params, headers: headers, body: MultiJson.dump(body))
    end
    parse_response(response)
  rescue => e
    handle_error(e)
  end
end

Protected Instance Methods

adapter() click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 101
def adapter
  @request_builder.faraday_adapter
end
api_endpoint() click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 85
def api_endpoint
  @request_builder.api_endpoint
end
api_environment() click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 81
def api_environment
  @request_builder.api_environment
end
api_url() click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 188
def api_url
  base_api_url + @request_builder.path
end
base_api_url() click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 192
def base_api_url
  case @request_builder.api_environment
  when :sandbox
    "https://eaccountingapi-sandbox.test.vismaonline.com/v2/"
  when :production
    "https://eaccountingapi.vismaonline.com/v2/"
  end
end
configure_request(request: nil, params: nil, headers: nil, body: nil) click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 140
def configure_request(request: nil, params: nil, headers: nil, body: nil)
  if request
    request.params.merge!(params) if params
    request.headers['Content-Type'] = 'application/json'
    request.headers.merge!(headers) if headers
    request.body = body if body
    request.options.timeout = self.timeout
    request.options.open_timeout = self.open_timeout
  end
end
handle_error(error) click to toggle source

Helpers

# File lib/visma_eaccounting/api_request.rb, line 111
def handle_error(error)
  error_params = {}

  begin
    if error.is_a?(Faraday::ClientError) && error.response
      error_params[:status_code] = error.response[:status]
      error_params[:raw_body] = error.response[:body]

      parsed_response = MultiJson.load(error.response[:body], symbolize_keys: symbolize_keys)

      if parsed_response
        error_params[:body] = parsed_response

        title_key = symbolize_keys ? :title : "title"
        detail_key = symbolize_keys ? :detail : "detail"

        error_params[:title] = parsed_response[title_key] if parsed_response[title_key]
        error_params[:detail] = parsed_response[detail_key] if parsed_response[detail_key]
      end

    end
  rescue MultiJson::ParseError
  end

  error_to_raise = APIError.new(error.message, error_params)

  raise error_to_raise
end
open_timeout() click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 93
def open_timeout
  @request_builder.open_timeout
end
parse_response(response) click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 163
def parse_response(response)
  parsed_response = nil

  if response.body && !response.body.empty?
    begin
      headers = response.headers
      body = MultiJson.load(response.body, symbolize_keys: symbolize_keys)
      parsed_response = Response.new(headers: headers, body: body)
    rescue MultiJson::ParseError
      error_params = { title: "UNPARSEABLE_RESPONSE", status_code: 500 }
      error = APIError.new("Unparseable response: #{response.body}", error_params)
      raise error
    end
  end

  parsed_response
end
proxy() click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 97
def proxy
  @request_builder.proxy
end
rest_client() click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 151
def rest_client
  client = Faraday.new(self.api_url, proxy: self.proxy, ssl: { version: "TLSv1_2" }) do |faraday|
    faraday.response :raise_error
    faraday.adapter adapter
    if @request_builder.debug
      faraday.response :logger, @request_builder.logger, bodies: true
    end
  end
  client.authorization :Bearer, self.token
  client
end
symbolize_keys() click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 105
def symbolize_keys
  @request_builder.symbolize_keys
end
timeout() click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 89
def timeout
  @request_builder.timeout
end
token() click to toggle source

Convenience accessors

# File lib/visma_eaccounting/api_request.rb, line 77
def token
  @request_builder.token
end
validate_token() click to toggle source
# File lib/visma_eaccounting/api_request.rb, line 181
def validate_token
  token = self.token
  unless token
    raise VismaEaccounting::VismaEaccountingError, "You must set an token prior to making a call"
  end
end