Class: Hubscreen::APIRequest
- Inherits:
-
Object
- Object
- Hubscreen::APIRequest
- Defined in:
- lib/hubscreen/api_request.rb
Instance Method Summary collapse
- #adapter ⇒ Object
- #api_endpoint ⇒ Object
-
#api_key ⇒ Object
Convenience accessors.
- #api_url ⇒ Object
- #base_api_url ⇒ Object
- #configure_request(request: nil, params: nil, headers: nil, body: nil) ⇒ Object
- #delete(params: nil, headers: nil) ⇒ Object
- #get(params: nil, headers: nil) ⇒ Object
-
#handle_error(error) ⇒ Object
Helpers.
-
#initialize(builder: nil) ⇒ APIRequest
constructor
A new API request must pass in a Hubscreen::Request Object.
- #parse_response(response_body) ⇒ Object
- #patch(params: nil, headers: nil, body: nil) ⇒ Object
- #post(params: nil, headers: nil, body: nil) ⇒ Object
- #proxy ⇒ Object
- #put(params: nil, headers: nil, body: nil) ⇒ Object
- #rest_client ⇒ Object
- #timeout ⇒ Object
- #validate_api_key ⇒ Object
Constructor Details
#initialize(builder: nil) ⇒ APIRequest
A new API request must pass in a Hubscreen::Request Object
7 8 9 |
# File 'lib/hubscreen/api_request.rb', line 7 def initialize(builder: nil) @request_builder = builder end |
Instance Method Details
#adapter ⇒ Object
96 97 98 |
# File 'lib/hubscreen/api_request.rb', line 96 def adapter @request_builder.faraday_adapter end |
#api_endpoint ⇒ Object
84 85 86 |
# File 'lib/hubscreen/api_request.rb', line 84 def api_endpoint @request_builder.api_endpoint end |
#api_key ⇒ Object
Convenience accessors
80 81 82 |
# File 'lib/hubscreen/api_request.rb', line 80 def api_key @request_builder.api_key end |
#api_url ⇒ Object
179 180 181 |
# File 'lib/hubscreen/api_request.rb', line 179 def api_url base_api_url + @request_builder.path end |
#base_api_url ⇒ Object
183 184 185 |
# File 'lib/hubscreen/api_request.rb', line 183 def base_api_url @request_builder.api_endpoint end |
#configure_request(request: nil, params: nil, headers: nil, body: nil) ⇒ Object
127 128 129 130 131 132 133 134 135 |
# File 'lib/hubscreen/api_request.rb', line 127 def configure_request(request: nil, params: nil, headers: nil, body: nil) if request request.params.merge!(params) if params request.headers['Content-Type'] = 'application/json' request.headers.merge!(headers) if headers request.body = body if body request..timeout = self.timeout end end |
#delete(params: nil, headers: nil) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/hubscreen/api_request.rb', line 63 def delete(params: nil, headers: nil) validate_api_key begin response = self.rest_client.delete do |request| configure_request(request: request, params: params, headers: headers) end parse_response(response.body) rescue => e handle_error(e) end end |
#get(params: nil, headers: nil) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/hubscreen/api_request.rb', line 50 def get(params: nil, headers: nil) validate_api_key begin response = self.rest_client.get do |request| configure_request(request: request, params: params, headers: headers) end parse_response(response.body) rescue => e handle_error(e) end end |
#handle_error(error) ⇒ Object
Helpers
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/hubscreen/api_request.rb', line 102 def handle_error(error) error_params = {} begin if error.is_a?(Faraday::Error::ClientError) && error.response error_params[:status_code] = error.response[:status] error_params[:raw_body] = error.response[:body] parsed_response = MultiJson.load(error.response[:body]) if parsed_response error_params[:body] = parsed_response error_params[:title] = parsed_response["title"] if parsed_response["title"] error_params[:detail] = parsed_response["detail"] if parsed_response["detail"] end end rescue MultiJson::ParseError end error_to_raise = Hubscreen::RequestError.new(error., error_params) raise error_to_raise end |
#parse_response(response_body) ⇒ Object
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/hubscreen/api_request.rb', line 151 def parse_response(response_body) parsed_response = nil if response_body && !response_body.empty? begin parsed_response = MultiJson.load(response_body) rescue MultiJson::ParseError error = ApiError.new("Unparseable response: #{response_body}") error.title = "UNPARSEABLE_RESPONSE" error.status_code = 500 raise error end end parsed_response end |
#patch(params: nil, headers: nil, body: nil) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/hubscreen/api_request.rb', line 24 def patch(params: nil, headers: nil, body: nil) validate_api_key begin response = self.rest_client.patch do |request| configure_request(request: request, params: params, headers: headers, body: MultiJson.dump(body)) end parse_response(response.body) rescue => e handle_error(e) end end |
#post(params: nil, headers: nil, body: nil) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/hubscreen/api_request.rb', line 11 def post(params: nil, headers: nil, body: nil) validate_api_key begin response = self.rest_client.post do |request| configure_request(request: request, params: params, headers: headers, body: MultiJson.dump(body)) end parse_response(response.body) rescue => e handle_error(e) end end |
#proxy ⇒ Object
92 93 94 |
# File 'lib/hubscreen/api_request.rb', line 92 def proxy @request_builder.proxy end |
#put(params: nil, headers: nil, body: nil) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/hubscreen/api_request.rb', line 37 def put(params: nil, headers: nil, body: nil) validate_api_key begin response = self.rest_client.put do |request| configure_request(request: request, params: params, headers: headers, body: MultiJson.dump(body)) end parse_response(response.body) rescue => e handle_error(e) end end |
#rest_client ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/hubscreen/api_request.rb', line 137 def rest_client client = Faraday.new(self.api_url, proxy: self.proxy) do |faraday| faraday.response :raise_error faraday.adapter adapter if @request_builder.debug faraday.response :logger, ::Logger.new(STDOUT), bodies: true end end # Hubspot expects the API key in the Query Params (WTF!!) client.params['hapikey'] = self.api_key #client.basic_auth('hapikey', self.api_key) client end |
#timeout ⇒ Object
88 89 90 |
# File 'lib/hubscreen/api_request.rb', line 88 def timeout @request_builder.timeout end |
#validate_api_key ⇒ Object
168 169 170 171 172 173 174 175 176 177 |
# File 'lib/hubscreen/api_request.rb', line 168 def validate_api_key api_key = self.api_key api_endpoint = self.api_endpoint unless api_key raise Hubscreen::ApiError, "You must set an api_key prior to making a call" end unless api_endpoint raise Hubscreen::ApiError, "You must set an api_endpoint prior to making a call" end end |