motion-http 0.1.1 → 0.2.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
- SHA1:
3
- metadata.gz: 295321b18316c5b3a47c29692b4831e25ed4b1c7
4
- data.tar.gz: afcdbfc33304f05cf290fcdd33e339ad693fcb74
2
+ SHA256:
3
+ metadata.gz: a32a0271f1f711f5a11522c48894a06ea9e8924615d38bae2a235572f15d2135
4
+ data.tar.gz: 590d6d30eb2889d97f47ed0e072313eb93dd38eb3e6485f0f894e526869f6a79
5
5
  SHA512:
6
- metadata.gz: '095e68b01bca380833a6e93c2e25e5e6abd389727b6ff92aa1b39c9fef79132bec440ea2b280b4e0e5436535534dc158e234d1ed54bc9c99cc518a246fa5cf77'
7
- data.tar.gz: 0667af5350564fb4f4199437a3ae827435f5ce942842ca333adba98ed46efaa7a8c4ff1dce85dc67c17b9fa382abdf28b7ba5645fa0e6064581cf405e9e3e5ed
6
+ metadata.gz: a01adbafd00b594929e7b7f86de05e55ff60e1040db5e736247dcb5dca8f01d21804c54ae5ecca7f365a6181dfb030794acfb667a93694bf0a0da0cd4a17f0d4
7
+ data.tar.gz: 684d0b718b0d84c7e4222cc16c97f39b4bf875e43b752c7d3f72d9e6540b9cc2e938a690a4542678eb5bff4d89f6409197750a4c608df0a48c9e7a327794901f
data/README.md CHANGED
@@ -1,14 +1,12 @@
1
1
  # motion-http
2
2
 
3
- Motion::HTTP is a cross-platform HTTP Client for RubyMotion that's quick and easy to use.
3
+ A cross-platform HTTP Client for RubyMotion that's quick and easy to use.
4
4
 
5
5
  Supported platforms:
6
6
  - iOS, macOS, tvOS, watchOS
7
7
  - Android
8
8
 
9
- This gem depends on two really popular networking libraries:
10
- - [AFNetworking](https://github.com/AFNetworking/AFNetworking) (for Cocoa platforms)
11
- - [OkHttp](http://square.github.io/okhttp/) (for Android)
9
+ On Android, this gem depends on the super popular [OkHttp](http://square.github.io/okhttp/) networking library.
12
10
 
13
11
  Please note that this library is still a work in progress. Please report bugs and suggestions for improvement!
14
12
 
@@ -21,7 +19,6 @@ Add this line to your application's Gemfile:
21
19
  And then execute:
22
20
 
23
21
  $ bundle
24
- $ rake pod:install # for iOS apps
25
22
  $ rake gradle:install # for Android apps
26
23
 
27
24
  ### iOS Specific Configuration
@@ -32,22 +29,21 @@ If you will be making insecure HTTP requests (not HTTPS), you will need to expli
32
29
 
33
30
  ## Usage
34
31
 
35
- Using `Motion::HTTP` is quick and easy. You can use the simple approach for making one-off requests, or the advanced approach of creating a reusable API client for further customization.
32
+ Using `motion-http` is quick and easy. You can use the simple approach for making one-off requests, or the advanced approach of creating a reusable API client for further customization.
36
33
 
37
34
  ### Simple Usage
38
35
 
39
- The basic syntax for a simple request looks like this:
36
+ The basic syntax for a request looks like this:
40
37
  ```ruby
41
- Motion::HTTP.method(url, params) do |response|
38
+ HTTP.method(url, params, options) do |response|
42
39
  # this block will be called asynchronously
43
40
  end
44
41
  ```
42
+ Where `method` can be `get`, `post`, `put`, `patch`, or `delete`.
45
43
 
46
- To make a simple `GET` request:
44
+ For example, to make a simple `GET` request:
47
45
  ```ruby
48
- Motion::HTTP.get("http://www.example.com") do |response|
49
- puts "status code: #{response.status_code}"
50
- puts "response body: #{response.body}"
46
+ HTTP.get("http://www.example.com") do |response|
51
47
  if response.success?
52
48
  puts "Success!"
53
49
  else
@@ -58,14 +54,23 @@ end
58
54
 
59
55
  You can specify query params as the second argument:
60
56
  ```ruby
61
- Motion::HTTP.get("http://www.example.com/search", term: "my search term") do |response|
57
+ HTTP.get("http://www.example.com/search", term: "my search term") do |response|
62
58
  # ...
63
59
  end
64
60
  ```
65
61
 
66
- `Motion::HTTP` will automatically parse JSON responses:
62
+ The response object contains the status code, headers, and body from the response as well:
67
63
  ```ruby
68
- Motion::HTTP.get("http://api.example.com/people.json") do |response|
64
+ HTTP.get("http://example.com") do |response|
65
+ puts response.status_code
66
+ puts response.headers.inspect
67
+ puts response.body
68
+ end
69
+ ```
70
+
71
+ JSON responses will automatically be parsed when requesting the `response.object`:
72
+ ```ruby
73
+ HTTP.get("http://api.example.com/people.json") do |response|
69
74
  if response.success?
70
75
  response.object["people"].each do |person|
71
76
  puts "name: #{person["name"]}"
@@ -76,25 +81,32 @@ Motion::HTTP.get("http://api.example.com/people.json") do |response|
76
81
  end
77
82
  ```
78
83
 
84
+ The third argument is a hash of options. Currently the only option supported at this time is `follow_redirects` which defaults to true:
85
+ ```ruby
86
+ HTTP.get("http://example.com/redirect", nil, follow_redirects: false) do |response|
87
+ # ...
88
+ end
89
+ ```
90
+
79
91
  To make a simple `POST` request, the value passed as the second argument will be encoded as the request body:
80
92
  ```ruby
81
93
  json = { widget: { name: "Foobar" } }
82
- Motion::HTTP.post("http://www.example.com/widgets", json) do |response|
94
+ HTTP.post("http://www.example.com/widgets", json) do |response|
83
95
  if response.success?
84
96
  puts "Widget created!"
85
- elsif response.client_error?
97
+ elsif response.status_code == 422
86
98
  puts "Oops, you did something wrong: #{response.object["error_message"]}"
87
99
  else
88
- puts "Oops! Something else went wrong."
100
+ puts "Oops! Something went wrong."
89
101
  end
90
102
  end
91
103
  ```
92
104
 
93
105
  `PUT`, `PATCH`, and `DELETE` requests work the same way:
94
106
  ```ruby
95
- Motion::HTTP.put(url, params) { ... }
96
- Motion::HTTP.patch(url, params) { ... }
97
- Motion::HTTP.delete(url, params) { ... }
107
+ HTTP.put(url, params) { ... }
108
+ HTTP.patch(url, params) { ... }
109
+ HTTP.delete(url, params) { ... }
98
110
  ```
99
111
 
100
112
  ### Advanced Usage
@@ -102,7 +114,7 @@ Motion::HTTP.delete(url, params) { ... }
102
114
  A common use case is to create a reusable HTTP client that uses a common base URL or request headers.
103
115
 
104
116
  ```ruby
105
- client = Motion::HTTP::Client.new("http://www.example.com")
117
+ client = HTTP::Client.new("http://api.example.com")
106
118
  # Set or replace a single header:
107
119
  client.header "X-API-TOKEN", "abc123xyz"
108
120
 
@@ -110,13 +122,13 @@ client.header "X-API-TOKEN", "abc123xyz"
110
122
  client.headers "X-API-TOKEN" => "abc123xyz",
111
123
  "Accept" => "application/json"
112
124
 
113
- # It is valid for some headers to appear multiple times (Accept, Vary, etc).
125
+ # Note that it is valid for some headers to appear multiple times (Accept, Vary, etc).
114
126
  # To append multiple headers of the same key:
115
127
  client.add_header "Accept", "application/json"
116
128
  client.add_header "Accept", "application/vnd.api+json"
117
129
  ```
118
130
 
119
- Then make your requests relative to the base URL that you specified when creating your client.
131
+ Then you can make your requests relative to the base URL that you specified when creating your client.
120
132
  ```ruby
121
133
  client.get("/people") do |response|
122
134
  # ...
@@ -7,8 +7,12 @@ class Motion
7
7
  @client ||= Okhttp3::OkHttpClient.new
8
8
  end
9
9
 
10
- def self.request(http_method, url, headers, params = nil, &callback)
11
- puts "starting #{http_method.to_s.upcase} #{url}"
10
+ def self.perform(request, &callback)
11
+ http_method = request.http_method
12
+ url = request.url
13
+ headers = request.headers
14
+ params = request.params
15
+
12
16
  request = OkHttp3::Request::Builder.new
13
17
  request.url(url) # TODO: encode GET params and append to URL prior to calling this method
14
18
  headers.each do |key, value|
@@ -23,17 +27,18 @@ class Motion
23
27
  # body = OkHttp3::RequestBody.create(JSONMediaType, params) # TODO: allow other content types
24
28
  # request.method(http_method.to_s, body)
25
29
  end
26
- client.newCall(request.build).enqueue(OkhttpCallback.new(callback))
30
+ client.newCall(request.build).enqueue(OkhttpCallback.new(request, callback))
27
31
  end
28
32
 
29
33
  class OkhttpCallback
30
- def initialize(callback)
34
+ def initialize(request, callback)
35
+ @request = request
31
36
  @callback = callback
32
37
  end
33
38
 
34
39
  def onFailure(call, e)
35
40
  puts "Error: #{e.getMessage}"
36
- @callback.call(Response.new(nil, Headers.new, e.getMessage))
41
+ @callback.call(Response.new(@request, nil, Headers.new, e.getMessage))
37
42
  end
38
43
 
39
44
  def onResponse(call, response)
@@ -49,9 +54,7 @@ class Motion
49
54
  headers.add(key, value)
50
55
  i += 1
51
56
  end
52
- body_string = response.body.string
53
- json = JSON.load(body_string) if headers['content-type'] =~ /application\/json/
54
- Response.new(response.code, headers, body_string, json)
57
+ Response.new(@request, response.code, headers, response.body.string)
55
58
  end
56
59
  end
57
60
  end
data/lib/android/json.rb CHANGED
@@ -34,3 +34,34 @@ class JSON
34
34
  end
35
35
  end
36
36
  end
37
+
38
+ class Object
39
+ def to_json
40
+ # The Android JSON API expects real Java String objects.
41
+ @@fix_string ||= (lambda do |obj|
42
+ case obj
43
+ when String, Symbol
44
+ obj = obj.toString
45
+ when Hash
46
+ map = Hash.new
47
+ obj.each do |key, value|
48
+ key = key.toString if key.is_a?(String) || key.is_a?(Symbol)
49
+ value = @@fix_string.call(value)
50
+ map[key] = value
51
+ end
52
+ obj = map
53
+ when Array
54
+ obj = obj.map do |item|
55
+ (item.is_a?(String) || item.is_a?(Symbol)) ? item.toString : @@fix_string.call(item)
56
+ end
57
+ end
58
+ obj
59
+ end)
60
+
61
+ obj = Org::JSON::JSONObject.wrap(@@fix_string.call(self))
62
+ if obj == nil
63
+ raise "Can't serialize object to JSON"
64
+ end
65
+ obj.toString.to_s
66
+ end
67
+ end
data/lib/cocoa/adapter.rb CHANGED
@@ -1,44 +1,55 @@
1
1
  class Motion
2
2
  class HTTP
3
3
  class Adapter
4
- def self.manager
5
- @manager ||= AFHTTPSessionManager.manager
4
+ def self.perform(request, &callback)
5
+ Motion::HTTP::Adapter::Request.new(request).perform(&callback)
6
6
  end
7
7
 
8
- def self.request(http_method, url, headers, params = nil, &callback)
9
- progress = nil
10
- on_success = lambda do |task, response_object|
11
- response = task.response
12
- callback.call(Response.new(response.statusCode, Headers.new(response.allHeaderFields), nil, response_object))
8
+ class Request
9
+ def initialize(request)
10
+ @request = request
11
+ @session = NSURLSession.sessionWithConfiguration(NSURLSessionConfiguration.defaultSessionConfiguration, delegate: self, delegateQueue: nil)
13
12
  end
14
- on_error = lambda do |operation, error|
15
- NSLog("Error: %@", error)
16
- response = operation.response
17
- status_code = response.statusCode if response
18
- response_headers = response.allHeaderFields if response
19
- error_message = error.localizedDescription
20
- error_message += error.userInfo[NSLocalizedDescriptionKey] if error.userInfo[NSLocalizedDescriptionKey]
21
- callback.call(
22
- Response.new(status_code, Headers.new(response_headers), error_message)
23
- )
13
+
14
+ def perform(&callback)
15
+ # TODO: dataTask is good for general HTTP requests but not for file downloads
16
+ ns_url_request = build_ns_url_request
17
+ task = @session.dataTaskWithRequest(ns_url_request, completionHandler: -> (data, response, error) {
18
+ if error
19
+ NSLog("Error: %@", error) # TODO: use configurable logging
20
+ error_message = error.localizedDescription
21
+ error_message += error.userInfo[NSLocalizedDescriptionKey] if error.userInfo[NSLocalizedDescriptionKey]
22
+ response = Response.new(@request, response.statusCode, Headers.new(response.allHeaderFields), error_message)
23
+ else
24
+ response = Response.new(@request, response.statusCode, Headers.new(response.allHeaderFields), data.to_s)
25
+ end
26
+ Motion::HTTP.logger.log_response(response)
27
+ callback.call(response)
28
+ })
29
+ task.resume
24
30
  end
25
31
 
26
- case http_method
27
- when :get
28
- manager.GET url, parameters: params, progress: progress, success: on_success, failure: on_error
29
- when :post
30
- manager.POST url, parameters: params, progress: progress, success: on_success, failure: on_error
31
- when :put
32
- manager.PUT url, parameters: params, progress: progress, success: on_success, failure: on_error
33
- when :patch
34
- manager.PATCH url, parameters: params, progress: progress, success: on_success, failure: on_error
35
- when :delete
36
- manager.DELETE url, parameters: params, progress: progress, success: on_success, failure: on_error
32
+ def build_ns_url_request
33
+ ns_url_request = NSMutableURLRequest.alloc.initWithURL(NSURL.URLWithString(@request.url))
34
+ ns_url_request.HTTPMethod = @request.http_method.to_s.upcase
35
+ if @request.params
36
+ # TODO: json serialization
37
+ ns_url_request.setValue('application/x-www-form-urlencoded', forHTTPHeaderField: 'Content-Type')
38
+ ns_url_request.HTTPBody = FormDataSerializer.serialize(@request.params).dataUsingEncoding(NSUTF8StringEncoding)
39
+ end
40
+ # TODO: add other headers
41
+ ns_url_request
37
42
  end
38
43
 
39
- # FIXME: dynamically calling the method using send results in a crash
40
- # method_signature = "#{http_method.to_s.upcase}:parameters:progress:success:failure:"
41
- # # manager.send(method_signature, url, params, nil, on_success, on_error)
44
+ # NSURLSessionTaskDelegate methods
45
+
46
+ def URLSession(session, task: task, willPerformHTTPRedirection: response, newRequest: request, completionHandler: completion_handler)
47
+ if @request.options[:follow_redirects] == false
48
+ completion_handler.call(nil)
49
+ else
50
+ completion_handler.call(request)
51
+ end
52
+ end
42
53
  end
43
54
  end
44
55
  end
@@ -0,0 +1,29 @@
1
+ class FormDataSerializer
2
+ def self.serialize(params)
3
+ flattened_params = {}
4
+ params.each do |k, v|
5
+ add_param(flattened_params, k, v)
6
+ end
7
+ serialized_params = []
8
+ flattened_params.each do |k, v|
9
+ serialized_params << "#{k}=#{serialize_value(v)}"
10
+ end
11
+ serialized_params.join('&')
12
+ end
13
+
14
+ def self.add_param(hash, k, v)
15
+ if v.is_a? Hash
16
+ v.each do |sub_k, sub_v|
17
+ add_param(hash, "#{k}[#{sub_k}]", sub_v)
18
+ end
19
+ else
20
+ hash[k] = v
21
+ end
22
+ end
23
+
24
+ def self.serialize_value(v)
25
+ allowed_characters = NSCharacterSet.URLQueryAllowedCharacterSet.mutableCopy
26
+ allowed_characters.removeCharactersInString(":#[]@!$&'()*+,;=")
27
+ NSString.alloc.initWithString(v.to_s).stringByAddingPercentEncodingWithAllowedCharacters(allowed_characters)
28
+ end
29
+ end
data/lib/cocoa/json.rb ADDED
@@ -0,0 +1,26 @@
1
+ class JSON
2
+ def self.parse(json_string)
3
+ error_ptr = Pointer.new(:id)
4
+ object = NSJSONSerialization.JSONObjectWithData(json_string.dataUsingEncoding(NSUTF8StringEncoding), options: 0, error: error_ptr)
5
+ unless object
6
+ raise error_ptr[0].description
7
+ end
8
+ object
9
+ end
10
+
11
+ def self.generate(object)
12
+ raise "Invalid JSON object" unless NSJSONSerialization.isValidJSONObject(object)
13
+ error_ptr = Pointer.new(:id)
14
+ data = NSJSONSerialization.dataWithJSONObject(object, options: 0, error: error_ptr)
15
+ unless data
16
+ raise error_ptr[0].description
17
+ end
18
+ data.to_s
19
+ end
20
+ end
21
+
22
+ class Object
23
+ def to_json
24
+ JSON.generate(self)
25
+ end
26
+ end
@@ -4,7 +4,7 @@ class Motion
4
4
  attr_reader :base_url
5
5
 
6
6
  def initialize(base_url = nil)
7
- @base_url = base_url || ""
7
+ @base_url = base_url || ''
8
8
  @headers = Headers.new
9
9
  end
10
10
 
@@ -25,19 +25,31 @@ class Motion
25
25
  @headers
26
26
  end
27
27
 
28
- # FIXME: doesn't work on Android
28
+ # FIXME: doesn't work on Android for some reason
29
29
  # [:get, :post, :put, :patch, :delete].each do |method|
30
- # define_method "#{method}", do |path, params = nil, &callback|
31
- # Request.new(method, base_url + path, headers, params, &callback).call
30
+ # define_method "#{method}", do |path, params = nil, options = nil, &callback|
31
+ # Request.new(method, base_url + path, headers, params, options).perform(&callback)
32
32
  # end
33
33
  # end
34
34
 
35
- def get(path, params = nil, &callback)
36
- Request.new(:get, base_url + path, @headers, params, &callback).call
35
+ def get(path, params = nil, options = nil, &callback)
36
+ Request.new(:get, base_url + path, headers, params, options).perform(&callback)
37
37
  end
38
38
 
39
- def post(path, params = nil, &callback)
40
- Request.new(:post, base_url + path, @headers, params, &callback).call
39
+ def post(path, params = nil, options = nil, &callback)
40
+ Request.new(:post, base_url + path, headers, params, options).perform(&callback)
41
+ end
42
+
43
+ def put(path, params = nil, options = nil, &callback)
44
+ Request.new(:put, base_url + path, headers, params, options).perform(&callback)
45
+ end
46
+
47
+ def patch(path, params = nil, options = nil, &callback)
48
+ Request.new(:patch, base_url + path, headers, params, options).perform(&callback)
49
+ end
50
+
51
+ def delete(path, params = nil, options = nil, &callback)
52
+ Request.new(:delete, base_url + path, headers, params, options).perform(&callback)
41
53
  end
42
54
  end
43
55
  end
@@ -0,0 +1,37 @@
1
+ class Motion
2
+ class HTTP
3
+ class Logger
4
+ def log(message)
5
+ puts message # TODO: add option to enable/disable logging
6
+ end
7
+
8
+ def log_request(request)
9
+ log "Request:\n#{request.http_method.to_s.upcase} #{request.url}"
10
+
11
+ if request.headers
12
+ request.headers.each do |k,v|
13
+ log "#{k}: #{v.inspect}"
14
+ end
15
+ end
16
+
17
+ if request.params
18
+ # log serialized_params
19
+ request.params.each do |k,v|
20
+ log "\t#{k}=#{v.inspect}"
21
+ end
22
+ end
23
+ log "\n"
24
+ end
25
+
26
+ def log_response(response)
27
+ log "Response:"
28
+ log "URL: #{response.original_request.url}"
29
+ log "Status: #{response.status_code}"
30
+ response.headers.each do |key, value|
31
+ log "#{key}: #{value}"
32
+ end
33
+ log "\n#{response.body}"
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,19 +1,19 @@
1
1
  class Motion
2
2
  class HTTP
3
3
  class Request
4
- attr_reader :method, :url, :headers, :body, :callback
4
+ attr_reader :http_method, :url, :headers, :params, :options
5
5
 
6
- def initialize(method, url, headers = nil, params = nil, &callback)
7
- @method = method
6
+ def initialize(http_method, url, headers = nil, params = nil, options = nil)
7
+ @http_method = http_method
8
8
  @url = url
9
9
  @headers = headers || Headers.new
10
- @body = params # TODO: turn params into body and set content-type?
11
- @callback = callback || ->(response) {}
10
+ @params = params
11
+ @options = options
12
12
  end
13
13
 
14
- def call
15
- # TODO: maybe pass self instead of args
16
- Adapter.request(method, url, headers, body, &callback)
14
+ def perform(&callback)
15
+ Motion::HTTP.logger.log_request(self)
16
+ Adapter.perform(self, &callback)
17
17
  end
18
18
  end
19
19
  end
@@ -1,13 +1,13 @@
1
1
  class Motion
2
2
  class HTTP
3
3
  class Response
4
- attr_reader :status_code, :headers, :body, :object
4
+ attr_reader :original_request, :status_code, :headers, :body
5
5
 
6
- def initialize(status_code, headers, body_string, body_object = nil)
6
+ def initialize(original_request, status_code, headers, body)
7
+ @original_request = original_request
7
8
  @status_code = status_code
8
9
  @headers = headers
9
- @body = body_string
10
- @object = body_object
10
+ @body = body
11
11
  end
12
12
 
13
13
  def success?
@@ -15,8 +15,17 @@ class Motion
15
15
  status_code >= 200 && status_code < 300
16
16
  end
17
17
 
18
+ def object
19
+ @object ||= case headers['Content-Type']
20
+ when /^application\/json/, /^application\/vnd.api\+json/
21
+ JSON.parse(body)
22
+ else
23
+ body
24
+ end
25
+ end
26
+
18
27
  def inspect
19
- "<Motion::HTTP::Response status_code:#{status_code} headers:<#{headers.class}> body:<#{body.class}>>"
28
+ "<Motion::HTTP::Response status_code:#{status_code} headers:#{headers.inspect} body:#{body.inspect}>"
20
29
  end
21
30
  end
22
31
  end
data/lib/common/http.rb CHANGED
@@ -1,36 +1,42 @@
1
1
  class Motion
2
2
  class HTTP
3
3
  class << self
4
+ def logger
5
+ @logger ||= Logger.new
6
+ end
7
+
4
8
  def client
5
9
  @client ||= Client.new
6
10
  end
7
11
 
8
12
  # FIXME: doesn't work on Android
9
13
  # [:get, :post, :put, :patch, :delete].each do |method|
10
- # define_method "#{method}", do |url, params = nil, &callback|
11
- # client.send(method, url, params, &callback)
14
+ # define_method "#{method}", do |url, params = nil, options = nil, &callback|
15
+ # client.send(method, url, params, options, &callback)
12
16
  # end
13
17
  # end
14
18
 
15
- def get(url, params = nil, &callback)
16
- client.get(url, params, &callback)
19
+ def get(url, params = nil, options = nil, &callback)
20
+ client.get(url, params, options, &callback)
17
21
  end
18
22
 
19
- def post(url, params = nil, &callback)
20
- client.post(url, params, &callback)
23
+ def post(url, params = nil, options = nil, &callback)
24
+ client.post(url, params, options, &callback)
21
25
  end
22
26
 
23
- def put(url, params = nil, &callback)
24
- client.put(url, params, &callback)
27
+ def put(url, params = nil, options = nil, &callback)
28
+ client.put(url, params, options, &callback)
25
29
  end
26
30
 
27
- def patch(url, params = nil, &callback)
28
- client.patch(url, params, &callback)
31
+ def patch(url, params = nil, options = nil, &callback)
32
+ client.patch(url, params, options, &callback)
29
33
  end
30
34
 
31
- def delete(url, params = nil, &callback)
32
- client.delete(url, params, &callback)
35
+ def delete(url, params = nil, options = nil, &callback)
36
+ client.delete(url, params, options, &callback)
33
37
  end
34
38
  end
35
39
  end
36
40
  end
41
+
42
+ HTTP = Motion::HTTP # alias as simply HTTP
data/lib/motion-http.rb CHANGED
@@ -16,11 +16,7 @@ Motion::Project::App.setup do |app|
16
16
  dependency "com.squareup.okhttp3:okhttp:3.9.0"
17
17
  end
18
18
  when :ios, :tvos, :osx, :watchos, :'ios-extension'
19
- require "motion-cocoapods"
20
19
  app.files.unshift(*Dir.glob(File.join(lib_dir_path, "cocoa/**/*.rb")))
21
- app.pods do
22
- pod "AFNetworking", "~> 3.1"
23
- end
24
20
  else
25
21
  raise "Project template #{Motion::Project::App.template} not supported by motion-http"
26
22
  end
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: 0.1.1
4
+ version: 0.2.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: 2018-03-26 00:00:00.000000000 Z
11
+ date: 2019-03-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A cross-platform HTTP client for RubyMotion that's quick and easy to
14
14
  use.
@@ -22,9 +22,12 @@ files:
22
22
  - lib/android/adapter.rb
23
23
  - lib/android/json.rb
24
24
  - lib/cocoa/adapter.rb
25
+ - lib/cocoa/form_data_serializer.rb
26
+ - lib/cocoa/json.rb
25
27
  - lib/common/http.rb
26
28
  - lib/common/http/client.rb
27
29
  - lib/common/http/headers.rb
30
+ - lib/common/http/logger.rb
28
31
  - lib/common/http/request.rb
29
32
  - lib/common/http/response.rb
30
33
  - lib/motion-http.rb
@@ -48,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
48
51
  version: '0'
49
52
  requirements: []
50
53
  rubyforge_project:
51
- rubygems_version: 2.6.13
54
+ rubygems_version: 2.7.6
52
55
  signing_key:
53
56
  specification_version: 4
54
57
  summary: A cross-platform HTTP client for RubyMotion that's quick and easy to use.