From cbbef9536a74989613b39c7b9f961e4d408a04bc Mon Sep 17 00:00:00 2001 From: Vitaly Yurchenko Date: Fri, 7 Jun 2019 17:26:49 +0200 Subject: [PATCH 1/2] Add support for adding additional attributions --- Attributions/Attributions/Attribution.swift | 10 +++++----- Attributions/Attributions/AttributionReader.swift | 5 ++++- Attributions/Attributions/AttributionSection.swift | 4 +++- Attributions/Attributions/License.swift | 2 +- .../AttributionsTests/AttributionReaderTests.swift | 4 +++- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/Attributions/Attributions/Attribution.swift b/Attributions/Attributions/Attribution.swift index 5ba0c2e..445417e 100644 --- a/Attributions/Attributions/Attribution.swift +++ b/Attributions/Attributions/Attribution.swift @@ -1,10 +1,10 @@ import Foundation -class Attribution { +public class Attribution { - let name: String - let displayedForMainBundleIDs: [String] - let license: License + public let name: String + public let displayedForMainBundleIDs: [String] + public let license: License convenience init?(json: [AnyHashable: Any]) { guard @@ -19,7 +19,7 @@ class Attribution { self.init(name: name, displayedForMainBundleIDs: displayedForMainBundleIDs, license: license) } - init(name: String, displayedForMainBundleIDs: [String], license: License) { + public init(name: String, displayedForMainBundleIDs: [String], license: License) { self.name = name self.displayedForMainBundleIDs = displayedForMainBundleIDs self.license = license diff --git a/Attributions/Attributions/AttributionReader.swift b/Attributions/Attributions/AttributionReader.swift index 7a534bb..099b8c7 100644 --- a/Attributions/Attributions/AttributionReader.swift +++ b/Attributions/Attributions/AttributionReader.swift @@ -5,11 +5,14 @@ class AttributionReader { func compileAttributions(sections: [AttributionSection], mainBundle: Bundle, licenseFiles: [String]) throws -> [[Attribution]] { var attributionsPerSection = [[Attribution]]() for section in sections { - let attributions = try jsonToAttribution(file: section.file, mainBundle: mainBundle) + var attributions = try jsonToAttribution(file: section.file, mainBundle: mainBundle) try attributions.forEach { let licenseReader = LicenseReader(attribution: $0, licenseFiles: licenseFiles) try licenseReader.verifyLicenseExists() } + if let additionalAttributions = section.additionalAttributions { + attributions.append(contentsOf: additionalAttributions) + } attributionsPerSection.append(attributions) } return attributionsPerSection diff --git a/Attributions/Attributions/AttributionSection.swift b/Attributions/Attributions/AttributionSection.swift index 84df1d7..b1d8ff5 100644 --- a/Attributions/Attributions/AttributionSection.swift +++ b/Attributions/Attributions/AttributionSection.swift @@ -4,10 +4,12 @@ public struct AttributionSection { public let file: URL public let description: String + public let additionalAttributions: [Attribution]? - public init(file: URL, description: String) { + public init(file: URL, description: String, additionalAttributions: [Attribution]? = nil) { self.file = file self.description = description + self.additionalAttributions = additionalAttributions } } diff --git a/Attributions/Attributions/License.swift b/Attributions/Attributions/License.swift index b4619e6..5c3127a 100644 --- a/Attributions/Attributions/License.swift +++ b/Attributions/Attributions/License.swift @@ -1,6 +1,6 @@ import Foundation -enum License { +public enum License { case id(String) case text(String) diff --git a/Attributions/AttributionsTests/AttributionReaderTests.swift b/Attributions/AttributionsTests/AttributionReaderTests.swift index 5f0cbd5..1d2122c 100644 --- a/Attributions/AttributionsTests/AttributionReaderTests.swift +++ b/Attributions/AttributionsTests/AttributionReaderTests.swift @@ -18,11 +18,13 @@ class AttributionReaderTests: XCTestCase { XCTFail() return } - sections.append(AttributionSection(file: path, description: "GoodJSON")) + let additionalAttribution = Attribution(name: "Additional Framework", displayedForMainBundleIDs: [], license: .text("It's free!!!")) + sections.append(AttributionSection(file: path, description: "GoodJSON", additionalAttributions: [additionalAttribution])) verifyReadingSections(framework: "Apache", hasBundleIDs: []) verifyReadingSections(framework: "Eclipse", hasBundleIDs: []) verifyReadingSections(framework: "Another Framework", hasBundleIDs: ["com.kayak.AttributionsTests"]) + verifyReadingSections(framework: "Additional Framework", hasBundleIDs: []) } func testThrowsErrorForBadLicenseKey() { From 346b006f64fcf098b17256865dad4ca0fb536645 Mon Sep 17 00:00:00 2001 From: Vitaly Yurchenko Date: Fri, 14 Jun 2019 11:39:11 +0200 Subject: [PATCH 2/2] Make additionalAttributions non optional --- Attributions/Attributions/AttributionReader.swift | 4 +--- Attributions/Attributions/AttributionSection.swift | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Attributions/Attributions/AttributionReader.swift b/Attributions/Attributions/AttributionReader.swift index 099b8c7..ab7c833 100644 --- a/Attributions/Attributions/AttributionReader.swift +++ b/Attributions/Attributions/AttributionReader.swift @@ -10,9 +10,7 @@ class AttributionReader { let licenseReader = LicenseReader(attribution: $0, licenseFiles: licenseFiles) try licenseReader.verifyLicenseExists() } - if let additionalAttributions = section.additionalAttributions { - attributions.append(contentsOf: additionalAttributions) - } + attributions.append(contentsOf: section.additionalAttributions) attributionsPerSection.append(attributions) } return attributionsPerSection diff --git a/Attributions/Attributions/AttributionSection.swift b/Attributions/Attributions/AttributionSection.swift index b1d8ff5..8ed2672 100644 --- a/Attributions/Attributions/AttributionSection.swift +++ b/Attributions/Attributions/AttributionSection.swift @@ -4,9 +4,9 @@ public struct AttributionSection { public let file: URL public let description: String - public let additionalAttributions: [Attribution]? + public let additionalAttributions: [Attribution] - public init(file: URL, description: String, additionalAttributions: [Attribution]? = nil) { + public init(file: URL, description: String, additionalAttributions: [Attribution] = []) { self.file = file self.description = description self.additionalAttributions = additionalAttributions