Skip to content

Commit 0c3624e

Browse files
Jakob MygindJakob Mygind
authored andcommitted
- updated to swift 3 - compiles
1 parent 273c1cf commit 0c3624e

File tree

8 files changed

+88
-73
lines changed

8 files changed

+88
-73
lines changed

Cartfile.resolved

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
github "jatoben/CommandLine" "be13f512744a187feed05a900abda8cc7e3283cc"
1+
github "jatoben/CommandLine" "7a5502c068512b67c3711968ae7f6a3fa71f1ca9"
22
github "nodes-ios/model-generator" "06d9aa994e5773c01330552b10880768ed31e9e7"

nstack-translations-generator/Classes/TranslationsGenerator/Downloader.swift

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,49 +9,49 @@
99
import Foundation
1010

1111
struct Downloader {
12-
var semaphore = dispatch_semaphore_create(0)
12+
var semaphore = DispatchSemaphore(value: 0)
1313

14-
static func dataWithDownloaderSettings(settings: DownloaderSettings) throws -> NSData? {
14+
static func dataWithDownloaderSettings(_ settings: DownloaderSettings) throws -> Data? {
1515
return try Downloader().dataWithDownloaderSettings(settings)
1616
}
1717

18-
func dataWithDownloaderSettings(settings: DownloaderSettings) throws -> NSData? {
18+
func dataWithDownloaderSettings(_ settings: DownloaderSettings) throws -> Data? {
1919
var requestURL = settings.URL
2020

2121
// Add flat if needed
22-
if settings.flatTranslations, let comps = NSURLComponents(URL: requestURL, resolvingAgainstBaseURL: false) {
23-
let queryItem = NSURLQueryItem(name: "flat", value: "true")
22+
if settings.flatTranslations, var comps = URLComponents(url: requestURL as URL, resolvingAgainstBaseURL: false) {
23+
let queryItem = URLQueryItem(name: "flat", value: "true")
2424
comps.queryItems?.append(queryItem)
25-
requestURL = comps.URL ?? requestURL
25+
requestURL = comps.url as URL? ?? requestURL
2626
}
2727

28-
let request = NSMutableURLRequest(URL: requestURL)
28+
let request = NSMutableURLRequest(url: requestURL as URL)
2929

3030
// Add headers
3131
request.setValue("application/vnd.nodes", forHTTPHeaderField: "accept")
3232
request.setValue(settings.appKey, forHTTPHeaderField: "X-Rest-Api-Key")
3333
request.setValue(settings.appID, forHTTPHeaderField: "X-Application-Id")
3434

35-
var actualData: NSData?
36-
var finalError: ErrorType?
35+
var actualData: Data?
36+
var finalError: Error?
3737

3838
// Start data task
39-
NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
39+
URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in
4040
var customError: NSError?
4141

42-
if let response = response as? NSHTTPURLResponse {
42+
if let response = response as? HTTPURLResponse {
4343
switch response.statusCode {
4444
case 300...999:
4545
let content: String?
4646
if let data = data {
47-
let json = try? NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) as? [String: AnyObject]
47+
let json = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: AnyObject]
4848
content = "\(json ?? [:])"
4949
} else {
5050
content = nil
5151
}
5252

5353
let errorString = "Server response contained error: \(content ?? "")"
54-
customError = NSError(domain: Generator.errorDomain, code: ErrorCode.DownloaderError.rawValue,
54+
customError = NSError(domain: Generator.errorDomain, code: ErrorCode.downloaderError.rawValue,
5555
userInfo: [NSLocalizedDescriptionKey : errorString])
5656
default: break
5757
}
@@ -60,15 +60,15 @@ struct Downloader {
6060
actualData = data
6161
finalError = customError ?? error
6262

63-
dispatch_semaphore_signal(self.semaphore)
63+
self.semaphore.signal()
6464
}.resume()
6565

66-
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
66+
semaphore.wait(timeout: DispatchTime.distantFuture)
6767

6868
if let error = finalError {
6969
throw error
7070
}
7171

7272
return actualData
7373
}
74-
}
74+
}

nstack-translations-generator/Classes/TranslationsGenerator/DownloaderSettings.swift

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,39 +9,39 @@
99
import Foundation
1010

1111
struct DownloaderSettings {
12-
var URL: NSURL
12+
var URL: Foundation.URL
1313
var appID: String
1414
var appKey: String
1515
var flatTranslations: Bool
1616
}
1717

1818
extension DownloaderSettings {
1919
// Default URL
20-
private static let defaultURL = NSURL(string: "https://nstack.io/api/v1/translate/mobile/keys?all=true")!
20+
fileprivate static let defaultURL = Foundation.URL(string: "https://nstack.io/api/v1/translate/mobile/keys?all=true")!
2121

2222
// Dictionary keys
23-
private static let plistURLKey = "REST_API_URL"
24-
private static let plistAppIDKey = "APPLICATION_ID"
25-
private static let plistAppKeyKey = "REST_API_KEY"
26-
private static let plistFlatKey = "FLAT"
23+
fileprivate static let plistURLKey = "REST_API_URL"
24+
fileprivate static let plistAppIDKey = "APPLICATION_ID"
25+
fileprivate static let plistAppKeyKey = "REST_API_KEY"
26+
fileprivate static let plistFlatKey = "FLAT"
2727

28-
static func settingsFromConfigurationFile(plistPath plistPath: String) throws -> DownloaderSettings {
29-
let data = try NSData(contentsOfFile: plistPath, options: NSDataReadingOptions(rawValue: 0))
30-
let plist = try NSPropertyListSerialization.propertyListWithData(data, options: .Immutable, format: nil)
28+
static func settingsFromConfigurationFile(plistPath: String) throws -> DownloaderSettings {
29+
let data = try Data(contentsOf: Foundation.URL(fileURLWithPath: plistPath), options: NSData.ReadingOptions(rawValue: 0))
30+
let plist = try PropertyListSerialization.propertyList(from: data, options: PropertyListSerialization.MutabilityOptions(), format: nil)
3131

3232
guard let dictionary = plist as? [String: AnyObject] else {
33-
throw NSError(domain: Generator.errorDomain, code: ErrorCode.DownloaderError.rawValue,
33+
throw NSError(domain: Generator.errorDomain, code: ErrorCode.downloaderError.rawValue,
3434
userInfo: [NSLocalizedDescriptionKey : "Couldn't parse plist into a dictionary."])
3535
}
3636

3737
var downloadURL = defaultURL
3838

39-
guard let appID = dictionary[plistAppIDKey] as? String, appKey = dictionary[plistAppKeyKey] as? String else {
40-
throw NSError(domain: Generator.errorDomain, code: ErrorCode.DownloaderError.rawValue,
39+
guard let appID = dictionary[plistAppIDKey] as? String, let appKey = dictionary[plistAppKeyKey] as? String else {
40+
throw NSError(domain: Generator.errorDomain, code: ErrorCode.downloaderError.rawValue,
4141
userInfo: [NSLocalizedDescriptionKey : "App ID or API key not found in the plist file."])
4242
}
4343

44-
if let customURLString = dictionary[plistURLKey] as? String, customURL = NSURL(string: customURLString) {
44+
if let customURLString = dictionary[plistURLKey] as? String, let customURL = Foundation.URL(string: customURLString) {
4545
downloadURL = customURL
4646
}
4747

@@ -60,4 +60,4 @@ extension DownloaderSettings {
6060
self.appKey = appKey
6161
self.flatTranslations = flatTranslations
6262
}
63-
}
63+
}

nstack-translations-generator/Classes/TranslationsGenerator/Extensions.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ import Foundation
1010

1111
extension String {
1212
var uppercasedFirstLetter: String {
13-
return String(characters.prefix(1)).uppercaseString + String(characters.dropFirst())
13+
return String(characters.prefix(1)).uppercased() + String(characters.dropFirst())
1414
}
1515
}

nstack-translations-generator/Classes/TranslationsGenerator/Generator.swift

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ import Foundation
1010
import ModelGenerator
1111

1212
public enum ErrorCode: Int {
13-
case WrongArguments = 1000
14-
case DownloaderError
15-
case ParserError
16-
case GeneratorError
13+
case wrongArguments = 1000
14+
case downloaderError
15+
case parserError
16+
case generatorError
1717
}
1818

1919
// Public interface/implementation
20-
@objc public class TranslationsGenerator: NSObject {
21-
public class func generate(arguments: [String]) throws -> String {
20+
@objc open class TranslationsGenerator: NSObject {
21+
open class func generate(_ arguments: [String]) throws -> String {
2222
return try Generator.generate(arguments)
2323
}
2424
}
@@ -32,7 +32,7 @@ struct Generator {
3232
return settings
3333
}
3434

35-
static func generate(arguments: [String]) throws -> String {
35+
static func generate(_ arguments: [String]) throws -> String {
3636

3737
// 1. Parse arguments
3838
let settings = try GeneratorSettings.parseFromArguments(arguments)
@@ -43,32 +43,32 @@ struct Generator {
4343

4444
// If we got data, continue with generation, throw otherwise
4545
guard let data = dData else {
46-
throw NSError(domain: errorDomain, code: ErrorCode.GeneratorError.rawValue, userInfo:
46+
throw NSError(domain: errorDomain, code: ErrorCode.generatorError.rawValue, userInfo:
4747
[NSLocalizedDescriptionKey : "No data received from downloader."])
4848
}
4949

5050
// 3. - 7. Generate the code
5151
let generatedOutput = try self.generateFromData(data)
5252

5353
// 8. Write to disk (optionally)
54-
if let outputPath: NSString = settings.outputPath {
55-
let path: NSString = outputPath.stringByExpandingTildeInPath
56-
let jsonFile = path.stringByAppendingPathComponent(self.modelName + ".json")
57-
let translationsFile = path.stringByAppendingPathComponent(self.modelName + ".swift")
54+
if let outputPath: NSString = settings.outputPath as NSString? {
55+
let path: NSString = outputPath.expandingTildeInPath as NSString
56+
let jsonFile = path.appendingPathComponent(self.modelName + ".json")
57+
let translationsFile = path.appendingPathComponent(self.modelName + ".swift")
5858

5959
// Save translations
60-
try generatedOutput.code.writeToFile(translationsFile, atomically: true, encoding: NSUTF8StringEncoding)
60+
try generatedOutput.code.write(toFile: translationsFile, atomically: true, encoding: String.Encoding.utf8)
6161

6262
// Save json
63-
let jsonData = try NSJSONSerialization.dataWithJSONObject(generatedOutput.JSON, options: .PrettyPrinted)
64-
try jsonData.writeToFile(jsonFile, options: .DataWritingAtomic)
63+
let jsonData = try JSONSerialization.data(withJSONObject: generatedOutput.JSON, options: .prettyPrinted)
64+
try jsonData.write(to: URL(fileURLWithPath: jsonFile), options: .atomic)
6565
}
6666

6767
// 7. Finish
6868
return generatedOutput.code
6969
}
7070

71-
static func generateFromData(data: NSData) throws -> (code: String, JSON: [String: AnyObject]) {
71+
static func generateFromData(_ data: Data) throws -> (code: String, JSON: [String: AnyObject]) {
7272
// 3. Parse translations
7373
let parsed = try Parser.parseResponseData(data)
7474

@@ -87,7 +87,7 @@ struct Generator {
8787
return (finalString, parsed.JSON)
8888
}
8989

90-
private static func generateMainModelFromParserOutput(output: ParserOutput, subModels: String?) throws -> String {
90+
fileprivate static func generateMainModelFromParserOutput(_ output: ParserOutput, subModels: String?) throws -> String {
9191
var indent = Indentation(level: 0)
9292

9393
var modelString = "public final class \(self.modelName): Translatable {\n"
@@ -115,7 +115,7 @@ struct Generator {
115115
return modelString
116116
}
117117

118-
private static func generateSubModelsFromParserOutput(output: ParserOutput) throws -> (models: String, extensions: String) {
118+
fileprivate static func generateSubModelsFromParserOutput(_ output: ParserOutput) throws -> (models: String, extensions: String) {
119119
var modelsString = ""
120120
var extensionsString = ""
121121

@@ -149,16 +149,16 @@ struct Generator {
149149
return (modelsString, extensionsString)
150150
}
151151

152-
private static func templateString() throws -> String {
153-
let templatePath = NSBundle(forClass: TranslationsGenerator.self).pathForResource("ImplementationTemplate", ofType: "txt")
152+
fileprivate static func templateString() throws -> String {
153+
let templatePath = Bundle(for: TranslationsGenerator.self).path(forResource: "ImplementationTemplate", ofType: "txt")
154154
guard let path = templatePath else {
155-
throw NSError(domain: self.errorDomain, code: ErrorCode.GeneratorError.rawValue,
155+
throw NSError(domain: self.errorDomain, code: ErrorCode.generatorError.rawValue,
156156
userInfo: [NSLocalizedDescriptionKey : "Internal inconsistency error. Couldn't find template file to insert generated code into."])
157157
}
158158

159159
var string = try String(contentsOfFile: path)
160-
let dateString = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .ShortStyle, timeStyle: .LongStyle)
161-
string = string.stringByReplacingOccurrencesOfString("#DATE#", withString: dateString)
160+
let dateString = DateFormatter.localizedString(from: Date(), dateStyle: .short, timeStyle: .long)
161+
string = string.replacingOccurrences(of: "#DATE#", with: dateString)
162162

163163
return string
164164
}

nstack-translations-generator/Classes/TranslationsGenerator/GeneratorSettings.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ struct GeneratorSettings {
1616
}
1717

1818
extension GeneratorSettings {
19-
static func parseFromArguments(arguments: [String]) throws -> GeneratorSettings {
19+
static func parseFromArguments(_ arguments: [String]) throws -> GeneratorSettings {
2020
if arguments.count < 5 || arguments.count > 8 {
21-
throw NSError(domain: Generator.errorDomain, code: ErrorCode.WrongArguments.rawValue,
21+
throw NSError(domain: Generator.errorDomain, code: ErrorCode.wrongArguments.rawValue,
2222
userInfo: [NSLocalizedDescriptionKey : "Error, wrong number of arguments passed."])
2323
}
2424

@@ -45,22 +45,22 @@ extension GeneratorSettings {
4545
}
4646

4747
// Get plist path if present
48-
if let plistPaths = parsedArguments["-plist"] where plistPaths.count == 1 {
48+
if let plistPaths = parsedArguments["-plist"] , plistPaths.count == 1 {
4949
plistPath = plistPaths[0]
5050
}
5151

5252
// Get keys if present
53-
if let keysArray = parsedArguments["-keys"] where keysArray.count == 2 {
53+
if let keysArray = parsedArguments["-keys"] , keysArray.count == 2 {
5454
keys = (keysArray[0], keysArray[1])
5555
}
5656

5757
// Check if we have keys
5858
if plistPath == nil && (keys?.appKey == nil || keys?.appID == nil) {
59-
throw NSError(domain: Generator.errorDomain, code: ErrorCode.WrongArguments.rawValue,
59+
throw NSError(domain: Generator.errorDomain, code: ErrorCode.wrongArguments.rawValue,
6060
userInfo: [NSLocalizedDescriptionKey : "No or multiple plist paths, or wrong keys format."])
6161
}
6262

63-
if let flat = parsedArguments["-flat"] where flat.count == 1 && flat[0] == "1" {
63+
if let flat = parsedArguments["-flat"] , flat.count == 1 && flat[0] == "1" {
6464
flatTranslations = true
6565
}
6666

@@ -73,7 +73,7 @@ extension GeneratorSettings {
7373
} else if let plistPath = plistPath {
7474
return try DownloaderSettings.settingsFromConfigurationFile(plistPath: plistPath)
7575
}
76-
throw NSError(domain: Generator.errorDomain, code: ErrorCode.GeneratorError.rawValue,
76+
throw NSError(domain: Generator.errorDomain, code: ErrorCode.generatorError.rawValue,
7777
userInfo: [NSLocalizedDescriptionKey : "Couldn't generate downloader settings from arguments."])
7878
}
79-
}
79+
}

nstack-translations-generator/Classes/TranslationsGenerator/Parser.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ struct ParserOutput {
1616
}
1717

1818
struct Parser {
19-
static func parseResponseData(data: NSData) throws -> ParserOutput {
20-
let object = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(rawValue: 0))
19+
static func parseResponseData(_ data: Data) throws -> ParserOutput {
20+
let object = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions(rawValue: 0))
2121
guard let dictionary = object as? [String: AnyObject] else {
22-
throw NSError(domain: Generator.errorDomain, code: ErrorCode.ParserError.rawValue, userInfo:
22+
throw NSError(domain: Generator.errorDomain, code: ErrorCode.parserError.rawValue, userInfo:
2323
[NSLocalizedDescriptionKey : "The data isn't in the correct format. Translations JSON file should have a dictionary as it's root object."])
2424
}
2525

@@ -31,18 +31,18 @@ struct Parser {
3131
content = t
3232
}
3333

34-
guard let langsDictionary = content, firstLanguage = langsDictionary.values.first as? [String: AnyObject] else {
35-
throw NSError(domain: Generator.errorDomain, code: ErrorCode.ParserError.rawValue, userInfo:
34+
guard let langsDictionary = content, let firstLanguage = langsDictionary.values.first as? [String: AnyObject] else {
35+
throw NSError(domain: Generator.errorDomain, code: ErrorCode.parserError.rawValue, userInfo:
3636
[NSLocalizedDescriptionKey : "Parsed JSON wasn't containing translations data."])
3737
}
3838

3939
// Fix for default
4040
var language = firstLanguage
4141
if let object = language["default"] {
42-
language.removeValueForKey("default")
42+
language.removeValue(forKey: "default")
4343
language["defaultSection"] = object
4444
}
4545

4646
return ParserOutput(JSON: dictionary, mainKeys: language.map({ return $0.0 }), language: language, isFlat: language is [String: String])
4747
}
48-
}
48+
}

0 commit comments

Comments
 (0)