Module: Federails::Utils::JsonRequest

Defined in:
lib/federails/utils/json_request.rb

Overview

Simple wrapper to make requests expecting JSON

Defined Under Namespace

Classes: UnhandledResponseStatus

Constant Summary collapse

BASE_HEADERS =
{
  'Content-Type' => 'application/json',
  'Accept'       => 'application/json',
}.freeze

Class Method Summary collapse

Class Method Details

.get_json(url, params: {}, headers: {}, follow_redirects: false, expected_status: 200) ⇒ Object

Makes a GET request and returns a Hash from the parsed body

Parameters:

  • url (String)

    Target URL

  • params (Hash) (defaults to: {})

    Querystring parameters

  • headers (Hash) (defaults to: {})

    Additional headers

  • follow_redirects (Boolean) (defaults to: false)

    Whether to follow redirections

  • expected_status (Integer) (defaults to: 200)

    Expected response status. Will raise a UnhandledResponseStatus when status is different

Returns:

  • The parsed JSON object

Raises:



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/federails/utils/json_request.rb', line 26

def self.get_json(url, params: {}, headers: {}, follow_redirects: false, expected_status: 200)
  headers = BASE_HEADERS.merge headers

  connection = Faraday.new url: url, params: params, headers: headers do |faraday|
    faraday.response :follow_redirects if follow_redirects
    faraday.adapter Faraday.default_adapter
  end

  response = connection.get
  raise UnhandledResponseStatus, "Unhandled status code #{response.status} for GET #{url}" if expected_status && response.status != expected_status

  JSON.parse(response.body)
end