From 78c520dd68e744024771524bfcb489c734a4f03c Mon Sep 17 00:00:00 2001 From: Christoffer Winterkvist Date: Thu, 5 Mar 2015 09:53:10 +0100 Subject: [PATCH 1/6] Refactor olderThan() --- Source/Versions.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Source/Versions.swift b/Source/Versions.swift index aa3cd2b..e531637 100644 --- a/Source/Versions.swift +++ b/Source/Versions.swift @@ -15,7 +15,9 @@ public extension NSString { } func olderThan(version: String) -> Bool { - return !self.isEqualToString(version) ? !self.newerThan(version) : false + let isEqual: Bool = self == version + return !isEqual ? !self.newerThan(version) : false + } } } From 826e8647810e480e4e15e463d454719f7977024d Mon Sep 17 00:00:00 2001 From: Christoffer Winterkvist Date: Thu, 5 Mar 2015 09:53:29 +0100 Subject: [PATCH 2/6] Move extension to String --- Source/Versions.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Versions.swift b/Source/Versions.swift index e531637..1c0f1d8 100644 --- a/Source/Versions.swift +++ b/Source/Versions.swift @@ -8,8 +8,8 @@ import Foundation -public extension NSString { - +public extension String { + func newerThan(version :String) -> Bool { return self.compare(version, options: NSStringCompareOptions.NumericSearch) == NSComparisonResult.OrderedDescending } From b9767407913eb6a680325a72a11a5d0d306f693d Mon Sep 17 00:00:00 2001 From: Christoffer Winterkvist Date: Thu, 5 Mar 2015 09:53:37 +0100 Subject: [PATCH 3/6] Add semanticCompare() --- Source/Versions.swift | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Source/Versions.swift b/Source/Versions.swift index 1c0f1d8..2728a74 100644 --- a/Source/Versions.swift +++ b/Source/Versions.swift @@ -8,8 +8,24 @@ import Foundation +public enum Semantic: Int { + case Major, Minor, Patch, Same, Unknown +} + public extension String { + subscript (i: Int) -> Character { + return self[advance(self.startIndex, i)] + } + + subscript (i: Int) -> String { + return String(self[i] as Character) + } + + subscript (r: Range) -> String { + return substringWithRange(Range(start: advance(startIndex, r.startIndex), end: advance(startIndex, r.endIndex))) + } + func newerThan(version :String) -> Bool { return self.compare(version, options: NSStringCompareOptions.NumericSearch) == NSComparisonResult.OrderedDescending } @@ -18,6 +34,21 @@ public extension String { let isEqual: Bool = self == version return !isEqual ? !self.newerThan(version) : false } + + func semanticCompare(version: String) -> Semantic { + var semanticType = Semantic.Unknown + + if self == version { + semanticType = Semantic.Same + } else if self[0] != version[advance(self.startIndex, 0)] { + semanticType = Semantic.Major + } else if self[0...2] != version[0...2] && self.olderThan(version) { + semanticType = Semantic.Minor + } else if self[0...4] != version[0...4] && self.olderThan(version) { + semanticType = Semantic.Patch + } + + return semanticType } } From 5142effbdf8ec6d1d278e8df6fc4ce29545ed2e0 Mon Sep 17 00:00:00 2001 From: Christoffer Winterkvist Date: Thu, 5 Mar 2015 09:53:41 +0100 Subject: [PATCH 4/6] Add tests --- Versions Tests/Versions_Tests.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Versions Tests/Versions_Tests.swift b/Versions Tests/Versions_Tests.swift index 3575e9b..aaec58f 100644 --- a/Versions Tests/Versions_Tests.swift +++ b/Versions Tests/Versions_Tests.swift @@ -43,4 +43,11 @@ class Versions_Tests: XCTestCase { XCTAssertFalse("".newerThan("1.0")) } + func testSymanticVersioning() { + XCTAssertEqual(Semantic.Same, "1.0".semanticCompare("1.0")) + XCTAssertEqual(Semantic.Major, "1.0".semanticCompare("2.0")) + XCTAssertEqual(Semantic.Minor, "1.2".semanticCompare("1.3")) + XCTAssertEqual(Semantic.Patch, "1.2.1".semanticCompare("1.2.2")) + } + } From a1d4fd5ac8ca5bf8d855b21cb7995aca83122a3a Mon Sep 17 00:00:00 2001 From: Christoffer Winterkvist Date: Thu, 5 Mar 2015 09:54:08 +0100 Subject: [PATCH 5/6] Bump version --- Versions.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Versions.podspec b/Versions.podspec index d40d894..54da523 100644 --- a/Versions.podspec +++ b/Versions.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "Versions" - s.version = "0.1" + s.version = "0.2" s.summary = "Helping you find inner peace when comparing version numbers in Swift." s.description = <<-DESC * Helping you find inner peace when comparing version numbers in Swift. From 38254a983809e860d9c0fde4ec74874716501652 Mon Sep 17 00:00:00 2001 From: Christoffer Winterkvist Date: Thu, 5 Mar 2015 12:35:27 +0100 Subject: [PATCH 6/6] Remove type --- Source/Versions.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Versions.swift b/Source/Versions.swift index 2728a74..10e7671 100644 --- a/Source/Versions.swift +++ b/Source/Versions.swift @@ -8,7 +8,7 @@ import Foundation -public enum Semantic: Int { +public enum Semantic { case Major, Minor, Patch, Same, Unknown }