         return nil
     }
     
+    /**
+    Find managed objects with fetchRequest
+    
+    :param: fetchRequest
+    
+    :returns: array of managed objects
+    */
     public class func find(#fetchRequest: NSFetchRequest) -> [NSManagedObject]? {
         var error: NSError? = nil
         return ActiveRecord.driver?.read(fetchRequest, context: ActiveRecord.driver?.context(), error: &error)
     }
     
+    /**
+    Count managed objects
+    
+    :param: entityName
+    :param: predicate
+    
+    :returns: number of managed objects
+    */
     public class func count(#entityName: String, predicate: NSPredicate? = nil) -> Int {
         if let driver = ActiveRecord.driver {
             var error: NSError? = nil

        return nil
    }
    
    public func save() {
        var error: NSError? = nil
        ActiveRecord.driver?.save(self.managedObjectContext, error: &error)
    }
    
    public func delete() {
        ActiveRecord.driver?.delete(object: self)
    }
    
    public class func find(#entityName: String, predicate: NSPredicate? = nil, sortDescriptors: [NSSortDescriptor]? = nil, offset: Int? = 0, limit: Int? = 0) -> [NSManagedObject]? {
        var error: NSError? = nil
        return ActiveRecord.driver?.read(entityName, predicate: predicate, offset: offset, limit: limit, context: ActiveRecord.driver?.context(), error: &error)
    }
    
    public class func findFirst(#entityName: String, predicate: NSPredicate? = nil, sortDescriptors: [NSSortDescriptor]? = nil) -> NSManagedObject? {
        var error: NSError? = nil
        if let objects = ActiveRecord.driver?.read(entityName, predicate: predicate, sortDescriptors: sortDescriptors, offset: 0, limit: 1, context: ActiveRecord.driver?.context(), error: &error) {


public extension NSManagedObject {
    
    /**
    Create a managed object
    
    :param: entityName entityName of object to create.
    
    :returns: Entity Description
    */
    public class func create(#entityName: String) -> NSManagedObject? {
        return ActiveRecord.driver?.create(entityName, context: ActiveRecord.driver?.context())
    }
    
    /**
    Create a temporary managed object which does not live inside a managed object context.
    
    :param: entityName entityName of object to create.
    
    :returns: Entity Description
    */
    public class func createAsTemporary(#entityName: String) -> NSManagedObject? {
        if let context = NSManagedObjectContext.context() {
            if let entityDescription = NSEntityDescription.entityForName(entityName, inManagedObjectContext: context) {
