Module: TicketEvolution::Endpoint::RequestHandler
- Included in:
- TicketEvolution::Endpoint
- Defined in:
- lib/ticket_evolution/core/endpoint/request_handler.rb
Constant Summary collapse
- CODES =
Response Code Mappings From TicketEvolution API
{ 200 => ["OK","Generally returned by successful GET requests. "], 201 => ["Created","Generally returned by successful POST requests. "], 202 => ["Accepted","Generally returned when a request has succeeded, but has been scheduled processing at a later time. "], 301 => ["Moved Permanently","Used when a resource's URL has changed."], 302 => ["Found","Returned when there's a redirect that should be followed."], 400 => ["Bad Request","Generally returned on POST and PUT requests when validation fails for the given input. "], 401 => ["Unauthorized","Returned when the authentication credentials are invalid."], 404 => ["Not Found","The requested resource could not be located."], 406 => ["Not Acceptable","The requested content type or version is invalid."], 422 => ["Unprocessable Entity","Returned when the application can't processes the data."], 500 => ["Internal Server Error","Used a general error response for processing errors or other issues with the web service. "], 503 => ["Service Unavailable","Returned when the API service is temporarily unavailable. This could also indicate that the rate limit for the given token has been reached. If this status is received, the request should be retried."] }
Instance Method Summary collapse
- #build_request(method, path, params = nil, build_path = true) ⇒ Object
- #collection_handler(response) ⇒ Object
- #naturalize_response(response = nil) ⇒ Object
- #raw_handler(response) ⇒ Object
- #request(method, path, params = nil, &response_handler) ⇒ Object
Instance Method Details
#build_request(method, path, params = nil, build_path = true) ⇒ Object
46 47 48 49 |
# File 'lib/ticket_evolution/core/endpoint/request_handler.rb', line 46 def build_request(method, path, params = nil, build_path = true) raise EndpointConfigurationError, "#{self.class.to_s}#request requires it's first parameter to be a valid HTTP method" unless [:GET, :POST, :PUT, :DELETE].include? method.to_sym self.connection.build_request(method, "#{build_path ? self.base_path : ''}#{path}", params) end |
#collection_handler(response) ⇒ Object
61 62 63 |
# File 'lib/ticket_evolution/core/endpoint/request_handler.rb', line 61 def collection_handler(response) TicketEvolution::Collection.build_from_response(response, self.class.name.demodulize.underscore, singular_class) end |
#naturalize_response(response = nil) ⇒ Object
51 52 53 54 55 56 57 58 59 |
# File 'lib/ticket_evolution/core/endpoint/request_handler.rb', line 51 def naturalize_response(response = nil) response = yield if block_given? OpenStruct.new.tap do |resp| resp.header = response.headers resp.response_code = response.status resp.body = (MultiJson.decode(response.body) rescue {"error" => "Internal Server Error"}).merge({:connection => self.connection}) resp. = (CODES[resp.response_code] || ['Unknown Error']).last end end |
#raw_handler(response) ⇒ Object
65 66 67 |
# File 'lib/ticket_evolution/core/endpoint/request_handler.rb', line 65 def raw_handler(response) response end |
#request(method, path, params = nil, &response_handler) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/ticket_evolution/core/endpoint/request_handler.rb', line 21 def request(method, path, params = nil, &response_handler) params = params.to_ordered_hash if params.is_a?(Hash) redirecting = caller.first =~ /request_handler/ ? false : true request = self.build_request(method, path, params, redirecting) response = self.naturalize_response do method = method.to_s.downcase.to_sym if method == :get request.send(method) else request.send(method) do |req| req.body = MultiJson.encode(params) if params.present? end end end if [301, 302].include?(response.response_code) new_path = response.header['location'].match(/^https?:\/\/[a-zA-Z_]+[\.a-zA-Z_]+(\/[\w\/]+)[\?]*/).to_a[1] self.request(method, new_path, params, &response_handler) elsif response.response_code >= 300 TicketEvolution::ApiError.new(response) else response_handler.call(response) end end |