Support batch request
diff --git a/PredictionIOSDK/PredictionIOSDK.swift b/PredictionIOSDK/PredictionIOSDK.swift
index ab65720..c5305c1 100644
--- a/PredictionIOSDK/PredictionIOSDK.swift
+++ b/PredictionIOSDK/PredictionIOSDK.swift
@@ -159,11 +159,15 @@
/// The access key for your application
let accessKey: String
- private var _fullURLForCreatingEvent: String {
+ private var URLForCreatingEvent: String {
return "\(baseURL)/events.json?accessKey=\(accessKey)"
}
- private func _fullURLForGettingEvent(eventID: String) -> String {
+ private var URLForCreatingBatchEvents: String {
+ return "\(baseURL)/batch/events.json?accessKey=\(accessKey)"
+ }
+
+ private func URLForGettingEvent(eventID: String) -> String {
return "\(baseURL)/events/\(eventID).json?accessKey=\(accessKey)"
}
@@ -190,7 +194,26 @@
public func createEvent(event: Event, completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void) {
assert((event.event == Event.UnsetEvent && event.properties?.isEmpty == true) == false, "Properties cannot be empty for $unset event")
- networkManager.request(.POST, _fullURLForCreatingEvent, parameters: event.toDictionary(), encoding: .JSON)
+ networkManager.request(.POST, URLForCreatingEvent, parameters: event.toDictionary(), encoding: .JSON)
+ .responseJSON { (request, response, JSON, error) -> Void in
+ completionHandler(request, response, JSON, error)
+ }
+ }
+
+ /**
+ Create events with a batch request.
+
+
+ */
+ public func createBatchEvents(events: [Event], completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void) {
+ let eventDicts = events.map { event in event.toDictionary() }
+ var error: NSError?
+ let request = NSMutableURLRequest(URL: NSURL(string: URLForCreatingBatchEvents)!)
+ request.HTTPMethod = Method.POST.rawValue
+ request.setValue("application/json", forHTTPHeaderField: "Content-Type")
+ request.HTTPBody = NSJSONSerialization.dataWithJSONObject(eventDicts, options: NSJSONWritingOptions.allZeros, error: &error)
+
+ networkManager.request(request)
.responseJSON { (request, response, JSON, error) -> Void in
completionHandler(request, response, JSON, error)
}
@@ -206,7 +229,7 @@
*/
public func getEvent(eventID: String, completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void) {
if let escapedEventID = eventID.stringByReplacingPercentEscapesUsingEncoding(NSUTF8StringEncoding) {
- networkManager.request(.GET, _fullURLForGettingEvent(escapedEventID))
+ networkManager.request(.GET, URLForGettingEvent(escapedEventID))
.responseJSON { (request, response, JSON, error) -> Void in
completionHandler(request, response, JSON, error)
}
@@ -221,7 +244,7 @@
*/
public func deleteEvent(eventID: String, completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void) {
if let escapedEventID = eventID.stringByReplacingPercentEscapesUsingEncoding(NSUTF8StringEncoding) {
- networkManager.request(.DELETE, _fullURLForGettingEvent(escapedEventID))
+ networkManager.request(.DELETE, URLForGettingEvent(escapedEventID))
.responseJSON { (request, response, JSON, error) -> Void in
completionHandler(request, response, JSON, error)
}
@@ -410,7 +433,7 @@
*/
public class EngineClient : BaseClient {
- private var _fullURL: String {
+ private var URLForQuerying: String {
return "\(baseURL)/queries.json"
}
@@ -433,7 +456,7 @@
:param: completionHandler The callback to be executed when the request has finished.
*/
public func sendQuery(query: [String: AnyObject], completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void) {
- networkManager.request(.POST, _fullURL, parameters: query, encoding: .JSON)
+ networkManager.request(.POST, URLForQuerying, parameters: query, encoding: .JSON)
.responseJSON { (request, response, JSON, error) -> Void in
completionHandler(request, response, JSON, error)
}