diff --git a/bin/objc-petstore.sh b/bin/objc-petstore.sh index 513b7535786..d4df6924bf8 100755 --- a/bin/objc-petstore.sh +++ b/bin/objc-petstore.sh @@ -26,6 +26,6 @@ fi # if you've executed sbt assembly previously it will use that instead. export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" -ags="$@ generate -t modules/swagger-codegen/src/main/resources/objc -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l objc -o samples/client/petstore/objc" +ags="$@ generate -t modules/swagger-codegen/src/main/resources/objc -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l objc -o samples/client/petstore/objc --additional-properties coreData=y" java -DappName=PetstoreClient $JAVA_OPTS -jar $executable $ags diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java index 0a2a812ab0e..68ba63a9382 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ObjcClientCodegen.java @@ -1,14 +1,7 @@ package io.swagger.codegen.languages; -import io.swagger.codegen.CliOption; -import io.swagger.codegen.CodegenConfig; -import io.swagger.codegen.CodegenConstants; -import io.swagger.codegen.CodegenOperation; -import io.swagger.codegen.CodegenParameter; -import io.swagger.codegen.CodegenProperty; -import io.swagger.codegen.CodegenType; -import io.swagger.codegen.DefaultCodegen; -import io.swagger.codegen.SupportingFile; +import io.swagger.codegen.*; +import io.swagger.models.Model; import io.swagger.models.properties.*; import java.io.File; @@ -28,9 +21,8 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { public static final String AUTHOR_EMAIL = "authorEmail"; public static final String LICENSE = "license"; public static final String GIT_REPO_URL = "gitRepoURL"; - public static final String DEFAULT_LICENSE = "Apache License, Version 2.0"; - + public static final String CORE_DATA = "coreData"; public static final String BinaryDataType = "ObjcClientCodegenBinaryData"; protected Set foundationClasses = new HashSet(); @@ -47,6 +39,8 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { protected String modelFilesPath = "Model/"; protected String coreFilesPath = "Core/"; protected String apiFilesPath = "Api/"; + + protected boolean generateCoreData = false; protected Set advancedMapingTypes = new HashSet(); @@ -75,6 +69,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { defaultIncludes.add("NSDictionary"); defaultIncludes.add("NSMutableArray"); defaultIncludes.add("NSMutableDictionary"); + defaultIncludes.add("NSManagedObject"); defaultIncludes.add(BinaryDataType); @@ -156,6 +151,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { instantiationTypes.put("map", "NSMutableDictionary"); cliOptions.clear(); + cliOptions.add(new CliOption(CORE_DATA, "Should generate core data models").defaultValue("n")); cliOptions.add(new CliOption(CLASS_PREFIX, "prefix for generated classes (convention: Abbreviation of pod name e.g. `HN` for `HackerNews`).`") .defaultValue("SWG")); cliOptions.add(new CliOption(POD_NAME, "cocoapods package name (convention: CameCase).") @@ -195,6 +191,12 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { setPodVersion((String) additionalProperties.get(CodegenConstants.POD_VERSION)); } + if (additionalProperties.containsKey(CORE_DATA)) { + Object coreData = additionalProperties.get(CORE_DATA); + if(((String)coreData).equalsIgnoreCase("y")) { + generateCoreData = true; + } + } if (additionalProperties.containsKey(CLASS_PREFIX)) { setClassPrefix((String) additionalProperties.get(CLASS_PREFIX)); } @@ -211,6 +213,13 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { setGitRepoURL((String) additionalProperties.get(GIT_REPO_URL)); } + if(generateCoreData) { + modelTemplateFiles.put("NSManagedObject-header.mustache", "ManagedObject.h"); + modelTemplateFiles.put("NSManagedObject-body.mustache", "ManagedObject.m"); + modelTemplateFiles.put("NSManagedObjectBuilder-header.mustache", "ManagedObjectBuilder.h"); + modelTemplateFiles.put("NSManagedObjectBuilder-body.mustache", "ManagedObjectBuilder.m"); + } + additionalProperties.put(POD_NAME, podName); additionalProperties.put(CodegenConstants.POD_VERSION, podVersion); additionalProperties.put(CLASS_PREFIX, classPrefix); @@ -222,6 +231,7 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { // make api and model doc path available in mustache template additionalProperties.put("apiDocPath", apiDocPath); additionalProperties.put("modelDocPath", modelDocPath); + additionalProperties.put("useCoreData", generateCoreData); modelPackage = podName; apiPackage = podName; @@ -251,6 +261,11 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); supportingFiles.add(new SupportingFile("git_push.sh.mustache", "", "git_push.sh")); supportingFiles.add(new SupportingFile("gitignore.mustache", "", ".gitignore")); + + if(generateCoreData) { + supportingFiles.add(new SupportingFile("xccurrentversion.mustache", (modelPackage() + "/" + modelFilesPath + "/").replace("/", File.separator) + classPrefix + "Model.xcdatamodeld", ".xccurrentversion")); + supportingFiles.add(new SupportingFile("Model.xcdatamodel.mustache",(modelPackage() + "/" + modelFilesPath + "/").replace("/", File.separator) + classPrefix + "Model.xcdatamodeld" + File.separator + classPrefix + "Model.xcdatamodel", "contents")); + } } @Override @@ -288,6 +303,15 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { return toModelNameWithoutReservedWordCheck(type); } + public CodegenProperty coreDatafromProperty(String name, Property p) { + CodegenProperty property = fromProperty(name, p); + if(!generateCoreData) { + return property; + } + property.baseType = getTypeCoreDataDeclaration(p); + return property; + } + @Override public String getTypeDeclaration(Property p) { if (p instanceof ArrayProperty) { @@ -359,6 +383,77 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { } } + + public String getTypeCoreDataDeclaration(Property p) { + if (p instanceof ArrayProperty) { + ArrayProperty ap = (ArrayProperty) p; + Property inner = ap.getItems(); + String innerType = getSwaggerType(inner); + + String innerTypeDeclaration = getTypeDeclaration(inner); + if (innerTypeDeclaration.endsWith("*")) { + innerTypeDeclaration = innerTypeDeclaration.substring(0, innerTypeDeclaration.length() - 1); + } + + if(innerTypeDeclaration.equalsIgnoreCase(BinaryDataType)) { + return "NSData*"; + } + // In this codition, type of property p is array of primitive, + // return container type with pointer, e.g. `NSArray**' + if (languageSpecificPrimitives.contains(innerTypeDeclaration)) { + return getSwaggerType(p) + "<" + innerTypeDeclaration + "*>*"; + } + // In this codition, type of property p is array of model, + // return container type combine inner type with pointer, e.g. `NSArray*' + else { + for (String sd : advancedMapingTypes) { + if(innerTypeDeclaration.startsWith(sd)) { + return getSwaggerType(p) + "<" + innerTypeDeclaration + "*>*"; + } + } + return getSwaggerType(p) + "<" + innerTypeDeclaration + ">*"; + } + } else if (p instanceof MapProperty) { + MapProperty mp = (MapProperty) p; + Property inner = mp.getAdditionalProperties(); + + String innerTypeDeclaration = getTypeDeclaration(inner); + + if (innerTypeDeclaration.endsWith("*")) { + innerTypeDeclaration = innerTypeDeclaration.substring(0, innerTypeDeclaration.length() - 1); + } + if (languageSpecificPrimitives.contains(innerTypeDeclaration)) { + return getSwaggerType(p) + "*"; + } else { + for (String s : advancedMapingTypes) { + if(innerTypeDeclaration.startsWith(s)) { + return getSwaggerType(p) + "*"; + } + } + return getSwaggerType(p) + "*"; + } + } else { + String swaggerType = getSwaggerType(p); + + // In this codition, type of p is objective-c primitive type, e.g. `NSSNumber', + // return type of p with pointer, e.g. `NSNumber*' + if (languageSpecificPrimitives.contains(swaggerType) && + foundationClasses.contains(swaggerType)) { + return swaggerType + "*"; + } + // In this codition, type of p is c primitive type, e.g. `bool', + // return type of p, e.g. `bool' + else if (languageSpecificPrimitives.contains(swaggerType)) { + return swaggerType; + } + // In this codition, type of p is objective-c object type, e.g. `SWGPet', + // return type of p with pointer, e.g. `SWGPet*' + else { + return swaggerType + "*"; + } + } + } + @Override public String toModelName(String type) { // model name cannot use reserved keyword @@ -579,6 +674,12 @@ public class ObjcClientCodegen extends DefaultCodegen implements CodegenConfig { return objs; } + @Override + public void postProcessModelProperty(CodegenModel model, CodegenProperty property){ + super.postProcessModelProperty(model,property); + property.vendorExtensions.put("x-uppercaseName", camelize(property.name)); + } + /** * Return the default value of the property * diff --git a/modules/swagger-codegen/src/main/resources/objc/JSONResponseSerializer-body.mustache b/modules/swagger-codegen/src/main/resources/objc/JSONResponseSerializer-body.mustache index 3a19dd1ca4e..7fa5e7b19e0 100644 --- a/modules/swagger-codegen/src/main/resources/objc/JSONResponseSerializer-body.mustache +++ b/modules/swagger-codegen/src/main/resources/objc/JSONResponseSerializer-body.mustache @@ -1,13 +1,5 @@ #import "{{classPrefix}}JSONResponseSerializer.h" -static BOOL JSONParseError(NSError *error) { - if ([error.domain isEqualToString:NSCocoaErrorDomain] && error.code == 3840) { - return YES; - } - - return NO; -} - @implementation {{classPrefix}}JSONResponseSerializer /// @@ -17,7 +9,7 @@ static BOOL JSONParseError(NSError *error) { /// /// @param response The response to be processed. /// @param data The response data to be decoded. -/// @param error The error that occurred while attempting to decode the respnse data. +/// @param error The error that occurred while attempting to decode the response data. /// /// @return The object decoded from the specified response data. /// @@ -27,7 +19,7 @@ static BOOL JSONParseError(NSError *error) { NSDictionary *responseJson = [super responseObjectForResponse:response data:data error:error]; // if response data is not a valid json, return string of data. - if (JSONParseError(*error)) { + if ([self isParseError:*error]) { *error = nil; NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; return responseString; @@ -36,4 +28,12 @@ static BOOL JSONParseError(NSError *error) { return responseJson; } +-(BOOL)isParseError:(NSError *)error { + return [error.domain isEqualToString:NSCocoaErrorDomain] && error.code == 3840; +} + ++ (instancetype)serializer { + return [self serializerWithReadingOptions:NSJSONReadingAllowFragments]; +} + @end diff --git a/modules/swagger-codegen/src/main/resources/objc/Model.xcdatamodel.mustache b/modules/swagger-codegen/src/main/resources/objc/Model.xcdatamodel.mustache new file mode 100644 index 00000000000..bc391cbd0ad --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/objc/Model.xcdatamodel.mustache @@ -0,0 +1,9 @@ + + + + {{#models}}{{#model}} +{{#vars}}{{#complexType}} {{/complexType}}{{^complexType}} {{/complexType}} +{{/vars}} + + {{/model}}{{/models}} + \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/objc/NSManagedObject-body.mustache b/modules/swagger-codegen/src/main/resources/objc/NSManagedObject-body.mustache new file mode 100644 index 00000000000..c8e563e75e8 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/objc/NSManagedObject-body.mustache @@ -0,0 +1,18 @@ +{{#models}} +{{#model}} +#import "{{classname}}ManagedObject.h" + +/** +* NOTE: This class is auto generated by the swagger code generator program. +* https://github.com/swagger-api/swagger-codegen +* Do not edit the class manually. +*/ +@implementation {{classname}}ManagedObject + +{{#vars}} +@dynamic {{name}}; +{{/vars}} + +{{/model}} +@end +{{/models}} diff --git a/modules/swagger-codegen/src/main/resources/objc/NSManagedObject-header.mustache b/modules/swagger-codegen/src/main/resources/objc/NSManagedObject-header.mustache new file mode 100644 index 00000000000..2001f6c227c --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/objc/NSManagedObject-header.mustache @@ -0,0 +1,31 @@ +#import +#import + +/** + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen + * Do not edit the class manually. + */ + +{{#imports}}#import "{{import}}ManagedObject.h" +{{/imports}} +{{newline}} +{{#models}} +{{#model}} + +@interface {{classname}}ManagedObject : {{#parent}}{{{parent}}}{{/parent}}{{^parent}}NSManagedObject{{/parent}} + +{{#vars}} +{{#description}}/* {{{description}}} {{^required}}[optional]{{/required}} + */{{/description}} +@property (nullable, nonatomic, retain) {{^complexType}}{{{ datatype }}}{{/complexType}}{{#complexType}}{{#isListContainer}}NSSet*{{/isListContainer}}{{^isListContainer}}{{{complexType}}}ManagedObject*{{/isListContainer}}{{/complexType}} {{name}}; +{{/vars}} + +{{#vars}}{{#isListContainer}}{{#complexType}}- (void)add{{vendorExtensions.x-uppercaseName}}Object:({{complexType}}ManagedObject *)value; +- (void)remove{{vendorExtensions.x-uppercaseName}}Object:({{complexType}}ManagedObject *)value; +- (void)add{{vendorExtensions.x-uppercaseName}}:(NSSet *)values; +- (void)remove{{vendorExtensions.x-uppercaseName}}:(NSSet *)values; +{{/complexType}}{{/isListContainer}}{{/vars}} +@end +{{/model}} +{{/models}} diff --git a/modules/swagger-codegen/src/main/resources/objc/NSManagedObjectBuilder-body.mustache b/modules/swagger-codegen/src/main/resources/objc/NSManagedObjectBuilder-body.mustache new file mode 100644 index 00000000000..70f97418eed --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/objc/NSManagedObjectBuilder-body.mustache @@ -0,0 +1,76 @@ + +{{#models}}{{#model}} +#import "{{classname}}ManagedObjectBuilder.h" + +/** +* NOTE: This class is auto generated by the swagger code generator program. +* https://github.com/swagger-api/swagger-codegen +* Do not edit the class manually. +*/ + +@implementation {{classname}}ManagedObjectBuilder + +-(instancetype)init { + self = [super init]; + if (self != nil) { +{{#vars}}{{#complexType}} _{{name}}Builder = [[{{complexType}}ManagedObjectBuilder alloc] init]; +{{/complexType}}{{/vars}} } + return self; +} + +-({{classname}}ManagedObject*)createNew{{classname}}ManagedObjectInContext:(NSManagedObjectContext*)context { + {{classname}}ManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([{{classname}}ManagedObject class]) inManagedObjectContext:context]; + return managedObject; +} + +-({{classname}}ManagedObject*){{classname}}ManagedObjectFrom{{classname}}:({{classname}}*){{name}} context:(NSManagedObjectContext*)context { + {{classname}}ManagedObject* new{{classname}} = [self createNew{{{classname}}}ManagedObjectInContext:context]; + [self update{{classname}}ManagedObject:new{{classname}} with{{classname}}:{{name}}]; + return new{{classname}}; +} + +-(void)update{{classname}}ManagedObject:({{classname}}ManagedObject*)managedObject with{{classname}}:({{classname}}*)object { + if(!managedObject || !object) { + return; + } +{{#vars}}{{^complexType}} managedObject.{{name}} = [object.{{name}} copy];{{/complexType}}{{#complexType}}{{#isListContainer}} if(object.{{name}}) { + NSMutableSet * convertedObjs = [NSMutableSet set]; + for (id innerObject in object.{{name}}) { + id convertedObj = [self.{{name}}Builder {{complexType}}ManagedObjectFrom{{complexType}}:innerObject context:managedObject.managedObjectContext]; + [convertedObjs addObject:convertedObj]; + } + managedObject.{{name}} = convertedObjs; + }{{/isListContainer}}{{^isListContainer}} + if(!managedObject.{{name}}) { + managedObject.{{name}} = [self.{{name}}Builder {{complexType}}ManagedObjectFrom{{complexType}}:object.{{name}} context:managedObject.managedObjectContext]; + } else { + [self.{{name}}Builder update{{complexType}}ManagedObject:managedObject.{{name}} with{{complexType}}:object.{{name}}]; + }{{/isListContainer}}{{/complexType}} + {{/vars}} +} + +-({{classname}}*){{classname}}From{{classname}}ManagedObject:({{classname}}ManagedObject*)obj { + if(!obj) { + return nil; + } + {{classname}}* new{{classname}} = [[{{classname}} alloc] init]; + [self update{{classname}}:new{{classname}} with{{classname}}ManagedObject:obj]; + return new{{classname}}; +} + +-(void)update{{classname}}:({{classname}}*)new{{classname}} with{{classname}}ManagedObject:({{classname}}ManagedObject*)obj { +{{#vars}}{{^complexType}} new{{classname}}.{{name}} = [obj.{{name}} copy];{{/complexType}}{{#complexType}}{{#isListContainer}} if(obj.{{name}} != nil) { + NSMutableArray* convertedObjs = [NSMutableArray array]; + for (id innerObject in obj.{{name}}) { + id convertedObj = [self.{{name}}Builder {{complexType}}From{{complexType}}ManagedObject:innerObject]; + [convertedObjs addObject:convertedObj]; + } + new{{classname}}.{{name}} = ({{{ datatype }}})convertedObjs; + } + {{/isListContainer}}{{^isListContainer}} new{{classname}}.{{name}} = [self.{{name}}Builder {{complexType}}From{{complexType}}ManagedObject:obj.{{name}}];{{/isListContainer}}{{/complexType}} + {{/vars}} +} + +@end +{{/model}} +{{/models}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/objc/NSManagedObjectBuilder-header.mustache b/modules/swagger-codegen/src/main/resources/objc/NSManagedObjectBuilder-header.mustache new file mode 100644 index 00000000000..6a7033bf19a --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/objc/NSManagedObjectBuilder-header.mustache @@ -0,0 +1,35 @@ +#import +#import + +{{#imports}}#import "{{import}}ManagedObjectBuilder.h" +{{/imports}} +{{#models}} +{{#model}} + +#import "{{classPrefix}}{{name}}ManagedObject.h" +#import "{{classPrefix}}{{name}}.h" + +/** + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen + * Do not edit the class manually. + */ + +@interface {{classname}}ManagedObjectBuilder : NSObject + +{{#vars}}{{#complexType}}@property (nonatomic, strong) {{complexType}}ManagedObjectBuilder * {{name}}Builder; +{{/complexType}}{{/vars}} + +-({{classname}}ManagedObject*)createNew{{classname}}ManagedObjectInContext:(NSManagedObjectContext*)context; + +-({{classname}}ManagedObject*){{classname}}ManagedObjectFrom{{classname}}:({{classname}}*){{name}} context:(NSManagedObjectContext*)context; + +-(void)update{{classname}}ManagedObject:({{classname}}ManagedObject*){{name}} with{{classname}}:({{classname}}*){{name}}2; + +-({{classname}}*){{classname}}From{{classname}}ManagedObject:({{classname}}ManagedObject*)obj; + +-(void)update{{classname}}:({{classname}}*){{name}} with{{classname}}ManagedObject:({{classname}}ManagedObject*){{name}}2; + +@end +{{/model}} +{{/models}} diff --git a/modules/swagger-codegen/src/main/resources/objc/model-body.mustache b/modules/swagger-codegen/src/main/resources/objc/model-body.mustache index 6f15d3b6c5b..ae4e66fba69 100644 --- a/modules/swagger-codegen/src/main/resources/objc/model-body.mustache +++ b/modules/swagger-codegen/src/main/resources/objc/model-body.mustache @@ -16,25 +16,18 @@ {{#discriminator}} /** - Maps "discriminator" value to the sub-class name, so that inheritance is supported. + * Maps "discriminator" value to the sub-class name, so that inheritance is supported. */ - (id)initWithDictionary:(NSDictionary *)dict error:(NSError *__autoreleasing *)err { - NSString * discriminatedClassName = [dict valueForKey:@"{{discriminator}}"]; - if(discriminatedClassName == nil ){ return [super initWithDictionary:dict error:err]; } - Class class = NSClassFromString([@"{{classPrefix}}" stringByAppendingString:discriminatedClassName]); - if([self class ] == class) { return [super initWithDictionary:dict error:err]; } - - return [[class alloc] initWithDictionary:dict error: err]; - } {{/discriminator}} @@ -55,7 +48,6 @@ NSArray *optionalProperties = @[{{#vars}}{{^required}}@"{{name}}"{{#hasMore}}, {{/hasMore}}{{/required}}{{/vars}}]; return [optionalProperties containsObject:propertyName]; - } {{/model}} diff --git a/modules/swagger-codegen/src/main/resources/objc/podspec.mustache b/modules/swagger-codegen/src/main/resources/objc/podspec.mustache index 706a583454f..e4c4fe45dcb 100644 --- a/modules/swagger-codegen/src/main/resources/objc/podspec.mustache +++ b/modules/swagger-codegen/src/main/resources/objc/podspec.mustache @@ -19,15 +19,16 @@ Pod::Spec.new do |s| s.platform = :ios, '7.0' s.requires_arc = true - s.framework = 'SystemConfiguration' - + {{^useCoreData}}s.framework = 'SystemConfiguration'{{/useCoreData}}{{#useCoreData}}s.frameworks = 'SystemConfiguration', 'CoreData'{{/useCoreData}} + s.homepage = "{{gitRepoURL}}" s.license = "{{#license}}{{license}}{{/license}}{{^license}}Apache License, Version 2.0{{/license}}" s.source = { :git => "{{gitRepoURL}}.git", :tag => "#{s.version}" } s.author = { "{{authorName}}" => "{{authorEmail}}" } - s.source_files = '{{podName}}/**/*' + s.source_files = '{{podName}}/**/*.{m,h}' s.public_header_files = '{{podName}}/**/*.h' + s.resources = '{{podName}}/**/*.{xcdatamodeld,xcdatamodel}' s.dependency 'AFNetworking', '~> 3' s.dependency 'JSONModel', '~> 1.2' diff --git a/modules/swagger-codegen/src/main/resources/objc/xccurrentversion.mustache b/modules/swagger-codegen/src/main/resources/objc/xccurrentversion.mustache new file mode 100644 index 00000000000..528b389e3ef --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/objc/xccurrentversion.mustache @@ -0,0 +1,8 @@ + + + + + _XCCurrentVersionName + {{classPrefix}}Model.xcdatamodel + + diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/ObjcClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/ObjcClientOptionsProvider.java index 5057dd3b4ff..4df5c5e1db6 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/ObjcClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/ObjcClientOptionsProvider.java @@ -9,6 +9,7 @@ import java.util.Map; public class ObjcClientOptionsProvider implements OptionsProvider { public static final String CLASS_PREFIX_VALUE = "SWGObjc"; + public static final String CORE_DATA_VALUE = "n"; public static final String POD_NAME_VALUE = "SwaggerClientObjc"; public static final String POD_VERSION_VALUE = "1.0.0-SNAPSHOT"; public static final String AUTHOR_NAME_VALUE = "SwaggerObjc"; @@ -29,6 +30,7 @@ public class ObjcClientOptionsProvider implements OptionsProvider { .put(ObjcClientCodegen.AUTHOR_NAME, AUTHOR_NAME_VALUE) .put(ObjcClientCodegen.AUTHOR_EMAIL, AUTHOR_EMAIL_VALUE) .put(ObjcClientCodegen.GIT_REPO_URL, GIT_REPO_URL_VALUE) + .put(ObjcClientCodegen.CORE_DATA, CORE_DATA_VALUE) .build(); } diff --git a/samples/client/petstore/objc/SwaggerClient.podspec b/samples/client/petstore/objc/SwaggerClient.podspec index 3c8e0e79516..eab61d4dc32 100644 --- a/samples/client/petstore/objc/SwaggerClient.podspec +++ b/samples/client/petstore/objc/SwaggerClient.podspec @@ -19,15 +19,16 @@ Pod::Spec.new do |s| s.platform = :ios, '7.0' s.requires_arc = true - s.framework = 'SystemConfiguration' - + s.frameworks = 'SystemConfiguration', 'CoreData' + s.homepage = "https://github.com/swagger-api/swagger-codegen" s.license = "Apache License, Version 2.0" s.source = { :git => "https://github.com/swagger-api/swagger-codegen.git", :tag => "#{s.version}" } s.author = { "Swagger" => "apiteam@swagger.io" } - s.source_files = 'SwaggerClient/**/*' + s.source_files = 'SwaggerClient/**/*.{m,h}' s.public_header_files = 'SwaggerClient/**/*.h' + s.resources = 'SwaggerClient/**/*.{xcdatamodeld,xcdatamodel}' s.dependency 'AFNetworking', '~> 3' s.dependency 'JSONModel', '~> 1.2' diff --git a/samples/client/petstore/objc/SwaggerClient/Core/SWGJSONResponseSerializer.m b/samples/client/petstore/objc/SwaggerClient/Core/SWGJSONResponseSerializer.m index a2dd21bcf5d..73c696d341a 100644 --- a/samples/client/petstore/objc/SwaggerClient/Core/SWGJSONResponseSerializer.m +++ b/samples/client/petstore/objc/SwaggerClient/Core/SWGJSONResponseSerializer.m @@ -1,13 +1,5 @@ #import "SWGJSONResponseSerializer.h" -static BOOL JSONParseError(NSError *error) { - if ([error.domain isEqualToString:NSCocoaErrorDomain] && error.code == 3840) { - return YES; - } - - return NO; -} - @implementation SWGJSONResponseSerializer /// @@ -17,7 +9,7 @@ static BOOL JSONParseError(NSError *error) { /// /// @param response The response to be processed. /// @param data The response data to be decoded. -/// @param error The error that occurred while attempting to decode the respnse data. +/// @param error The error that occurred while attempting to decode the response data. /// /// @return The object decoded from the specified response data. /// @@ -27,7 +19,7 @@ static BOOL JSONParseError(NSError *error) { NSDictionary *responseJson = [super responseObjectForResponse:response data:data error:error]; // if response data is not a valid json, return string of data. - if (JSONParseError(*error)) { + if ([self isParseError:*error]) { *error = nil; NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; return responseString; @@ -36,4 +28,12 @@ static BOOL JSONParseError(NSError *error) { return responseJson; } +-(BOOL)isParseError:(NSError *)error { + return [error.domain isEqualToString:NSCocoaErrorDomain] && error.code == 3840; +} + ++ (instancetype)serializer { + return [self serializerWithReadingOptions:NSJSONReadingAllowFragments]; +} + @end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGCategory.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGCategory.m index 85297c56d78..00745d1f499 100644 --- a/samples/client/petstore/objc/SwaggerClient/Model/SWGCategory.m +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGCategory.m @@ -29,7 +29,6 @@ NSArray *optionalProperties = @[@"_id", @"name"]; return [optionalProperties containsObject:propertyName]; - } @end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGCategoryManagedObject.h b/samples/client/petstore/objc/SwaggerClient/Model/SWGCategoryManagedObject.h new file mode 100644 index 00000000000..82ec1e71651 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGCategoryManagedObject.h @@ -0,0 +1,20 @@ +#import +#import + +/** + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen + * Do not edit the class manually. + */ + + + +@interface SWGCategoryManagedObject : NSManagedObject + + +@property (nullable, nonatomic, retain) NSNumber* _id; + +@property (nullable, nonatomic, retain) NSString* name; + + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGCategoryManagedObject.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGCategoryManagedObject.m new file mode 100644 index 00000000000..aa4d5f4b822 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGCategoryManagedObject.m @@ -0,0 +1,13 @@ +#import "SWGCategoryManagedObject.h" + +/** +* NOTE: This class is auto generated by the swagger code generator program. +* https://github.com/swagger-api/swagger-codegen +* Do not edit the class manually. +*/ +@implementation SWGCategoryManagedObject + +@dynamic _id; +@dynamic name; + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGCategoryManagedObjectBuilder.h b/samples/client/petstore/objc/SwaggerClient/Model/SWGCategoryManagedObjectBuilder.h new file mode 100644 index 00000000000..9ee59f63862 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGCategoryManagedObjectBuilder.h @@ -0,0 +1,28 @@ +#import +#import + + +#import "SWGCategoryManagedObject.h" +#import "SWGCategory.h" + +/** + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen + * Do not edit the class manually. + */ + +@interface SWGCategoryManagedObjectBuilder : NSObject + + + +-(SWGCategoryManagedObject*)createNewSWGCategoryManagedObjectInContext:(NSManagedObjectContext*)context; + +-(SWGCategoryManagedObject*)SWGCategoryManagedObjectFromSWGCategory:(SWGCategory*)Category context:(NSManagedObjectContext*)context; + +-(void)updateSWGCategoryManagedObject:(SWGCategoryManagedObject*)Category withSWGCategory:(SWGCategory*)Category2; + +-(SWGCategory*)SWGCategoryFromSWGCategoryManagedObject:(SWGCategoryManagedObject*)obj; + +-(void)updateSWGCategory:(SWGCategory*)Category withSWGCategoryManagedObject:(SWGCategoryManagedObject*)Category2; + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGCategoryManagedObjectBuilder.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGCategoryManagedObjectBuilder.m new file mode 100644 index 00000000000..6c895a4c0d6 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGCategoryManagedObjectBuilder.m @@ -0,0 +1,53 @@ + + +#import "SWGCategoryManagedObjectBuilder.h" + +/** +* NOTE: This class is auto generated by the swagger code generator program. +* https://github.com/swagger-api/swagger-codegen +* Do not edit the class manually. +*/ + +@implementation SWGCategoryManagedObjectBuilder + +-(instancetype)init { + self = [super init]; + if (self != nil) { + } + return self; +} + +-(SWGCategoryManagedObject*)createNewSWGCategoryManagedObjectInContext:(NSManagedObjectContext*)context { + SWGCategoryManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([SWGCategoryManagedObject class]) inManagedObjectContext:context]; + return managedObject; +} + +-(SWGCategoryManagedObject*)SWGCategoryManagedObjectFromSWGCategory:(SWGCategory*)Category context:(NSManagedObjectContext*)context { + SWGCategoryManagedObject* newSWGCategory = [self createNewSWGCategoryManagedObjectInContext:context]; + [self updateSWGCategoryManagedObject:newSWGCategory withSWGCategory:Category]; + return newSWGCategory; +} + +-(void)updateSWGCategoryManagedObject:(SWGCategoryManagedObject*)managedObject withSWGCategory:(SWGCategory*)object { + if(!managedObject || !object) { + return; + } + managedObject._id = [object._id copy]; + managedObject.name = [object.name copy]; +} + +-(SWGCategory*)SWGCategoryFromSWGCategoryManagedObject:(SWGCategoryManagedObject*)obj { + if(!obj) { + return nil; + } + SWGCategory* newSWGCategory = [[SWGCategory alloc] init]; + [self updateSWGCategory:newSWGCategory withSWGCategoryManagedObject:obj]; + return newSWGCategory; +} + +-(void)updateSWGCategory:(SWGCategory*)newSWGCategory withSWGCategoryManagedObject:(SWGCategoryManagedObject*)obj { + newSWGCategory._id = [obj._id copy]; + newSWGCategory.name = [obj.name copy]; +} + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGModel.xcdatamodeld/.xccurrentversion b/samples/client/petstore/objc/SwaggerClient/Model/SWGModel.xcdatamodeld/.xccurrentversion new file mode 100644 index 00000000000..c38112b62d2 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGModel.xcdatamodeld/.xccurrentversion @@ -0,0 +1,8 @@ + + + + + _XCCurrentVersionName + SWGModel.xcdatamodel + + diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGModel.xcdatamodeld/SWGModel.xcdatamodel/contents b/samples/client/petstore/objc/SwaggerClient/Model/SWGModel.xcdatamodeld/SWGModel.xcdatamodel/contents new file mode 100644 index 00000000000..d6c893f1d25 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGModel.xcdatamodeld/SWGModel.xcdatamodel/contents @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGOrder.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGOrder.m index 299385f616f..e0b44e06954 100644 --- a/samples/client/petstore/objc/SwaggerClient/Model/SWGOrder.m +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGOrder.m @@ -29,7 +29,6 @@ NSArray *optionalProperties = @[@"_id", @"petId", @"quantity", @"shipDate", @"status", @"complete"]; return [optionalProperties containsObject:propertyName]; - } @end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGOrderManagedObject.h b/samples/client/petstore/objc/SwaggerClient/Model/SWGOrderManagedObject.h new file mode 100644 index 00000000000..d0d8b5d2c6b --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGOrderManagedObject.h @@ -0,0 +1,29 @@ +#import +#import + +/** + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen + * Do not edit the class manually. + */ + + + +@interface SWGOrderManagedObject : NSManagedObject + + +@property (nullable, nonatomic, retain) NSNumber* _id; + +@property (nullable, nonatomic, retain) NSNumber* petId; + +@property (nullable, nonatomic, retain) NSNumber* quantity; + +@property (nullable, nonatomic, retain) NSDate* shipDate; +/* Order Status [optional] + */ +@property (nullable, nonatomic, retain) NSString* status; + +@property (nullable, nonatomic, retain) NSNumber* complete; + + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGOrderManagedObject.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGOrderManagedObject.m new file mode 100644 index 00000000000..7a1b9298a95 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGOrderManagedObject.m @@ -0,0 +1,17 @@ +#import "SWGOrderManagedObject.h" + +/** +* NOTE: This class is auto generated by the swagger code generator program. +* https://github.com/swagger-api/swagger-codegen +* Do not edit the class manually. +*/ +@implementation SWGOrderManagedObject + +@dynamic _id; +@dynamic petId; +@dynamic quantity; +@dynamic shipDate; +@dynamic status; +@dynamic complete; + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGOrderManagedObjectBuilder.h b/samples/client/petstore/objc/SwaggerClient/Model/SWGOrderManagedObjectBuilder.h new file mode 100644 index 00000000000..bac7b660157 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGOrderManagedObjectBuilder.h @@ -0,0 +1,28 @@ +#import +#import + + +#import "SWGOrderManagedObject.h" +#import "SWGOrder.h" + +/** + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen + * Do not edit the class manually. + */ + +@interface SWGOrderManagedObjectBuilder : NSObject + + + +-(SWGOrderManagedObject*)createNewSWGOrderManagedObjectInContext:(NSManagedObjectContext*)context; + +-(SWGOrderManagedObject*)SWGOrderManagedObjectFromSWGOrder:(SWGOrder*)Order context:(NSManagedObjectContext*)context; + +-(void)updateSWGOrderManagedObject:(SWGOrderManagedObject*)Order withSWGOrder:(SWGOrder*)Order2; + +-(SWGOrder*)SWGOrderFromSWGOrderManagedObject:(SWGOrderManagedObject*)obj; + +-(void)updateSWGOrder:(SWGOrder*)Order withSWGOrderManagedObject:(SWGOrderManagedObject*)Order2; + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGOrderManagedObjectBuilder.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGOrderManagedObjectBuilder.m new file mode 100644 index 00000000000..ce1c6352b11 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGOrderManagedObjectBuilder.m @@ -0,0 +1,61 @@ + + +#import "SWGOrderManagedObjectBuilder.h" + +/** +* NOTE: This class is auto generated by the swagger code generator program. +* https://github.com/swagger-api/swagger-codegen +* Do not edit the class manually. +*/ + +@implementation SWGOrderManagedObjectBuilder + +-(instancetype)init { + self = [super init]; + if (self != nil) { + } + return self; +} + +-(SWGOrderManagedObject*)createNewSWGOrderManagedObjectInContext:(NSManagedObjectContext*)context { + SWGOrderManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([SWGOrderManagedObject class]) inManagedObjectContext:context]; + return managedObject; +} + +-(SWGOrderManagedObject*)SWGOrderManagedObjectFromSWGOrder:(SWGOrder*)Order context:(NSManagedObjectContext*)context { + SWGOrderManagedObject* newSWGOrder = [self createNewSWGOrderManagedObjectInContext:context]; + [self updateSWGOrderManagedObject:newSWGOrder withSWGOrder:Order]; + return newSWGOrder; +} + +-(void)updateSWGOrderManagedObject:(SWGOrderManagedObject*)managedObject withSWGOrder:(SWGOrder*)object { + if(!managedObject || !object) { + return; + } + managedObject._id = [object._id copy]; + managedObject.petId = [object.petId copy]; + managedObject.quantity = [object.quantity copy]; + managedObject.shipDate = [object.shipDate copy]; + managedObject.status = [object.status copy]; + managedObject.complete = [object.complete copy]; +} + +-(SWGOrder*)SWGOrderFromSWGOrderManagedObject:(SWGOrderManagedObject*)obj { + if(!obj) { + return nil; + } + SWGOrder* newSWGOrder = [[SWGOrder alloc] init]; + [self updateSWGOrder:newSWGOrder withSWGOrderManagedObject:obj]; + return newSWGOrder; +} + +-(void)updateSWGOrder:(SWGOrder*)newSWGOrder withSWGOrderManagedObject:(SWGOrderManagedObject*)obj { + newSWGOrder._id = [obj._id copy]; + newSWGOrder.petId = [obj.petId copy]; + newSWGOrder.quantity = [obj.quantity copy]; + newSWGOrder.shipDate = [obj.shipDate copy]; + newSWGOrder.status = [obj.status copy]; + newSWGOrder.complete = [obj.complete copy]; +} + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGPet.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGPet.m index 0518c311850..a1c63520dc4 100644 --- a/samples/client/petstore/objc/SwaggerClient/Model/SWGPet.m +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGPet.m @@ -29,7 +29,6 @@ NSArray *optionalProperties = @[@"_id", @"category", @"tags", @"status"]; return [optionalProperties containsObject:propertyName]; - } @end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGPetManagedObject.h b/samples/client/petstore/objc/SwaggerClient/Model/SWGPetManagedObject.h new file mode 100644 index 00000000000..f45d879bcbf --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGPetManagedObject.h @@ -0,0 +1,35 @@ +#import +#import + +/** + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen + * Do not edit the class manually. + */ + +#import "SWGCategoryManagedObject.h" +#import "SWGTagManagedObject.h" + + +@interface SWGPetManagedObject : NSManagedObject + + +@property (nullable, nonatomic, retain) NSNumber* _id; + +@property (nullable, nonatomic, retain) SWGCategoryManagedObject* category; + +@property (nullable, nonatomic, retain) NSString* name; + +@property (nullable, nonatomic, retain) NSArray* photoUrls; + +@property (nullable, nonatomic, retain) NSSet* tags; +/* pet status in the store [optional] + */ +@property (nullable, nonatomic, retain) NSString* status; + +- (void)addTagsObject:(SWGTagManagedObject *)value; +- (void)removeTagsObject:(SWGTagManagedObject *)value; +- (void)addTags:(NSSet *)values; +- (void)removeTags:(NSSet *)values; + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGPetManagedObject.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGPetManagedObject.m new file mode 100644 index 00000000000..7526628c42b --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGPetManagedObject.m @@ -0,0 +1,17 @@ +#import "SWGPetManagedObject.h" + +/** +* NOTE: This class is auto generated by the swagger code generator program. +* https://github.com/swagger-api/swagger-codegen +* Do not edit the class manually. +*/ +@implementation SWGPetManagedObject + +@dynamic _id; +@dynamic category; +@dynamic name; +@dynamic photoUrls; +@dynamic tags; +@dynamic status; + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGPetManagedObjectBuilder.h b/samples/client/petstore/objc/SwaggerClient/Model/SWGPetManagedObjectBuilder.h new file mode 100644 index 00000000000..83877706ff6 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGPetManagedObjectBuilder.h @@ -0,0 +1,32 @@ +#import +#import + +#import "SWGCategoryManagedObjectBuilder.h" +#import "SWGTagManagedObjectBuilder.h" + +#import "SWGPetManagedObject.h" +#import "SWGPet.h" + +/** + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen + * Do not edit the class manually. + */ + +@interface SWGPetManagedObjectBuilder : NSObject + +@property (nonatomic, strong) SWGCategoryManagedObjectBuilder * categoryBuilder; +@property (nonatomic, strong) SWGTagManagedObjectBuilder * tagsBuilder; + + +-(SWGPetManagedObject*)createNewSWGPetManagedObjectInContext:(NSManagedObjectContext*)context; + +-(SWGPetManagedObject*)SWGPetManagedObjectFromSWGPet:(SWGPet*)Pet context:(NSManagedObjectContext*)context; + +-(void)updateSWGPetManagedObject:(SWGPetManagedObject*)Pet withSWGPet:(SWGPet*)Pet2; + +-(SWGPet*)SWGPetFromSWGPetManagedObject:(SWGPetManagedObject*)obj; + +-(void)updateSWGPet:(SWGPet*)Pet withSWGPetManagedObject:(SWGPetManagedObject*)Pet2; + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGPetManagedObjectBuilder.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGPetManagedObjectBuilder.m new file mode 100644 index 00000000000..84a3463ea78 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGPetManagedObjectBuilder.m @@ -0,0 +1,83 @@ + + +#import "SWGPetManagedObjectBuilder.h" + +/** +* NOTE: This class is auto generated by the swagger code generator program. +* https://github.com/swagger-api/swagger-codegen +* Do not edit the class manually. +*/ + +@implementation SWGPetManagedObjectBuilder + +-(instancetype)init { + self = [super init]; + if (self != nil) { + _categoryBuilder = [[SWGCategoryManagedObjectBuilder alloc] init]; + _tagsBuilder = [[SWGTagManagedObjectBuilder alloc] init]; + } + return self; +} + +-(SWGPetManagedObject*)createNewSWGPetManagedObjectInContext:(NSManagedObjectContext*)context { + SWGPetManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([SWGPetManagedObject class]) inManagedObjectContext:context]; + return managedObject; +} + +-(SWGPetManagedObject*)SWGPetManagedObjectFromSWGPet:(SWGPet*)Pet context:(NSManagedObjectContext*)context { + SWGPetManagedObject* newSWGPet = [self createNewSWGPetManagedObjectInContext:context]; + [self updateSWGPetManagedObject:newSWGPet withSWGPet:Pet]; + return newSWGPet; +} + +-(void)updateSWGPetManagedObject:(SWGPetManagedObject*)managedObject withSWGPet:(SWGPet*)object { + if(!managedObject || !object) { + return; + } + managedObject._id = [object._id copy]; + + if(!managedObject.category) { + managedObject.category = [self.categoryBuilder SWGCategoryManagedObjectFromSWGCategory:object.category context:managedObject.managedObjectContext]; + } else { + [self.categoryBuilder updateSWGCategoryManagedObject:managedObject.category withSWGCategory:object.category]; + } + managedObject.name = [object.name copy]; + managedObject.photoUrls = [object.photoUrls copy]; + if(object.tags) { + NSMutableSet * convertedObjs = [NSMutableSet set]; + for (id innerObject in object.tags) { + id convertedObj = [self.tagsBuilder SWGTagManagedObjectFromSWGTag:innerObject context:managedObject.managedObjectContext]; + [convertedObjs addObject:convertedObj]; + } + managedObject.tags = convertedObjs; + } + managedObject.status = [object.status copy]; +} + +-(SWGPet*)SWGPetFromSWGPetManagedObject:(SWGPetManagedObject*)obj { + if(!obj) { + return nil; + } + SWGPet* newSWGPet = [[SWGPet alloc] init]; + [self updateSWGPet:newSWGPet withSWGPetManagedObject:obj]; + return newSWGPet; +} + +-(void)updateSWGPet:(SWGPet*)newSWGPet withSWGPetManagedObject:(SWGPetManagedObject*)obj { + newSWGPet._id = [obj._id copy]; + newSWGPet.category = [self.categoryBuilder SWGCategoryFromSWGCategoryManagedObject:obj.category]; + newSWGPet.name = [obj.name copy]; + newSWGPet.photoUrls = [obj.photoUrls copy]; + if(obj.tags != nil) { + NSMutableArray* convertedObjs = [NSMutableArray array]; + for (id innerObject in obj.tags) { + id convertedObj = [self.tagsBuilder SWGTagFromSWGTagManagedObject:innerObject]; + [convertedObjs addObject:convertedObj]; + } + newSWGPet.tags = (NSArray*)convertedObjs; + } + + newSWGPet.status = [obj.status copy]; +} + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGTag.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGTag.m index 2b720d287e1..e71829873d1 100644 --- a/samples/client/petstore/objc/SwaggerClient/Model/SWGTag.m +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGTag.m @@ -29,7 +29,6 @@ NSArray *optionalProperties = @[@"_id", @"name"]; return [optionalProperties containsObject:propertyName]; - } @end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGTagManagedObject.h b/samples/client/petstore/objc/SwaggerClient/Model/SWGTagManagedObject.h new file mode 100644 index 00000000000..1d95aa5930c --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGTagManagedObject.h @@ -0,0 +1,20 @@ +#import +#import + +/** + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen + * Do not edit the class manually. + */ + + + +@interface SWGTagManagedObject : NSManagedObject + + +@property (nullable, nonatomic, retain) NSNumber* _id; + +@property (nullable, nonatomic, retain) NSString* name; + + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGTagManagedObject.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGTagManagedObject.m new file mode 100644 index 00000000000..9f616af1ea8 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGTagManagedObject.m @@ -0,0 +1,13 @@ +#import "SWGTagManagedObject.h" + +/** +* NOTE: This class is auto generated by the swagger code generator program. +* https://github.com/swagger-api/swagger-codegen +* Do not edit the class manually. +*/ +@implementation SWGTagManagedObject + +@dynamic _id; +@dynamic name; + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGTagManagedObjectBuilder.h b/samples/client/petstore/objc/SwaggerClient/Model/SWGTagManagedObjectBuilder.h new file mode 100644 index 00000000000..6895f09262c --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGTagManagedObjectBuilder.h @@ -0,0 +1,28 @@ +#import +#import + + +#import "SWGTagManagedObject.h" +#import "SWGTag.h" + +/** + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen + * Do not edit the class manually. + */ + +@interface SWGTagManagedObjectBuilder : NSObject + + + +-(SWGTagManagedObject*)createNewSWGTagManagedObjectInContext:(NSManagedObjectContext*)context; + +-(SWGTagManagedObject*)SWGTagManagedObjectFromSWGTag:(SWGTag*)Tag context:(NSManagedObjectContext*)context; + +-(void)updateSWGTagManagedObject:(SWGTagManagedObject*)Tag withSWGTag:(SWGTag*)Tag2; + +-(SWGTag*)SWGTagFromSWGTagManagedObject:(SWGTagManagedObject*)obj; + +-(void)updateSWGTag:(SWGTag*)Tag withSWGTagManagedObject:(SWGTagManagedObject*)Tag2; + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGTagManagedObjectBuilder.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGTagManagedObjectBuilder.m new file mode 100644 index 00000000000..2e26bfc555c --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGTagManagedObjectBuilder.m @@ -0,0 +1,53 @@ + + +#import "SWGTagManagedObjectBuilder.h" + +/** +* NOTE: This class is auto generated by the swagger code generator program. +* https://github.com/swagger-api/swagger-codegen +* Do not edit the class manually. +*/ + +@implementation SWGTagManagedObjectBuilder + +-(instancetype)init { + self = [super init]; + if (self != nil) { + } + return self; +} + +-(SWGTagManagedObject*)createNewSWGTagManagedObjectInContext:(NSManagedObjectContext*)context { + SWGTagManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([SWGTagManagedObject class]) inManagedObjectContext:context]; + return managedObject; +} + +-(SWGTagManagedObject*)SWGTagManagedObjectFromSWGTag:(SWGTag*)Tag context:(NSManagedObjectContext*)context { + SWGTagManagedObject* newSWGTag = [self createNewSWGTagManagedObjectInContext:context]; + [self updateSWGTagManagedObject:newSWGTag withSWGTag:Tag]; + return newSWGTag; +} + +-(void)updateSWGTagManagedObject:(SWGTagManagedObject*)managedObject withSWGTag:(SWGTag*)object { + if(!managedObject || !object) { + return; + } + managedObject._id = [object._id copy]; + managedObject.name = [object.name copy]; +} + +-(SWGTag*)SWGTagFromSWGTagManagedObject:(SWGTagManagedObject*)obj { + if(!obj) { + return nil; + } + SWGTag* newSWGTag = [[SWGTag alloc] init]; + [self updateSWGTag:newSWGTag withSWGTagManagedObject:obj]; + return newSWGTag; +} + +-(void)updateSWGTag:(SWGTag*)newSWGTag withSWGTagManagedObject:(SWGTagManagedObject*)obj { + newSWGTag._id = [obj._id copy]; + newSWGTag.name = [obj.name copy]; +} + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGUser.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGUser.m index 7aed8343af9..c8195660df6 100644 --- a/samples/client/petstore/objc/SwaggerClient/Model/SWGUser.m +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGUser.m @@ -29,7 +29,6 @@ NSArray *optionalProperties = @[@"_id", @"username", @"firstName", @"lastName", @"email", @"password", @"phone", @"userStatus"]; return [optionalProperties containsObject:propertyName]; - } @end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGUserManagedObject.h b/samples/client/petstore/objc/SwaggerClient/Model/SWGUserManagedObject.h new file mode 100644 index 00000000000..ddfde6dc1cf --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGUserManagedObject.h @@ -0,0 +1,33 @@ +#import +#import + +/** + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen + * Do not edit the class manually. + */ + + + +@interface SWGUserManagedObject : NSManagedObject + + +@property (nullable, nonatomic, retain) NSNumber* _id; + +@property (nullable, nonatomic, retain) NSString* username; + +@property (nullable, nonatomic, retain) NSString* firstName; + +@property (nullable, nonatomic, retain) NSString* lastName; + +@property (nullable, nonatomic, retain) NSString* email; + +@property (nullable, nonatomic, retain) NSString* password; + +@property (nullable, nonatomic, retain) NSString* phone; +/* User Status [optional] + */ +@property (nullable, nonatomic, retain) NSNumber* userStatus; + + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGUserManagedObject.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGUserManagedObject.m new file mode 100644 index 00000000000..f6779715858 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGUserManagedObject.m @@ -0,0 +1,19 @@ +#import "SWGUserManagedObject.h" + +/** +* NOTE: This class is auto generated by the swagger code generator program. +* https://github.com/swagger-api/swagger-codegen +* Do not edit the class manually. +*/ +@implementation SWGUserManagedObject + +@dynamic _id; +@dynamic username; +@dynamic firstName; +@dynamic lastName; +@dynamic email; +@dynamic password; +@dynamic phone; +@dynamic userStatus; + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGUserManagedObjectBuilder.h b/samples/client/petstore/objc/SwaggerClient/Model/SWGUserManagedObjectBuilder.h new file mode 100644 index 00000000000..d62b03d8c87 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGUserManagedObjectBuilder.h @@ -0,0 +1,28 @@ +#import +#import + + +#import "SWGUserManagedObject.h" +#import "SWGUser.h" + +/** + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen + * Do not edit the class manually. + */ + +@interface SWGUserManagedObjectBuilder : NSObject + + + +-(SWGUserManagedObject*)createNewSWGUserManagedObjectInContext:(NSManagedObjectContext*)context; + +-(SWGUserManagedObject*)SWGUserManagedObjectFromSWGUser:(SWGUser*)User context:(NSManagedObjectContext*)context; + +-(void)updateSWGUserManagedObject:(SWGUserManagedObject*)User withSWGUser:(SWGUser*)User2; + +-(SWGUser*)SWGUserFromSWGUserManagedObject:(SWGUserManagedObject*)obj; + +-(void)updateSWGUser:(SWGUser*)User withSWGUserManagedObject:(SWGUserManagedObject*)User2; + +@end diff --git a/samples/client/petstore/objc/SwaggerClient/Model/SWGUserManagedObjectBuilder.m b/samples/client/petstore/objc/SwaggerClient/Model/SWGUserManagedObjectBuilder.m new file mode 100644 index 00000000000..8086e6a20e6 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClient/Model/SWGUserManagedObjectBuilder.m @@ -0,0 +1,65 @@ + + +#import "SWGUserManagedObjectBuilder.h" + +/** +* NOTE: This class is auto generated by the swagger code generator program. +* https://github.com/swagger-api/swagger-codegen +* Do not edit the class manually. +*/ + +@implementation SWGUserManagedObjectBuilder + +-(instancetype)init { + self = [super init]; + if (self != nil) { + } + return self; +} + +-(SWGUserManagedObject*)createNewSWGUserManagedObjectInContext:(NSManagedObjectContext*)context { + SWGUserManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([SWGUserManagedObject class]) inManagedObjectContext:context]; + return managedObject; +} + +-(SWGUserManagedObject*)SWGUserManagedObjectFromSWGUser:(SWGUser*)User context:(NSManagedObjectContext*)context { + SWGUserManagedObject* newSWGUser = [self createNewSWGUserManagedObjectInContext:context]; + [self updateSWGUserManagedObject:newSWGUser withSWGUser:User]; + return newSWGUser; +} + +-(void)updateSWGUserManagedObject:(SWGUserManagedObject*)managedObject withSWGUser:(SWGUser*)object { + if(!managedObject || !object) { + return; + } + managedObject._id = [object._id copy]; + managedObject.username = [object.username copy]; + managedObject.firstName = [object.firstName copy]; + managedObject.lastName = [object.lastName copy]; + managedObject.email = [object.email copy]; + managedObject.password = [object.password copy]; + managedObject.phone = [object.phone copy]; + managedObject.userStatus = [object.userStatus copy]; +} + +-(SWGUser*)SWGUserFromSWGUserManagedObject:(SWGUserManagedObject*)obj { + if(!obj) { + return nil; + } + SWGUser* newSWGUser = [[SWGUser alloc] init]; + [self updateSWGUser:newSWGUser withSWGUserManagedObject:obj]; + return newSWGUser; +} + +-(void)updateSWGUser:(SWGUser*)newSWGUser withSWGUserManagedObject:(SWGUserManagedObject*)obj { + newSWGUser._id = [obj._id copy]; + newSWGUser.username = [obj.username copy]; + newSWGUser.firstName = [obj.firstName copy]; + newSWGUser.lastName = [obj.lastName copy]; + newSWGUser.email = [obj.email copy]; + newSWGUser.password = [obj.password copy]; + newSWGUser.phone = [obj.phone copy]; + newSWGUser.userStatus = [obj.userStatus copy]; +} + +@end diff --git a/samples/client/petstore/objc/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj b/samples/client/petstore/objc/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj index f7274144997..1a8aa88ce42 100644 --- a/samples/client/petstore/objc/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj +++ b/samples/client/petstore/objc/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj @@ -21,8 +21,10 @@ 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5B8195388D20070C39A /* InfoPlist.strings */; }; 6003F5BC195388D20070C39A /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5BB195388D20070C39A /* Tests.m */; }; 94BE6BE84795B5034A811E61 /* libPods-SwaggerClient_Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D46325ECAD48245C07F6733 /* libPods-SwaggerClient_Example.a */; }; + B2ADC0B1C8A60A05C48B4DF7 /* DatabaseHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B2ADC55130D5E329ED945E8F /* DatabaseHelper.m */; }; B2ADC17C287DCABF329BA8AC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B2ADC7027D4B025ABCA7999F /* Main.storyboard */; }; B2ADC2D632658A5F73C6CE66 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B2ADC65E342ADA697322D68C /* Images.xcassets */; }; + B2ADC3C7634D15595DD14814 /* BuildersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = B2ADC838FCC22F4BC6C41106 /* BuildersTest.m */; }; B2ADC56977372855A63F4E4D /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B2ADC084A2C0BDF217832B03 /* Launch Screen.storyboard */; }; CF0ADB481B5F95D6008A2729 /* PetTest.m in Sources */ = {isa = PBXBuildFile; fileRef = CF0ADB471B5F95D6008A2729 /* PetTest.m */; }; CF8F71391B5F73AC00162980 /* DeserializationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = CF8F71381B5F73AC00162980 /* DeserializationTest.m */; }; @@ -66,8 +68,11 @@ 73CCD82196AABD64F2807C7B /* Pods-SwaggerClient_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClient_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClient_Tests/Pods-SwaggerClient_Tests.debug.xcconfig"; sourceTree = ""; }; 8D46325ECAD48245C07F6733 /* libPods-SwaggerClient_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SwaggerClient_Example.a"; sourceTree = BUILT_PRODUCTS_DIR; }; B2ADC084A2C0BDF217832B03 /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = "Launch Screen.storyboard"; path = "SwaggerClient/Launch Screen.storyboard"; sourceTree = ""; }; + B2ADC2F3483B3117A00FA91C /* DatabaseHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatabaseHelper.h; sourceTree = ""; }; + B2ADC55130D5E329ED945E8F /* DatabaseHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DatabaseHelper.m; sourceTree = ""; }; B2ADC65E342ADA697322D68C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = SwaggerClient/Images.xcassets; sourceTree = ""; }; B2ADC7027D4B025ABCA7999F /* Main.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Main.storyboard; path = SwaggerClient/Main.storyboard; sourceTree = ""; }; + B2ADC838FCC22F4BC6C41106 /* BuildersTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BuildersTest.m; sourceTree = ""; }; BFB4BE760737508B3CFC23B2 /* Pods-SwaggerClient_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClient_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClient_Example/Pods-SwaggerClient_Example.release.xcconfig"; sourceTree = ""; }; CF0ADB471B5F95D6008A2729 /* PetTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PetTest.m; sourceTree = ""; }; CF8F71381B5F73AC00162980 /* DeserializationTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeserializationTest.m; sourceTree = ""; }; @@ -176,6 +181,8 @@ CFDFB40D1B3CFEC3009739C5 /* UserApiTest.m */, 6003F5BB195388D20070C39A /* Tests.m */, 6003F5B6195388D20070C39A /* Supporting Files */, + B2ADC838FCC22F4BC6C41106 /* BuildersTest.m */, + B2ADCA62DE4AC0F5BAB42208 /* Helpers */, ); path = Tests; sourceTree = ""; @@ -201,6 +208,15 @@ name = "Podspec Metadata"; sourceTree = ""; }; + B2ADCA62DE4AC0F5BAB42208 /* Helpers */ = { + isa = PBXGroup; + children = ( + B2ADC2F3483B3117A00FA91C /* DatabaseHelper.h */, + B2ADC55130D5E329ED945E8F /* DatabaseHelper.m */, + ); + path = Helpers; + sourceTree = ""; + }; CCE77F10C6D41F74B075ECD0 /* Pods */ = { isa = PBXGroup; children = ( @@ -422,6 +438,8 @@ CFDFB4151B3D000B009739C5 /* SWGApiClientTest.m in Sources */, CFDFB4121B3CFFA8009739C5 /* UserApiTest.m in Sources */, CF8F71391B5F73AC00162980 /* DeserializationTest.m in Sources */, + B2ADC3C7634D15595DD14814 /* BuildersTest.m in Sources */, + B2ADC0B1C8A60A05C48B4DF7 /* DatabaseHelper.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/samples/client/petstore/objc/SwaggerClientTests/Tests/BuildersTest.m b/samples/client/petstore/objc/SwaggerClientTests/Tests/BuildersTest.m new file mode 100644 index 00000000000..be027cc9dee --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClientTests/Tests/BuildersTest.m @@ -0,0 +1,68 @@ +// +// BuildersTest.m +// SwaggerClient +// +// Created by mmackowiak on 16.05.2016. +// Copyright (c) 2016 geekerzp. All rights reserved. +// + +#import +#import +#import "SWGPetManagedObject.h" +#import "SWGPetManagedObjectBuilder.h" +#import "DatabaseHelper.h" + +@interface BuildersTest : XCTestCase { + SWGPet *pet; + SWGPetManagedObjectBuilder* builder; + NSManagedObjectContext *context; +} + +@end + +@implementation BuildersTest + +- (void)setUp { + [super setUp]; + + NSDictionary *petDict = @{ @"id": @1, @"name": @"test pet", + @"status": @"sold", + @"photoUrls": @[@"string"], + @"category": @{ @"id": @1, @"name": @"test category" }, + @"tags": @[ @{ @"id": @1, @"name": @"test tag" }], + }; + pet = [[SWGPet alloc] initWithDictionary:petDict error:nil]; + + context = [DatabaseHelper createContextWithModelName:@"SWGModel"]; + + builder = [[SWGPetManagedObjectBuilder alloc] init]; +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + SWGPetManagedObject * managedObject = [builder SWGPetManagedObjectFromSWGPet:pet context:context]; + SWGPet *pet2 = [builder SWGPetFromSWGPetManagedObject:managedObject]; + [context deleteObject:managedObject]; + SWGTag * tag = [pet.tags firstObject]; + SWGTag * tag2 = [pet2.tags firstObject]; + XCTAssertEqualObjects(tag._id, tag2._id); + XCTAssertEqualObjects(tag.name, tag2.name); + + SWGCategory * category = pet.category; + SWGCategory * category2 = pet2.category; + + XCTAssertEqualObjects(category._id, category2._id); + XCTAssertEqualObjects(category.name, category2.name); + + XCTAssertEqualObjects(pet.status,pet2.status); + XCTAssertEqualObjects(pet.photoUrls,pet2.photoUrls); + XCTAssertEqualObjects(pet.name,pet2.name); + XCTAssertEqualObjects(pet._id,pet2._id); + +} + +@end diff --git a/samples/client/petstore/objc/SwaggerClientTests/Tests/Helpers/DatabaseHelper.h b/samples/client/petstore/objc/SwaggerClientTests/Tests/Helpers/DatabaseHelper.h new file mode 100644 index 00000000000..8216e012a32 --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClientTests/Tests/Helpers/DatabaseHelper.h @@ -0,0 +1,14 @@ +#import +#import + +@interface DatabaseHelper : NSObject + ++ (NSManagedObjectContext *)createContextWithModelName:(NSString *)mName; + ++ (void)clearContext:(NSManagedObjectContext *)ctx fromEntitiesWithName:(NSString *)entityName; + ++ (NSManagedObjectModel *)createModelWithModelName:(NSString *)mName; + ++ (NSManagedObjectContext *)createDatabaseWithModel:(NSManagedObjectModel*)model; + +@end diff --git a/samples/client/petstore/objc/SwaggerClientTests/Tests/Helpers/DatabaseHelper.m b/samples/client/petstore/objc/SwaggerClientTests/Tests/Helpers/DatabaseHelper.m new file mode 100644 index 00000000000..3433ac19ddb --- /dev/null +++ b/samples/client/petstore/objc/SwaggerClientTests/Tests/Helpers/DatabaseHelper.m @@ -0,0 +1,42 @@ +#import "DatabaseHelper.h" + +@implementation DatabaseHelper + + ++ (NSManagedObjectContext *)createContextWithModelName:(NSString *)mName { + NSManagedObjectModel *model = [self createModelWithModelName:mName]; + return [self createDatabaseWithModel:model]; +} + ++ (NSManagedObjectContext *)createDatabaseWithModel:(NSManagedObjectModel*)model { + NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; + [coordinator addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:nil]; + + NSManagedObjectContext *testingContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; + [testingContext setPersistentStoreCoordinator:coordinator]; + [testingContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy]; + return testingContext; +} + ++ (NSManagedObjectModel *)createModelWithModelName:(NSString *)mName { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSString *path = [bundle pathForResource:mName ofType:@"momd"]; + NSAssert(path, @"Missing Model for name: %@",mName); + NSURL *modURL = [NSURL fileURLWithPath:path]; + return [[NSManagedObjectModel alloc] initWithContentsOfURL:modURL]; +} + ++ (void)clearContext:(NSManagedObjectContext *)ctx fromEntitiesWithName:(NSString *)entityName { + NSFetchRequest *fetch = [[NSFetchRequest alloc] init]; + [fetch setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:ctx]]; + NSError *error = nil; + NSArray *result = [ctx executeFetchRequest:fetch error:&error]; + if (error) { + NSLog(@"Failed clearing context from entities with name [%@]", error); + } + for (id basket in result) { + [ctx deleteObject:basket]; + } +} + +@end