Class: DatagroutConduit::Transport::JsonRpc

Inherits:
Base
  • Object
show all
Defined in:
lib/datagrout_conduit/transport/jsonrpc.rb

Overview

JSON-RPC over HTTP POST transport. Sends standard JSON-RPC 2.0 requests via HTTP POST.

Instance Attribute Summary

Attributes inherited from Base

#url

Instance Method Summary collapse

Methods inherited from Base

#connect, #connected?, #disconnect, #initialize

Constructor Details

This class inherits a constructor from DatagroutConduit::Transport::Base

Instance Method Details

#send_request(method, params = nil, id: nil) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/datagrout_conduit/transport/jsonrpc.rb', line 8

def send_request(method, params = nil, id: nil)
  ensure_connected!

  request_id = id || next_id
  body = build_jsonrpc_body(method, params, request_id)
  headers = build_headers

  response = @connection.post do |req|
    req.headers = headers
    req.body = JSON.generate(body)
  end

  result = handle_response(response)

  if result == :retry_oauth
    headers = build_headers
    response = @connection.post do |req|
      req.headers = headers
      req.body = JSON.generate(body)
    end
    result = handle_response(response)
    raise AuthError, "OAuth token rejected after refresh" if result == :retry_oauth
  end

  result
end