0001 // 0002 // AskSettings.swift 0003 // AskSettings 0004 // 0005 // Created by Omar Abdelhafith on 03/11/2015. 0006 // Copyright © 2015 Omar Abdelhafith. All rights reserved. 0007 // 0008 0009 0010 /// Settings used to costumize the behaviour of ask() 0011 public class AskSettings<T
Ask.swift:18 public func ask(prompt: String, customizationBlock: (AskSettings<String> -> Void)? = nil) -> String {Ask.swift:33 public func ask<T: ArgConvertibleType>(prompt: String, type: T.Type, customizationBlock: (AskSettings<T> -> Void)? = nil) -> T {Ask.swift:71 func getSettings<T>(callback: (AskSettings<T> -> Void)?) -> AskSettings<T> {Ask.swift:71 func getSettings<T>(callback: (AskSettings<T> -> Void)?) -> AskSettings<T> {Ask.swift:72 let settings = AskSettings<T>()AskSettings.swift:46 extension AskSettings: AskerValidator {: ArgConvertibleType> { 0012 0013 /// Default value to set incase the user entered a blank 0014 public var defaultValue
AskSettings.swift:14 public var defaultValue: T?AskSettings.swift:20 var invalidClousures: [(T -> Bool, String)] = []AskSettings.swift:30 public func addInvalidCase(description: String, invalidIfTrue: (T -> Bool)) {AskSettings.swift:34 func preparedItem(originalString string: String) -> T {AskSettings.swift:39 return T.fromString(string)!: T? 0015 0016 /// If set to true, another message will follow successful user entry asking the user to confirm 0017 /// his selection 0018 public var confirm
AskSettings.swift:35 if string.isEmpty && defaultValue != nil {AskSettings.swift:36 return defaultValue!= false 0019 0020 var invalidClousures
Ask.swift:39 if settings.confirm {: [(T -> Bool, String)] = [] 0021 0022 0023 /** 0024 Add an invalid entry case 0025 0026 - parameter description: The string to be printed to the stdout if the case is invalid 0027 - parameter invalidIfTrue: If true is returned, then the user input was invalid, if false, the 0028 user input was valid. 0029 */ 0030 public func addInvalidCase(description: String, invalidIfTrue: (T -> Bool)) { 0031 invalidClousures.append(invalidIfTrue, description) 0032 } 0033 0034 func preparedItem(originalString string: String) -> T { 0035 if string.isEmpty && defaultValue != nil { 0036 return defaultValue! 0037 } 0038 0039 return T.fromString(string)! 0040 } 0041 } 0042 0043 0044 // MARK:- Internal extension 0045 0046 extension AskSettings: AskerValidator { 0047 0048 func invalidItemMessage(string: String?) -> String? { 0049 guard let string = string else { 0050 return "You provided an empty message, pelase enter anything!" 0051 } 0052 0053 guard let validatedItem = T.fromString(string) else { 0054 return "You must enter a valid \(T.typeName())." 0055 } 0056 0057 guard let validationError = firstValidationError(validatedItem) else { 0058 return nil 0059 } 0060 0061 return validationError 0062 } 0063 0064 func newItemPromptMessage() -> String { 0065 return "? " 0066 } 0067 0068 func validatedItem(forString string: String) -> T { 0069 return T.fromString(string)! 0070 } 0071 0072 func firstValidationError
AskSettings.swift:31 invalidClousures.append(invalidIfTrue, description)AskSettings.swift:74 for (isInvalid, validationError) in invalidClousures {(item: T) -> String? { 0073 0074 for (isInvalid, validationError) in invalidClousures { 0075 if isInvalid(item) { 0076 return validationError 0077 } 0078 } 0079 0080 return nil 0081 } 0082 }
AskSettings.swift:57 guard let validationError = firstValidationError(validatedItem) else {