motion-http 1.0.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6fdd9853db4edb1720e95dac2ab15074cfe361e21a8c80b940854d22a8c1fe38
4
- data.tar.gz: eb9b3042d28b232921fd1adda2ece8e17fd4397a63bf6a7bdeaba0fcd045929a
3
+ metadata.gz: f008cdd4f451d3c07f846a6129ee78759ef8c3b2a1eb0ff0374f2cf05f2b6f8e
4
+ data.tar.gz: 83d1124e7b3a3afcbec2a8d28436586eb0392b12922b4bd30174439d32f86cda
5
5
  SHA512:
6
- metadata.gz: 1c151143736e9dc4ca7e9b4ace845ffec8a6deb1316fcfd083c0ec9ce1577d3f32b41059f27fe228d3161076a3b63bda26f514c2c4f0573d464f9a43088da9f8
7
- data.tar.gz: 7f5525e0c1f1f7155feda2ef235ad8a124a34da785d180aa211d5c04e2dc8d5b355eea3abb912fd7af8a192f132bb06a38fcf66b9302ff1da9236ec51324b66b
6
+ metadata.gz: 40bec4425a0992d25cce5407c0edd47f675d5a255cc01368f3f7441abb2ecd2c8920895f83e5b0e6b569709b7d59025f9a2fcca35b19e47bd522ecb579d9456d
7
+ data.tar.gz: 7fe5336df48fac9bd7c58e16bae95da6cc05333a07e95ead7406d278cf3b3bb20a92bbb686e1d2e168765259a9ac1df5ef46546ccc3879bbd5eb5658638d07e3
data/lib/cocoa/adapter.rb CHANGED
@@ -14,11 +14,48 @@ class Motion
14
14
  def perform(&callback)
15
15
  # TODO: dataTask is good for general HTTP requests but not for file downloads
16
16
  ns_url_request = build_ns_url_request
17
+ if @request.options[:download]
18
+ perform_download_request(ns_url_request, &callback)
19
+ else
20
+ perform_normal_http_request(ns_url_request, &callback)
21
+ end
22
+ end
23
+
24
+ def perform_download_request(ns_url_request, &callback)
25
+ # TODO: need to set up delegate methods when using a background session
26
+ # @background_session = NSURLSession.sessionWithConfiguration(NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("motion-http"))
27
+ # task = @background_session.downloadTaskWithRequest(ns_url_request, completionHandler: -> (location, response, error) {
28
+ task = @session.downloadTaskWithRequest(ns_url_request, completionHandler: -> (location, response, error) {
29
+ if error
30
+ log_error "Error while requesting #{@request.url}: #{error_description(error)}"
31
+ response = Response.new(@request, response&.statusCode, Headers.new(response&.allHeaderFields), error_description(error))
32
+ else
33
+ if @request.options[:to]
34
+ error_ptr = Pointer.new(:object)
35
+ file_data = NSFileManager.defaultManager.contentsAtPath(location)
36
+ file_data.writeToFile(@request.options[:to], options: NSDataWritingAtomic, error: error_ptr)
37
+
38
+ if error_ptr[0]
39
+ log_error "Error while saving downloaded file: #{error_description(error_ptr[0])}"
40
+ response = Response.new(@request, response.statusCode, Headers.new(response.allHeaderFields), error_description(error_ptr[0]))
41
+ else
42
+ response = Response.new(@request, response.statusCode, Headers.new(response.allHeaderFields), nil)
43
+ end
44
+ else
45
+ log_error "No local save path specified."
46
+ end
47
+ Motion::HTTP.logger.log_response(response)
48
+ end
49
+ callback.call(response) if callback
50
+ })
51
+ task.resume
52
+ end
53
+
54
+ def perform_normal_http_request(ns_url_request, &callback)
17
55
  task = @session.dataTaskWithRequest(ns_url_request, completionHandler: -> (data, response, error) {
18
56
  if error
19
- error_message = "#{error.localizedDescription} #{error.userInfo['NSLocalizedDescriptionKey']}"
20
- Motion::HTTP.logger.error("Error while requesting #{@request.url}: #{error_message}")
21
- response = Response.new(@request, response&.statusCode, Headers.new(response&.allHeaderFields), error_message)
57
+ log_error "Error while requesting #{@request.url}: #{error_description(error)}"
58
+ response = Response.new(@request, response&.statusCode, Headers.new(response&.allHeaderFields), error_description(error))
22
59
  else
23
60
  response = Response.new(@request, response.statusCode, Headers.new(response.allHeaderFields), data.to_s)
24
61
  Motion::HTTP.logger.log_response(response)
@@ -52,6 +89,14 @@ class Motion
52
89
  ns_url_request
53
90
  end
54
91
 
92
+ def log_error(message, error = nil)
93
+ Motion::HTTP.logger.error(message)
94
+ end
95
+
96
+ def error_description(error)
97
+ "#{error.localizedDescription} #{error.userInfo['NSLocalizedDescriptionKey']}"
98
+ end
99
+
55
100
  # NSURLSessionTaskDelegate methods
56
101
 
57
102
  def URLSession(session, task: task, willPerformHTTPRedirection: response, newRequest: request, completionHandler: completion_handler)
@@ -69,6 +69,13 @@ class Motion
69
69
  request(:trace, path, options, &callback)
70
70
  end
71
71
 
72
+ def download(remote_path, options = nil, &callback)
73
+ options ||= {}
74
+ http_method = options[:method] || :get
75
+ options[:download] = true
76
+ request(http_method, remote_path, options, &callback)
77
+ end
78
+
72
79
  def request(http_method, path, options = nil, &callback)
73
80
  options ||= {}
74
81
  headers_dup = headers.dup
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-http
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Havens
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-22 00:00:00.000000000 Z
11
+ date: 2021-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: motion-lager