motion-http 0.1.1 → 0.2.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
- 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.