Sha256: 90b2e262edf4fddef1c10a285d1cda7a50dfa1838d88dc46bbc542688659ead4

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

require 'uri'
require 'net/http'
require 'json'

module Arbetsformedlingen
  module API
    class Request
      Response = KeyStruct.new(:code, :body, :json)

      HEADERS = {
        'Content-Type' => 'application/json',
        'Accept-Language' => 'sv'
      }.freeze

      attr_reader :locale, :base_url

      def initialize(base_url: '', locale: 'sv')
        @base_url = base_url
        @locale = locale
      end

      def get(url, query: {})
        uri = URI("#{base_url}#{url}?#{URI.encode_www_form(query.to_a)}")

        http = Net::HTTP.new(uri.host, uri.port)

        request = Net::HTTP::Get.new(uri)
        request['Content-Type'] = HEADERS['Content-Type']
        request['Accept-Language'] = locale

        response = http.request(request)

        Response.new(
          code: response.code,
          body: response.read_body,
          json: parse_json(response.read_body)
        )
      end

      def parse_json(string)
        JSON.parse(string.to_s)
      rescue JSON::ParserError => _e
        {}
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
arbetsformedlingen-0.3.0 lib/arbetsformedlingen/api/request.rb