motion-http 1.0.3 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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