Module: ExternalServices::Api

Defined in:
lib/external_services/api.rb

Defined Under Namespace

Classes: Error

Instance Method Summary collapse

Instance Method Details

#api_keyObject



31
32
33
# File 'lib/external_services/api.rb', line 31

def api_key
  ENV["#{to_s.demodulize.upcase}_API_KEY"]
end

#api_urlObject



27
28
29
# File 'lib/external_services/api.rb', line 27

def api_url
  ENV["#{to_s.demodulize.upcase}_API_URL"]
end

#auth_headerObject



35
36
37
# File 'lib/external_services/api.rb', line 35

def auth_header
  'Authorization'
end

#connectionObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/external_services/api.rb', line 39

def connection
  return if api_url.blank?

  @connection ||= Faraday.new(url: api_url) do |f|
    f.request  :json
    f.response :json

    f.adapter  :net_http

    f.headers['Content-Type'] = 'application/json'
    f.headers['Accept']       = 'application/json'
    f.headers[auth_header]    = api_key
  end
end

#delete(path, params: {}, **_kwargs) ⇒ Object



66
67
68
# File 'lib/external_services/api.rb', line 66

def delete(path, params: {}, **_kwargs)
  request(:delete, path, params)
end

#fake?Boolean

Returns:

  • (Boolean)


74
75
76
# File 'lib/external_services/api.rb', line 74

def fake?
  !connection
end

#fake_response_body(method, _path, _params = {}) ⇒ Object



78
79
80
# File 'lib/external_services/api.rb', line 78

def fake_response_body(method, _path, _params = {})
  (method == :post ? { 'id' => SecureRandom.hex } : {})
end

#get(path, params: {}, **_kwargs) ⇒ Object



54
55
56
# File 'lib/external_services/api.rb', line 54

def get(path, params: {}, **_kwargs)
  request(:get, path, params)
end

#patch(path, body:, params: {}, **_kwargs) ⇒ Object



70
71
72
# File 'lib/external_services/api.rb', line 70

def patch(path, body:, params: {}, **_kwargs)
  request(:patch, path, params, body)
end

#post(path, body:, params: {}, **_kwargs) ⇒ Object



58
59
60
# File 'lib/external_services/api.rb', line 58

def post(path, body:, params: {}, **_kwargs)
  request(:post, path, params, body)
end

#put(path, body:, params: {}, **_kwargs) ⇒ Object



62
63
64
# File 'lib/external_services/api.rb', line 62

def put(path, body:, params: {}, **_kwargs)
  request(:put, path, params, body)
end

#request(method, path, params = {}, body = nil) ⇒ Object

Raises:



82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/external_services/api.rb', line 82

def request(method, path, params = {}, body = nil)
  resp = if fake?
           Struct.new(:success?, :body, :headers).new(true, fake_response_body(method, path, params), {})
         else
           connection.send(method, path, body) do |req|
             req.params = params
           end
         end

  raise Error, resp unless resp.blank? || resp.success?

  resp
end