mirror of
https://github.com/yonaskolb/XcodeGen.git
synced 2026-03-18 20:02:25 +00:00
53cb43cb66
* Add validation to ensure settings.configs values are dictionaries to prevent misuse * Add tests for invalid settings.configs value formats * Replaced with filter and split into a function * Rename invalidConfigsFormat to invalidConfigsMappingFormat * Add comments to explain invalid fixture * Rename test fixture * Update CHANGELOG.md * Correct grammer * Use KeyPath instead of closure * Rename validateMappingStyleInConfig to extractValidConfigs * Add a document comment for extractValidConfigs(from:) * Use old testing api and remove EquatableErrorBox * Rename test case to use "mapping" instead of "dictionary" * Add ValidSettingsExtractor to encapsulate the logic for converting a dictionary to Settings * Add settings validation for both Target and AggregateTarget * Add tests for invalid settings.configs in Target and AggregateTarget * Add document comments for ValidSettingsExtractor * Rename ValidSettingsExtractor to BuildSettingsExtractor * Add settings validation for settingGroups * Add tests for settingGroups * Rename extract to parse * Refactor * Update Tests/ProjectSpecTests/InvalidConfigsFormatTests.swift --------- Co-authored-by: Yonas Kolb <yonaskolb@users.noreply.github.com>
38 lines
1.4 KiB
Swift
38 lines
1.4 KiB
Swift
import Foundation
|
|
import JSONUtilities
|
|
|
|
/// A helper for extracting and validating the `Settings` object from a JSON dictionary.
|
|
struct BuildSettingsParser {
|
|
let jsonDictionary: JSONDictionary
|
|
|
|
/// Attempts to extract and parse the `Settings` from the dictionary.
|
|
///
|
|
/// - Returns: A valid `Settings` object
|
|
func parse() throws -> Settings {
|
|
do {
|
|
return try jsonDictionary.json(atKeyPath: "settings")
|
|
} catch let specParsingError as SpecParsingError {
|
|
// Re-throw `SpecParsingError` to prevent the misuse of settings.configs.
|
|
throw specParsingError
|
|
} catch {
|
|
// Ignore all errors except `SpecParsingError`
|
|
return .empty
|
|
}
|
|
}
|
|
|
|
/// Attempts to extract and parse setting groups from the dictionary with fallback defaults.
|
|
///
|
|
/// - Returns: Parsed setting groups or default groups if parsing fails
|
|
func parseSettingGroups() throws -> [String: Settings] {
|
|
do {
|
|
return try jsonDictionary.json(atKeyPath: "settingGroups", invalidItemBehaviour: .fail)
|
|
} catch let specParsingError as SpecParsingError {
|
|
// Re-throw `SpecParsingError` to prevent the misuse of settingGroups.
|
|
throw specParsingError
|
|
} catch {
|
|
// Ignore all errors except `SpecParsingError`
|
|
return jsonDictionary.json(atKeyPath: "settingPresets") ?? [:]
|
|
}
|
|
}
|
|
}
|