Do refactor and add extension methods

This commit is contained in:
kubo_takaichi 2015-05-17 19:26:11 +09:00
parent 23d714f2f1
commit 5dfa753f5c
6 changed files with 44 additions and 9 deletions

View File

@ -57,7 +57,7 @@ public class SwiftGenerator extends DefaultCodegen implements CodegenConfig {
sourceFolder = appName + "/" + sourceFolder;
supportingFiles.add(new SupportingFile("Cartfile.mustache", appName, "Cartfile"));
supportingFiles.add(new SupportingFile("Cartfile.mustache", "", "Cartfile"));
supportingFiles.add(new SupportingFile("APIHelper.mustache", sourceFolder, "APIHelper.swift"));
supportingFiles.add(new SupportingFile("AlamofireImplementations.mustache", sourceFolder, "AlamofireImplementations.swift"));
supportingFiles.add(new SupportingFile("Extensions.mustache", sourceFolder, "Extensions.swift"));

View File

@ -21,9 +21,9 @@ class RequestBuilder<T: JSONDecodable> {
let parameters: [String:AnyObject]?
let isBody: Bool
let method: String
let URLString: URLStringConvertible
let URLString: String
required init(method: String, URLString: URLStringConvertible, parameters: [String:AnyObject]?, isBody: Bool) {
required init(method: String, URLString: String, parameters: [String:AnyObject]?, isBody: Bool) {
self.method = method
self.URLString = URLString
self.parameters = parameters
@ -40,7 +40,7 @@ class RequestBuilder<T: JSONDecodable> {
}
func addCredential() -> Self {
self.credential = OneteamAPI.credential
self.credential = {{projectName}}API.credential
return self
}
}

View File

@ -14,7 +14,7 @@ class AlamofireRequestBuilderFactory: RequestBuilderFactory {
}
class AlamofireRequestBuilder<T: JSONDecodable>: RequestBuilder<T> {
required init(method: String, URLString: URLStringConvertible, parameters: [String : AnyObject]?, isBody: Bool) {
required init(method: String, URLString: String, parameters: [String : AnyObject]?, isBody: Bool) {
super.init(method: method, URLString: URLString, parameters: parameters, isBody: isBody)
}

View File

@ -1,2 +1,3 @@
github "Alamofire/Alamofire" >= 1.2
github "mxcl/PromiseKit"
github "mxcl/PromiseKit" >=1.5.3
github "SwiftyJSON/SwiftyJSON" >= 2.2

View File

@ -43,6 +43,12 @@ extension Request {
}
}
extension String: JSONDecodable {
static func decode(source: AnyObject) -> String? {
return source.description
}
}
extension Array: JSONEncodable {
func encode() -> AnyObject {
if Element.self is JSONEncodable {
@ -53,6 +59,33 @@ extension Array: JSONEncodable {
}
}
extension Dictionary: JSONEncodable, JSONDecodable {
static func decode(source: AnyObject) -> [Key:Value]? {
return nil
}
func encode() -> AnyObject {
var dictionary = [NSObject:AnyObject]()
for (key, value) in self {
let keyObject: NSObject
if Key.self is JSONEncodable {
keyObject = (key as! JSONEncodable).encode() as! NSObject
} else {
keyObject = key as! NSObject
}
let valueObject: AnyObject
if Value.self is JSONEncodable {
valueObject = (value as! JSONEncodable).encode()
} else {
valueObject = value as! NSObject
}
dictionary[keyObject] = valueObject
}
return dictionary
}
}
extension JSON {
func decode() -> Bool? {
return self.bool

View File

@ -35,14 +35,15 @@ extension {{projectName}}API {
path = path.stringByReplacingOccurrencesOfString("{{=<% %>=}}{<%paramName%>}<%={{ }}=%>", withString: "\({{paramName}})", options: .LiteralSearch, range: nil){{/pathParams}}
let url = {{projectName}}API.basePath + path
{{#bodyParam}}
let parameters = {{paramName}}.encode() as! [String:AnyObject]{{/bodyParam}}{{^bodyParam}}
let parameters = {{paramName}}{{^required}}?{{/required}}.encode() as? [String:AnyObject]{{/bodyParam}}{{^bodyParam}}
let nillableParameters: [String:AnyObject?] = {{^queryParams}}[:]{{/queryParams}}{{#queryParams}}{{^secondaryParam}}[{{/secondaryParam}}
"{{paramName}}": {{paramName}}{{#hasMore}},{{/hasMore}}{{^hasMore}}
]{{/hasMore}}{{/queryParams}}
let parameters = APIHelper.rejectNil(nillableParameters){{/bodyParam}}
return {{projectName}}API.requestBuilderFactory.getBuilder()
(method: "{{httpMethod}}", URLString: url, parameters: parameters, isBody: {{^queryParams}}true{{/queryParams}}{{#queryParams}}{{^secondaryParam}}false{{/secondaryParam}}{{/queryParams}})
let requestBuilder: RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Empty{{/returnType}}>.Type = {{projectName}}API.requestBuilderFactory.getBuilder()
return requestBuilder(method: "{{httpMethod}}", URLString: url, parameters: parameters, isBody: {{^queryParams}}true{{/queryParams}}{{#queryParams}}{{^secondaryParam}}false{{/secondaryParam}}{{/queryParams}})
}
{{/operation}}
}