class Arbetsformedlingen::API::Request

API request object

Attributes

base_url[R]
locale[R]

Public Class Methods

new(base_url: '', locale: 'sv') click to toggle source

Initialize request

# File lib/arbetsformedlingen/api/request.rb, line 15
def initialize(base_url: '', locale: 'sv')
  @base_url = base_url
  @locale = locale
end

Public Instance Methods

get(url, query: {}) click to toggle source

Perform GET request @param [String] url to be fetched @param [Hash, Array<Array<#to_s>>] query params @return [Response] response object

# File lib/arbetsformedlingen/api/request.rb, line 24
def get(url, query: {})
  uri = to_uri(url, query: query)

  http = Net::HTTP.new(uri.host, uri.port)
  request = Net::HTTP::Get.new(uri)
  request['Content-Type'] = 'application/json'
  request['Accept-Language'] = locale

  response = http.request(request)
  # AFs APIs somtimes redirects with HTTP 303
  if response.code == '303' && response.header['Location']
    return get(response.header['Location'], query: query)
  end

  Response.new(response, uri)
end
post(url, data: {}) click to toggle source

Perform POST request @param [String] url to be fetched @param [Hash] data params @return [Response] response object

# File lib/arbetsformedlingen/api/request.rb, line 45
def post(url, data: {})
  uri = to_uri(url)

  http = Net::HTTP.new(uri.host, uri.port)
  request = Net::HTTP::Post.new(uri)
  request['Content-Type'] = 'application/json'
  request['Accept-Language'] = locale
  request['cache-control'] = 'no-cache'
  request.body = JSON.dump(data)

  response = http.request(request)

  Response.new(response, uri)
end

Private Instance Methods

to_uri(url, query: {}) click to toggle source
# File lib/arbetsformedlingen/api/request.rb, line 62
def to_uri(url, query: {})
  full_url = URI(url.to_s).absolute ? url : "#{base_url}#{url}"

  URI("#{full_url}?#{URI.encode_www_form(query.to_a)}")
end