Class: ComplyanceSDK::Onboarding::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/complyance_sdk/onboarding/client.rb

Constant Summary collapse

PATH =
'/unified-onboarding/api/onboard'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key:, base_url:, timeout: 30) ⇒ Client

Returns a new instance of Client.

Raises:

  • (ArgumentError)


14
15
16
17
18
19
20
21
# File 'lib/complyance_sdk/onboarding/client.rb', line 14

def initialize(api_key:, base_url:, timeout: 30)
  @api_key = api_key.to_s.strip
  @base_url = base_url.to_s.strip
  @timeout = timeout

  raise ArgumentError, 'api_key is required' if @api_key.empty?
  raise ArgumentError, 'base_url is required' if @base_url.empty?
end

Instance Attribute Details

#api_keyObject (readonly)

Returns the value of attribute api_key.



12
13
14
# File 'lib/complyance_sdk/onboarding/client.rb', line 12

def api_key
  @api_key
end

#base_urlObject (readonly)

Returns the value of attribute base_url.



12
13
14
# File 'lib/complyance_sdk/onboarding/client.rb', line 12

def base_url
  @base_url
end

#timeoutObject (readonly)

Returns the value of attribute timeout.



12
13
14
# File 'lib/complyance_sdk/onboarding/client.rb', line 12

def timeout
  @timeout
end

Instance Method Details

#create(payload, idempotency_key: nil) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/complyance_sdk/onboarding/client.rb', line 23

def create(payload, idempotency_key: nil)
  uri = URI.parse(service_url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = uri.scheme == 'https'
  http.read_timeout = timeout
  http.open_timeout = timeout

  request = Net::HTTP::Post.new(uri.request_uri)
  request['Accept'] = 'application/json'
  request['Content-Type'] = 'application/json'
  request['Authorization'] = "Bearer #{api_key}"
  request['Idempotency-Key'] = idempotency_key.to_s.strip if idempotency_key
  request.body = payload.to_json

  response = http.request(request)
  body = response.body.to_s.empty? ? {} : JSON.parse(response.body)
  return body.merge('httpStatus' => response.code.to_i) if response.code.to_i.between?(200, 299) || [422].include?(response.code.to_i)

  raise "Onboarding request failed with status #{response.code}: #{response.body}"
rescue JSON::ParserError
  raise "Onboarding request returned invalid JSON: #{response.body}"
end