Forked from JoshuaSullivan/human.swift.motemplate
Last active
November 13, 2016 14:57
-
-
Save radianttap/e975e3cfc22fcfd9a329fd25221ba0a7 to your computer and use it in GitHub Desktop.
Better mogenerator Swift 3 templates, using code very similar to what Xcode produces but with mogenerator goodies on the top
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
import CoreData | |
@objc(<$managedObjectClassName$>) | |
public class <$managedObjectClassName$>: <$customSuperentity$> { | |
// MARK: - Life cycle methods | |
public override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) { | |
super.init(entity: entity, insertInto: context) | |
} | |
public required convenience init?(managedObjectContext: NSManagedObjectContext) { | |
guard let entity = <$sanitizedManagedObjectClassName$>.entity(managedObjectContext: managedObjectContext) else { return nil } | |
self.init(entity: entity, insertInto: managedObjectContext) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// DO NOT EDIT. This file is machine-generated and constantly overwritten. | |
// Make changes to <$managedObjectClassName$>.swift instead. | |
import CoreData | |
<$if hasAdditionalHeaderFile$>import <$additionalHeaderFileName$><$endif$> | |
<$if hasCustomBaseCaseImport$>import <$baseClassImport$><$endif$> | |
public | |
extension <$managedObjectClassName$> { | |
<$if noninheritedAttributes.@count > 0$> | |
public struct Attributes {<$foreach Attribute noninheritedAttributes do$> | |
static let <$Attribute.name$> = "<$Attribute.name$>"<$endforeach do$> | |
} | |
<$endif$> | |
<$if noninheritedRelationships.@count > 0$> | |
public struct Relationships {<$foreach Relationship noninheritedRelationships do$> | |
static let <$Relationship.name$> = "<$Relationship.name$>"<$endforeach do$> | |
} | |
<$endif$> | |
<$if noninheritedFetchedProperties.@count > 0$> | |
public struct FetchedProperties {<$foreach FetchedProperty noninheritedFetchedProperties do$> | |
static let <$FetchedProperty.name$> = "<$FetchedProperty.name$>"<$endforeach do$> | |
} | |
<$endif$> | |
<$if hasUserInfoKeys$> | |
public struct UserInfo {<$foreach UserInfo userInfoKeyValues do$> | |
static let <$UserInfo.key$> = "<$UserInfo.key$>"<$endforeach do$> | |
} | |
<$endif$> | |
// MARK: - Class methods | |
<$if (hasCustomSuperclass || (hasCustomSuperentity && TemplateVar.overrideBaseClass))$>override <$endif$>public class var entityName: String { | |
return "<$name$>" | |
} | |
<$if (hasCustomSuperclass || (hasCustomSuperentity && TemplateVar.overrideBaseClass))$>override <$endif$>public class func entity(managedObjectContext: NSManagedObjectContext) -> NSEntityDescription? { | |
return NSEntityDescription.entity(forEntityName: self.entityName, in: managedObjectContext) | |
} | |
// MARK: - Properties | |
<$foreach Attribute noninheritedAttributes do$> | |
<$if Attribute.hasDefinedAttributeType$> | |
<$if Attribute.hasScalarAttributeType$> | |
<$if Attribute.isReadonly$> | |
public var <$Attribute.name$>: <$if Attribute.usesScalarAttributeType$><$Attribute.scalarAttributeType$><$if Attribute.isOptional$> // Optional scalars not supported<$endif$><$else$>NSNumber<$if Attribute.isOptional$>?<$else$>!<$endif$><$endif$> | |
{ | |
self.willAccessValueForKey(<$managedObjectClassName$>Attributes.<$Attribute.name$>.rawValue) | |
let <$Attribute.name$> = self.primitiveValue(forKey: <$sanitizedManagedObjectClassName$>Attributes.<$Attribute.name$>.rawValue) as? <$if Attribute.usesScalarAttributeType$><$Attribute.scalarAttributeType$><$else$>NSNumber<$endif$> | |
self.didAccessValueForKey(<$managedObjectClassName$>Attributes.<$Attribute.name$>.rawValue) | |
return <$Attribute.name$> | |
} | |
<$else$> | |
@NSManaged public var <$Attribute.name$>: <$if Attribute.usesScalarAttributeType$><$Attribute.scalarAttributeType$><$if Attribute.isOptional$> // Optional scalars not supported<$endif$><$else$>NSNumber<$if Attribute.isOptional$>?<$else$>!<$endif$><$endif$> | |
<$endif$> | |
<$else$> | |
<$if Attribute.isReadonly$> | |
public var <$Attribute.name$>: <$Attribute.objectAttributeType$><$if Attribute.isOptional$>?<$else$>!<$endif$> | |
{ | |
self.willAccessValueForKey(<$managedObjectClassName$>Attributes.<$Attribute.name$>.rawValue) | |
let <$Attribute.name$> = self.primitiveValue(forKey: <$sanitizedManagedObjectClassName$>Attributes.<$Attribute.name$>.rawValue) as? <$Attribute.objectAttributeType$> | |
self.didAccessValueForKey(<$managedObjectClassName$>Attributes.<$Attribute.name$>.rawValue) | |
return <$Attribute.name$> | |
} | |
<$else$> | |
@NSManaged public var <$Attribute.name$>: <$Attribute.objectAttributeType$><$if Attribute.isOptional$>?<$else$>!<$endif$> | |
<$endif$> | |
<$endif$> | |
<$endif$> | |
<$endforeach do$> | |
// MARK: - Relationships | |
<$foreach Relationship noninheritedRelationships do$> | |
<$if Relationship.isToMany$> | |
@NSManaged public var <$Relationship.name$>: <$Relationship.immutableCollectionClassName$> | |
<$else$> | |
@NSManaged public var <$Relationship.name$>: <$Relationship.destinationEntity.managedObjectClassName$><$if Relationship.isOptional$>?<$endif$> | |
<$endif$> | |
<$endforeach do$> | |
<$foreach FetchRequest prettyFetchRequests do$> | |
<$if FetchRequest.singleResult$> | |
class func fetch<$FetchRequest.name.initialCapitalString$>(managedObjectContext: NSManagedObjectContext!<$foreach Binding FetchRequest.bindings do2$>, <$Binding.name$>: <$Binding.type$><$endforeach do2$>) -> AnyObject? { | |
return self.fetch<$FetchRequest.name.initialCapitalString$>(managedObjectContext<$foreach Binding FetchRequest.bindings do2$>, <$Binding.name$>: <$Binding.name$><$endforeach do2$>, error: nil) | |
} | |
class func fetch<$FetchRequest.name.initialCapitalString$>(managedObjectContext: NSManagedObjectContext!<$foreach Binding FetchRequest.bindings do2$>, <$Binding.name$>: <$Binding.type$><$endforeach do2$>, error outError: NSErrorPointer) -> AnyObject? { | |
let model = managedObjectContext.persistentStoreCoordinator!.managedObjectModel | |
let substitutionVariables = [<$if FetchRequest.hasBindings$><$foreach Binding FetchRequest.bindings do2$> | |
"<$Binding.name$>": <$Binding.name$>, | |
<$endforeach do2$><$endif$> ] | |
let fetchRequest = model.fetchRequestFromTemplateWithName("<$FetchRequest.name$>", substitutionVariables: substitutionVariables) | |
assert(fetchRequest != nil, "Can't find fetch request named \"<$FetchRequest.name$>\".") | |
var error: NSError? = nil | |
var result: AnyObject? = nil | |
let results = managedObjectContext.executeFetchRequest(fetchRequest!, error: &error) | |
if error != nil { | |
outError.memory = error | |
} else { | |
switch results!.count { | |
case 0: | |
// Nothing found matching the fetch request. That's cool, though: we'll just return nil. | |
break | |
case 1: | |
result = results![0] | |
default: | |
NSLog("WARN fetch request <$FetchRequest.name$>: 0 or 1 objects expected, %lu found (substitutionVariables:%@, results:%@)", | |
results!.count, | |
substitutionVariables, | |
results!); | |
} | |
} | |
return result; | |
} | |
<$else$> | |
class func fetch<$FetchRequest.name.initialCapitalString$>(managedObjectContext: NSManagedObjectContext!<$foreach Binding FetchRequest.bindings do2$>, <$Binding.name$>: <$Binding.type$><$endforeach do2$>) -> [AnyObject] { | |
return self.fetch<$FetchRequest.name.initialCapitalString$>(managedObjectContext<$foreach Binding FetchRequest.bindings do2$>, <$Binding.name$>: <$Binding.name$><$endforeach do2$>, error: nil) | |
} | |
class func fetch<$FetchRequest.name.initialCapitalString$>(managedObjectContext: NSManagedObjectContext!<$foreach Binding FetchRequest.bindings do2$>, <$Binding.name$>: <$Binding.type$><$endforeach do2$>, error outError: NSErrorPointer) -> [AnyObject]! { | |
let model = managedObjectContext.persistentStoreCoordinator!.managedObjectModel | |
let substitutionVariables : [NSObject : AnyObject] = [<$if FetchRequest.hasBindings$><$foreach Binding FetchRequest.bindings do2$> | |
"<$Binding.name$>": <$Binding.name$>, | |
<$endforeach do2$><$else$>:<$endif$>] | |
let fetchRequest = model.fetchRequestFromTemplateWithName("<$FetchRequest.name$>", substitutionVariables: substitutionVariables) | |
assert(fetchRequest != nil, "Can't find fetch request named \"<$FetchRequest.name$>\".") | |
var error: NSError? = nil | |
let results = managedObjectContext.executeFetchRequest(fetchRequest!, error: &error) | |
if error != nil { | |
outError.memory = error | |
} | |
return results | |
} | |
<$endif$> | |
<$endforeach do$> | |
<$foreach FetchedProperty noninheritedFetchedProperties do$> | |
@NSManaged public let <$FetchedProperty.name$>: [<$FetchedProperty.entity.managedObjectClassName$>] | |
<$endforeach do$> | |
} | |
<$foreach Relationship noninheritedRelationships do$><$if Relationship.isToMany$> | |
extension <$managedObjectClassName$> { | |
@objc(add<$Relationship.name.initialCapitalString$>Object:) | |
@NSManaged public func addTo<$Relationship.name.initialCapitalString$>(_ value: <$Relationship.destinationEntity.managedObjectClassName$>) | |
@objc(remove<$Relationship.name.initialCapitalString$>Object:) | |
@NSManaged public func removeFrom<$Relationship.name.initialCapitalString$>(_ value: <$Relationship.destinationEntity.managedObjectClassName$>) | |
@objc(add<$Relationship.name.initialCapitalString$>:) | |
@NSManaged public func addTo<$Relationship.name.initialCapitalString$>(_ values: <$Relationship.immutableCollectionClassName$>) | |
@objc(remove<$Relationship.name.initialCapitalString$>:) | |
@NSManaged public func removeFrom<$Relationship.name.initialCapitalString$>(_ values: <$Relationship.immutableCollectionClassName$>) | |
} | |
<$endif$><$endforeach do$> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment