Class: ActiveRecordApi::Request::Connection

Inherits:
Credentials
  • Object
show all
Defined in:
lib/active_record_api/request/connection.rb

Direct Known Subclasses

Methods

Instance Attribute Summary collapse

Attributes inherited from Credentials

#email, #headers, #host, #password, #token, #token_path

Instance Method Summary collapse

Methods inherited from Credentials

#config, #credentials, #credentials_config

Instance Attribute Details

#cache_storeObject

Returns the value of attribute cache_store.



8
9
10
# File 'lib/active_record_api/request/connection.rb', line 8

def cache_store
  @cache_store
end

#debugObject

Returns the value of attribute debug.



8
9
10
# File 'lib/active_record_api/request/connection.rb', line 8

def debug
  @debug
end

#full_urlObject



35
36
37
# File 'lib/active_record_api/request/connection.rb', line 35

def full_url
  @full_url ||= "#{strip_trailing_slash(host)}#{strip_double_slash("/#{strip_trailing_slash(path)}")}"
end

#pathObject

Returns the value of attribute path.



8
9
10
# File 'lib/active_record_api/request/connection.rb', line 8

def path
  @path
end

#timeoutObject

Returns the value of attribute timeout.



8
9
10
# File 'lib/active_record_api/request/connection.rb', line 8

def timeout
  @timeout
end

Instance Method Details

#authenticated_connectionObject



11
12
13
14
# File 'lib/active_record_api/request/connection.rb', line 11

def authenticated_connection
  connection.headers = connection.headers.merge(headers)
  connection
end

#connectionObject



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/active_record_api/request/connection.rb', line 16

def connection
  @connection ||= Faraday.new do |builder|
    builder.options[:open_timeout] = 2
    builder.options[:timeout] = timeout || 5
    builder.request :json
    builder.request :url_encoded
    builder.request :retry, max: 5, interval: 0.05, interval_randomness: 0.5, backoff_factor: 2, exceptions: [ActiveRecordApi::Request::AuthError]
    builder.use FaradayCacheServiceDown, cache_store
    builder.use :http_cache, http_cache_options
    builder.use FaradayFollowNextLinks, 5
    builder.use FaradayMiddleware::FollowRedirects, standards_compliant: true
    builder.use FaradayAuthTokenRetry, credentials: credentials, host: host, token_path: token_path, debug: debug
    builder.response :json, content_type: /\bjson$/
    builder.response :raise_error
    builder.response :logger if debug
    builder.adapter Faraday.default_adapter
  end
end

#full_url_with_params(params: {}, id: nil) ⇒ Object



44
45
46
# File 'lib/active_record_api/request/connection.rb', line 44

def full_url_with_params(params: {}, id: nil)
  "#{full_url}/#{id}?#{params.to_query}"
end

#http_cache_optionsObject



62
63
64
65
66
# File 'lib/active_record_api/request/connection.rb', line 62

def http_cache_options
  http_cache_options = { shared_cache: false, store: cache_store }
  http_cache_options[:logger] = Rails.logger if debug
  http_cache_options
end

#service_url(suffix) ⇒ Object



39
40
41
42
# File 'lib/active_record_api/request/connection.rb', line 39

def service_url(suffix)
  parts = full_url.split('/')
  "#{parts[0]}//#{parts[2]}/#{parts[3]}/#{parts[4]}#{strip_double_slash("/#{suffix}")}"
end

#strip_double_slash(string) ⇒ Object



68
69
70
# File 'lib/active_record_api/request/connection.rb', line 68

def strip_double_slash(string)
  string.gsub(%r{//}, '/')
end

#strip_trailing_slash(string) ⇒ Object



72
73
74
# File 'lib/active_record_api/request/connection.rb', line 72

def strip_trailing_slash(string)
  string.sub(%r{(\/)+$}, '')
end

#symbolize_array_response(response) ⇒ Object



57
58
59
60
# File 'lib/active_record_api/request/connection.rb', line 57

def symbolize_array_response(response)
  return response unless response.first.is_a? Hash
  response.map!(&:deep_symbolize_keys!)
end

#symbolize_response(response) ⇒ Object



48
49
50
51
52
53
54
55
# File 'lib/active_record_api/request/connection.rb', line 48

def symbolize_response(response)
  return response if response.is_a? String
  if response.is_a?(Array)
    symbolize_array_response(response)
  else
    response.try(:deep_symbolize_keys!)
  end
end