Class: Motion::HTTP::Adapter::Request
Instance Method Summary collapse
- #build_ns_url_request ⇒ Object
-
#initialize(request) ⇒ Request
constructor
A new instance of Request.
- #perform(&callback) ⇒ Object
-
#URLSession(session, task: task, willPerformHTTPRedirection: response, newRequest: request, completionHandler: completion_handler) ⇒ Object
NSURLSessionTaskDelegate methods.
Constructor Details
#initialize(request) ⇒ Request
Returns a new instance of Request.
9 10 11 12 |
# File 'lib/cocoa/adapter.rb', line 9 def initialize(request) @request = request @session = NSURLSession.sessionWithConfiguration(NSURLSessionConfiguration.defaultSessionConfiguration, delegate: self, delegateQueue: nil) end |
Instance Method Details
#build_ns_url_request ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/cocoa/adapter.rb', line 31 def build_ns_url_request ns_url_request = NSMutableURLRequest.alloc.initWithURL(NSURL.URLWithString(@request.url)) ns_url_request.HTTPMethod = @request.http_method.to_s.upcase @request.headers.each do |key, value| if value.is_a? Array value.each {|v2| ns_url_request.addValue(v2, forHTTPHeaderField: key) } else ns_url_request.setValue(value, forHTTPHeaderField: key) end end if @request.body if @request.body.is_a?(NSData) body_data = @request.body else body_data = NSString.alloc.initWithString(@request.body).dataUsingEncoding(NSUTF8StringEncoding) end ns_url_request.HTTPBody = body_data end # TODO: add other headers ns_url_request end |
#perform(&callback) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/cocoa/adapter.rb', line 14 def perform(&callback) # TODO: dataTask is good for general HTTP requests but not for file downloads ns_url_request = build_ns_url_request task = @session.dataTaskWithRequest(ns_url_request, completionHandler: -> (data, response, error) { if error = "#{error.localizedDescription} #{error.userInfo['NSLocalizedDescriptionKey']}" Motion::HTTP.logger.error("Error while requesting #{@request.url}: #{error_message}") response = Response.new(@request, response&.statusCode, Headers.new(response&.allHeaderFields), ) else response = Response.new(@request, response.statusCode, Headers.new(response.allHeaderFields), data.to_s) Motion::HTTP.logger.log_response(response) end callback.call(response) if callback }) task.resume end |
#URLSession(session, task: task, willPerformHTTPRedirection: response, newRequest: request, completionHandler: completion_handler) ⇒ Object
NSURLSessionTaskDelegate methods
57 58 59 60 61 62 63 |
# File 'lib/cocoa/adapter.rb', line 57 def URLSession(session, task: task, willPerformHTTPRedirection: response, newRequest: request, completionHandler: completion_handler) if @request.[:follow_redirects] == false completion_handler.call(nil) else completion_handler.call(request) end end |