[Objc] Basic Core data support

This commit is contained in:
Mateusz Mackowiak 2016-05-23 22:36:07 +02:00 committed by wing328
parent 81b6ccfe1c
commit ceda86b9c3
45 changed files with 1185 additions and 52 deletions

View File

@ -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

View File

@ -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<String> foundationClasses = new HashSet<String>();
@ -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<String> advancedMapingTypes = new HashSet<String>();
@ -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*<NSString*>*'
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<SWGTag>*'
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) + "<NSString*, " + innerTypeDeclaration + "*>*";
} else {
for (String s : advancedMapingTypes) {
if(innerTypeDeclaration.startsWith(s)) {
return getSwaggerType(p) + "<NSString*, " + innerTypeDeclaration + "*>*";
}
}
return getSwaggerType(p) + "<NSString*, " + innerTypeDeclaration + ">*";
}
} 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
*

View File

@ -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

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="9525" systemVersion="15D21" minimumToolsVersion="Xcode 7.0">
{{#models}}{{#model}}<entity name="{{{classname}}}ManagedObject" representedClassName="{{{classname}}}ManagedObject" syncable="YES">
{{#vars}}{{#complexType}} <relationship name="{{name}}" {{^required}}optional="YES"{{/required}} {{#isListContainer}}toMany="YES"{{/isListContainer}}{{^isListContainer}}maxCount="1"{{/isListContainer}} deletionRule="Cascade" destinationEntity="{{{complexType}}}ManagedObject" syncable="YES"/>{{/complexType}}{{^complexType}} <attribute name="{{name}}" {{^required}}optional="YES"{{/required}} attributeType="{{#isString}}String{{/isString}}{{#isInteger}}Integer 16{{/isInteger}}{{#isLong}}Double{{/isLong}}{{#isDouble}}Double{{/isDouble}}{{#isFloat}}Float{{/isFloat}}{{#isByteArray}}Binary{{/isByteArray}}{{#isBinary}}Binary{{/isBinary}}{{#isListContainer}}Transformable{{/isListContainer}}{{#isMapContainer}}Transformable{{/isMapContainer}}{{#isBoolean}}Boolean{{/isBoolean}}{{#isDate}}Date{{/isDate}}{{#isDateTime}}Date{{/isDateTime}}" syncable="YES"/>{{/complexType}}
{{/vars}}
</entity>
{{/model}}{{/models}}
</model>

View File

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

View File

@ -0,0 +1,31 @@
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.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.
*/
{{#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}}

View File

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

View File

@ -0,0 +1,35 @@
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
{{#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}}

View File

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

View File

@ -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'

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>_XCCurrentVersionName</key>
<string>{{classPrefix}}Model.xcdatamodel</string>
</dict>
</plist>

View File

@ -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();
}

View File

@ -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'

View File

@ -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

View File

@ -29,7 +29,6 @@
NSArray *optionalProperties = @[@"_id", @"name"];
return [optionalProperties containsObject:propertyName];
}
@end

View File

@ -0,0 +1,20 @@
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.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 SWGCategoryManagedObject : NSManagedObject
@property (nullable, nonatomic, retain) NSNumber* _id;
@property (nullable, nonatomic, retain) NSString* name;
@end

View File

@ -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

View File

@ -0,0 +1,28 @@
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#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

View File

@ -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

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>_XCCurrentVersionName</key>
<string>SWGModel.xcdatamodel</string>
</dict>
</plist>

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="9525" systemVersion="15D21" minimumToolsVersion="Xcode 7.0">
<entity name="SWGCategoryManagedObject" representedClassName="SWGCategoryManagedObject" syncable="YES">
<attribute name="_id" optional="YES" attributeType="Double" syncable="YES"/>
<attribute name="name" optional="YES" attributeType="String" syncable="YES"/>
</entity>
<entity name="SWGOrderManagedObject" representedClassName="SWGOrderManagedObject" syncable="YES">
<attribute name="_id" optional="YES" attributeType="Double" syncable="YES"/>
<attribute name="petId" optional="YES" attributeType="Double" syncable="YES"/>
<attribute name="quantity" optional="YES" attributeType="Integer 16" syncable="YES"/>
<attribute name="shipDate" optional="YES" attributeType="Date" syncable="YES"/>
<attribute name="status" optional="YES" attributeType="String" syncable="YES"/>
<attribute name="complete" optional="YES" attributeType="Boolean" syncable="YES"/>
</entity>
<entity name="SWGPetManagedObject" representedClassName="SWGPetManagedObject" syncable="YES">
<attribute name="_id" optional="YES" attributeType="Double" syncable="YES"/>
<relationship name="category" optional="YES" maxCount="1" deletionRule="Cascade" destinationEntity="SWGCategoryManagedObject" syncable="YES"/>
<attribute name="name" attributeType="String" syncable="YES"/>
<attribute name="photoUrls" attributeType="Transformable" syncable="YES"/>
<relationship name="tags" optional="YES" toMany="YES" deletionRule="Cascade" destinationEntity="SWGTagManagedObject" syncable="YES"/>
<attribute name="status" optional="YES" attributeType="String" syncable="YES"/>
</entity>
<entity name="SWGTagManagedObject" representedClassName="SWGTagManagedObject" syncable="YES">
<attribute name="_id" optional="YES" attributeType="Double" syncable="YES"/>
<attribute name="name" optional="YES" attributeType="String" syncable="YES"/>
</entity>
<entity name="SWGUserManagedObject" representedClassName="SWGUserManagedObject" syncable="YES">
<attribute name="_id" optional="YES" attributeType="Double" syncable="YES"/>
<attribute name="username" optional="YES" attributeType="String" syncable="YES"/>
<attribute name="firstName" optional="YES" attributeType="String" syncable="YES"/>
<attribute name="lastName" optional="YES" attributeType="String" syncable="YES"/>
<attribute name="email" optional="YES" attributeType="String" syncable="YES"/>
<attribute name="password" optional="YES" attributeType="String" syncable="YES"/>
<attribute name="phone" optional="YES" attributeType="String" syncable="YES"/>
<attribute name="userStatus" optional="YES" attributeType="Integer 16" syncable="YES"/>
</entity>
</model>

View File

@ -29,7 +29,6 @@
NSArray *optionalProperties = @[@"_id", @"petId", @"quantity", @"shipDate", @"status", @"complete"];
return [optionalProperties containsObject:propertyName];
}
@end

View File

@ -0,0 +1,29 @@
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.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 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

View File

@ -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

View File

@ -0,0 +1,28 @@
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#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

View File

@ -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

View File

@ -29,7 +29,6 @@
NSArray *optionalProperties = @[@"_id", @"category", @"tags", @"status"];
return [optionalProperties containsObject:propertyName];
}
@end

View File

@ -0,0 +1,35 @@
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.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.
*/
#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<NSString*>* 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

View File

@ -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

View File

@ -0,0 +1,32 @@
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#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

View File

@ -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<SWGTag>*)convertedObjs;
}
newSWGPet.status = [obj.status copy];
}
@end

View File

@ -29,7 +29,6 @@
NSArray *optionalProperties = @[@"_id", @"name"];
return [optionalProperties containsObject:propertyName];
}
@end

View File

@ -0,0 +1,20 @@
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.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 SWGTagManagedObject : NSManagedObject
@property (nullable, nonatomic, retain) NSNumber* _id;
@property (nullable, nonatomic, retain) NSString* name;
@end

View File

@ -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

View File

@ -0,0 +1,28 @@
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#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

View File

@ -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

View File

@ -29,7 +29,6 @@
NSArray *optionalProperties = @[@"_id", @"username", @"firstName", @"lastName", @"email", @"password", @"phone", @"userStatus"];
return [optionalProperties containsObject:propertyName];
}
@end

View File

@ -0,0 +1,33 @@
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.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 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

View File

@ -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

View File

@ -0,0 +1,28 @@
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#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

View File

@ -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

View File

@ -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 = "<group>"; };
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 = "<group>"; };
B2ADC2F3483B3117A00FA91C /* DatabaseHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatabaseHelper.h; sourceTree = "<group>"; };
B2ADC55130D5E329ED945E8F /* DatabaseHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DatabaseHelper.m; sourceTree = "<group>"; };
B2ADC65E342ADA697322D68C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = SwaggerClient/Images.xcassets; sourceTree = "<group>"; };
B2ADC7027D4B025ABCA7999F /* Main.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Main.storyboard; path = SwaggerClient/Main.storyboard; sourceTree = "<group>"; };
B2ADC838FCC22F4BC6C41106 /* BuildersTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BuildersTest.m; sourceTree = "<group>"; };
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 = "<group>"; };
CF0ADB471B5F95D6008A2729 /* PetTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PetTest.m; sourceTree = "<group>"; };
CF8F71381B5F73AC00162980 /* DeserializationTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeserializationTest.m; sourceTree = "<group>"; };
@ -176,6 +181,8 @@
CFDFB40D1B3CFEC3009739C5 /* UserApiTest.m */,
6003F5BB195388D20070C39A /* Tests.m */,
6003F5B6195388D20070C39A /* Supporting Files */,
B2ADC838FCC22F4BC6C41106 /* BuildersTest.m */,
B2ADCA62DE4AC0F5BAB42208 /* Helpers */,
);
path = Tests;
sourceTree = "<group>";
@ -201,6 +208,15 @@
name = "Podspec Metadata";
sourceTree = "<group>";
};
B2ADCA62DE4AC0F5BAB42208 /* Helpers */ = {
isa = PBXGroup;
children = (
B2ADC2F3483B3117A00FA91C /* DatabaseHelper.h */,
B2ADC55130D5E329ED945E8F /* DatabaseHelper.m */,
);
path = Helpers;
sourceTree = "<group>";
};
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;
};

View File

@ -0,0 +1,68 @@
//
// BuildersTest.m
// SwaggerClient
//
// Created by mmackowiak on 16.05.2016.
// Copyright (c) 2016 geekerzp. All rights reserved.
//
#import <XCTest/XCTest.h>
#import <SwaggerClient/SWGPet.h>
#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

View File

@ -0,0 +1,14 @@
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface DatabaseHelper : NSObject
+ (NSManagedObjectContext *)createContextWithModelName:(NSString *)mName;
+ (void)clearContext:(NSManagedObjectContext *)ctx fromEntitiesWithName:(NSString *)entityName;
+ (NSManagedObjectModel *)createModelWithModelName:(NSString *)mName;
+ (NSManagedObjectContext *)createDatabaseWithModel:(NSManagedObjectModel*)model;
@end

View File

@ -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