lib/synapse_api/http_request.rb in synapseruby-1.0.8 vs lib/synapse_api/http_request.rb in synapseruby-1.0.9
- old
+ new
@@ -8,24 +8,24 @@
# @!attribute [rw] base_url
# @return [String] the base url of the API (production or sandbox)
# @!attribute [rw] config
# @return [Hash] various settings related to request headers
- # @!attribute [rw] raise_for_202
- # @return [Boolean] relating to how to handle 202 exception
+ # @!attribute [rw] raise_for_202
+ # @return [Boolean] relating to how to handle 202 exception
attr_accessor :base_url, :config, :raise_for_202
# @param base_url [String] the base url of the API (production or sandbox)
- # @param client_id [String]
- # @param client_secret [String]
- # @param fingerprint [String]
- # @param ip_address [String]
- # @param raise_for_202 [String]
- # @param logging [Boolean] (optional) logs to stdout when true
- # @param log_to [String] (optional) file path to log to file (logging must be true)
+ # @param client_id [String]
+ # @param client_secret [String]
+ # @param fingerprint [String]
+ # @param ip_address [String]
+ # @param raise_for_202 [String]
+ # @param logging [Boolean] (optional) logs to stdout when true
+ # @param log_to [String] (optional) file path to log to file (logging must be true)
def initialize(base_url:, client_id:, client_secret:, fingerprint:, ip_address:, raise_for_202:false, **options)
- @raise_for_202 = raise_for_202
+ @raise_for_202 = raise_for_202
log_to = options[:log_to] || 'stdout'
RestClient.log = log_to if options[:logging]
@logging = options[:logging]
@config = {
@@ -37,200 +37,200 @@
}
@base_url = base_url
end
# Returns headers for HTTP requests.
- # @return [Hash]
+ # @return [Hash]
def headers
user = "#{config[:oauth_key]}|#{config[:fingerprint]}"
gateway = "#{config[:client_id]}|#{config[:client_secret]}"
headers = {
content_type: :json,
accept: :json,
'X-SP-GATEWAY' => gateway,
'X-SP-USER' => user,
'X-SP-USER-IP' => config[:ip_address],
}
- if config[:idemopotency_key]
- headers['X-SP-IDEMPOTENCY-KEY'] = config[:idemopotency_key]
- end
- headers
+ if config[:idemopotency_key]
+ headers['X-SP-IDEMPOTENCY-KEY'] = config[:idemopotency_key]
+ end
+ headers
end
# Alias for headers (copy of current headers)
alias_method :get_headers, :headers
# Updates current HTPP headers
- # @param fingerprint [String]
- # @param oauth_key [String]
- # @param fingerprint [String]
- # @param client_id [String]
- # @param client_secret [String]
- # @param ip_address [String]
- # @param idemopotency_key [String]
+ # @param fingerprint [String]
+ # @param oauth_key [String]
+ # @param fingerprint [String]
+ # @param client_id [String]
+ # @param client_secret [String]
+ # @param ip_address [String]
+ # @param idemopotency_key [String]
def update_headers(oauth_key: nil, fingerprint: nil, client_id: nil, client_secret: nil, ip_address: nil, idemopotency_key: nil)
config[:fingerprint] = fingerprint if fingerprint
config[:oauth_key] = oauth_key if oauth_key
config[:client_id] = client_id if client_id
config[:client_secret] = client_secret if client_secret
config[:ip_address] = ip_address if ip_address
- config[:idemopotency_key] = idemopotency_key if idemopotency_key
+ config[:idemopotency_key] = idemopotency_key if idemopotency_key
nil
end
# Send a POST request to the given path with the given payload
# @param path [String]
# @param payload [HASH]
# @param **options payload = idempotency_key [String] (optional) avoid accidentally performing the same operation twice
- # @return [Hash] API response
- # @raise [Synapse::Error] subclass depends on HTTP response
- def post(path, payload, **options)
- #copy of current headers
- headers = get_headers
+ # @return [Hash] API response
+ # @raise [Synapse::Error] subclass depends on HTTP response
+ def post(path, payload, **options)
+ #copy of current headers
+ headers = get_headers
- # update the headers with idempotency_key
- if options[:idempotency_key]
- headers = headers.merge({'X-SP-IDEMPOTENCY-KEY' => options[:idempotency_key]})
- end
+ # update the headers with idempotency_key
+ if options[:idempotency_key]
+ headers = headers.merge({'X-SP-IDEMPOTENCY-KEY' => options[:idempotency_key]})
+ end
- response = with_error_handling { RestClient::Request.execute(:method => :post,
+ response = with_error_handling { RestClient::Request.execute(:method => :post,
:url => full_url(path),
:payload => payload.to_json,
:headers => headers,
:timeout => 300
) }
- puts 'RESPONSE:', JSON.parse(response) if @logging
- response = JSON.parse(response)
+ puts 'RESPONSE:', JSON.parse(response) if @logging
+ response = JSON.parse(response)
- if raise_for_202 && response["http_code"] == "202"
- raise Error.from_response(response)
- elsif response["error"]
- raise Error.from_response(response)
- else
- response
- end
- end
+ if raise_for_202 && response["http_code"] == "202"
+ raise Error.from_response(response)
+ elsif response["error"]
+ raise Error.from_response(response)
+ else
+ response
+ end
+ end
- # Sends a GET request to the given path with the given payload.
+ # Sends a GET request to the given path with the given payload.
# @param path [String]
# @return [Hash] API response
# @raise [Synapse::Error] subclass depends on HTTP response
def get(path)
response = with_error_handling {RestClient.get(full_url(path), headers)}
puts 'RESPONSE:', JSON.parse(response) if @logging
response = JSON.parse(response)
- if raise_for_202 && response["http_code"] == "202"
- raise Error.from_response(response)
- elsif response["error"]
- raise Error.from_response(response)
- else
- response
- end
+ if raise_for_202 && response["http_code"] == "202"
+ raise Error.from_response(response)
+ elsif response["error"]
+ raise Error.from_response(response)
+ else
+ response
+ end
end
- # Sends a DELETE request to the given path
- # @param path [String]
- # @return [Hash] API response
- # @raise [Synapse::Error] subclass depends on HTTP response
- def delete(path)
- response = with_error_handling {RestClient.delete(full_url(path), headers)}
- puts 'RESPONSE:', JSON.parse(response) if @logging
- response = JSON.parse(response)
+ # Sends a DELETE request to the given path
+ # @param path [String]
+ # @return [Hash] API response
+ # @raise [Synapse::Error] subclass depends on HTTP response
+ def delete(path)
+ response = with_error_handling {RestClient.delete(full_url(path), headers)}
+ puts 'RESPONSE:', JSON.parse(response) if @logging
+ response = JSON.parse(response)
- if raise_for_202 && response["http_code"] == "202"
- raise Error.from_response(response)
- elsif response["error"]
- raise Error.from_response(response)
- else
- response
- end
- end
+ if raise_for_202 && response["http_code"] == "202"
+ raise Error.from_response(response)
+ elsif response["error"]
+ raise Error.from_response(response)
+ else
+ response
+ end
+ end
# Sends a PATCH request to the given path with the given payload.
- # @param path [String]
- # @param payload [Hash]
- # @return [Hash] API response
- # @raise [Synapse::Error] subclass depends on HTTP response
+ # @param path [String]
+ # @param payload [Hash]
+ # @return [Hash] API response
+ # @raise [Synapse::Error] subclass depends on HTTP response
def patch(path, payload)
response = with_error_handling {RestClient::Request.execute(:method => :patch,
:url => full_url(path),
:payload => payload.to_json,
:headers => headers,
:timeout => 300
)}
p 'RESPONSE:', JSON.parse(response) if @logging
response = JSON.parse(response)
- if raise_for_202 && response["http_code"] == "202"
- raise Error.from_response(response)
- elsif response["error"]
- raise Error.from_response(response)
- else
- response
- end
+ if raise_for_202 && response["http_code"] == "202"
+ raise Error.from_response(response)
+ elsif response["error"]
+ raise Error.from_response(response)
+ else
+ response
+ end
end
- def oauthenticate(user_id:)
- refresh_token = refresh_token(user_id: user_id)
- end
+ def oauthenticate(user_id:)
+ refresh_token = refresh_token(user_id: user_id)
+ end
private
- # get user
- # get refresh_token
- # send refresh_token to oauth path
- # grabs the refresh token and formats a refresh token payload
- def refresh_token(user_id:)
- path = "/users/#{user_id}"
- response = get(path)
- refresh_token = response["refresh_token"]
+ # get user
+ # get refresh_token
+ # send refresh_token to oauth path
+ # grabs the refresh token and formats a refresh token payload
+ def refresh_token(user_id:)
+ path = "/users/#{user_id}"
+ response = get(path)
+ refresh_token = response["refresh_token"]
- refresh_token = {"refresh_token" => refresh_token}
- oauth_path = oauth_path(user_id)
- authenticate(refresh_token, oauth_path)
- end
+ refresh_token = {"refresh_token" => refresh_token}
+ oauth_path = oauth_path(user_id)
+ authenticate(refresh_token, oauth_path)
+ end
- # options payload to change scope of oauth
- def authenticate(refresh_token, oauth_path)
- oauth_key = post(oauth_path, refresh_token)
- oauth_key = oauth_key['oauth_key']
- update_headers(oauth_key: oauth_key)
- nil
- end
+ # options payload to change scope of oauth
+ def authenticate(refresh_token, oauth_path)
+ oauth_key = post(oauth_path, refresh_token)
+ oauth_key = oauth_key['oauth_key']
+ update_headers(oauth_key: oauth_key)
+ nil
+ end
- def oauth_path(user_id)
- "/oauth/#{user_id}"
- end
+ def oauth_path(user_id)
+ "/oauth/#{user_id}"
+ end
def full_url(path)
- "#{base_url}#{path}"
+ "#{base_url}#{path}"
end
- # raising an exception based on http_request
- # yeilds if http_request raises an exception
+ # raising an exception based on http_request
+ # yeilds if http_request raises an exception
def with_error_handling
yield
- rescue RestClient::Exceptions::Timeout
- body = {
- error: {
- en: "Request Timeout"
- },
- http_code: 504
- }
- raise Error.from_response(body)
- rescue RestClient::Exception => e
- if e.response.headers[:content_type] == 'application/json'
- body = JSON.parse(e.response.body)
- else
- body = {
- error: {
- en: e.response.body
- },
- http_code: e.response.code
- }
- end
- raise Error.from_response(body)
+ rescue RestClient::Exceptions::Timeout
+ body = {
+ error: {
+ en: "Request Timeout"
+ },
+ http_code: 504
+ }
+ raise Error.from_response(body)
+ rescue RestClient::Exception => e
+ if e.response.headers[:content_type] == 'application/json'
+ body = JSON.parse(e.response.body)
+ else
+ body = {
+ error: {
+ en: e.response.body
+ },
+ http_code: e.response.code
+ }
+ end
+ raise Error.from_response(body)
end
end
end