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)
             }