Advertisement
Guest User

Untitled

a guest
Jul 10th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.29 KB | None | 0 0
  1. class HTTPClient
  2.   class Error < StandardError; end
  3.  
  4.   class Response
  5.     attr_reader :status, :body, :headers, :message
  6.     def initialize(status, body, headers, success = nil, message = nil)
  7.       @status = status
  8.       @body = body
  9.       @headers = headers
  10.       @success = !!success # converts to bool if necessary
  11.       @message = message
  12.     end
  13.  
  14.     def success?
  15.       @success
  16.     end
  17.   end
  18.  
  19.   # STATUS = {
  20.   #   400 => 'Bad Request',
  21.   #   401 => 'Unauthorized',
  22.   #   403 => 'Forbidden',
  23.   #   404 => 'Resource not found',
  24.   #   500 => 'Internal Server Error',
  25.   #   502 => 'Bad Gateway',
  26.   #   503 => 'Service Unavailable',
  27.   #   504 => 'Gateway Time-out'
  28.   # }
  29.  
  30.   def initialize(global_headers: {}, user: nil, password: nil)
  31.     @http_client = Faraday.new do |conn|
  32.       conn.use FaradayMiddleware::FollowRedirects # needed for resource manager
  33.       conn.use Faraday::CustomErrors
  34.       conn.request :multipart
  35.       conn.request :url_encoded
  36.       conn.adapter :net_http
  37.     end
  38.  
  39.     # global headers used in every request.
  40.     @http_client.headers.merge!(global_headers)
  41.  
  42.     # NOTE: basic auth can't be set in a per request basis
  43.     @http_client.basic_auth user, password if (user.present? and password.present?)
  44.   end
  45.  
  46.   def get(attrs = {})
  47.     run_request(attrs.merge method: :get)
  48.   end
  49.   def post(attrs = {})
  50.     run_request(attrs.merge method: :post)
  51.   end
  52.   def put(attrs = {})
  53.     run_request(attrs.merge method: :put)
  54.   end
  55.   def delete(attrs = {})
  56.     run_request(attrs.merge method: :delete)
  57.   end
  58.  
  59.   def run_request(method:, url:, body: nil, params: {}, headers: {})
  60.     begin
  61.  
  62.       Rails.logger.info({
  63.         message: "[HTTP] #{method.to_s} request",
  64.         url: url,
  65.         params: params,
  66.         headers: headers,
  67.         body: body,
  68.         method: method.to_s,
  69.       })
  70.  
  71.       response = @http_client.send(method) do |request|
  72.         request.url url
  73.         request.body body if body.present?
  74.         request.headers.merge!(headers)
  75.         request.params.merge!(params)
  76.       end
  77.  
  78.       HTTPClient::Response.new(response.status, response.body, response.headers, response.success?)
  79.  
  80.     rescue Faraday::Error => error
  81.       Support::LogHelpers.error(error)
  82.       raise HTTPClient::Error, error.message
  83.     end
  84.   end
  85. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement