Skip to content

Commit

Permalink
Merge pull request #1 from zenangst/feature/semantic-compare
Browse files Browse the repository at this point in the history
Feature/semantic compare
  • Loading branch information
zenangst committed Mar 5, 2015
2 parents ba5f045 + 38254a9 commit d1e5518
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 4 deletions.
39 changes: 36 additions & 3 deletions Source/Versions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,47 @@

import Foundation

public extension NSString {

public enum Semantic {
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<Int>) -> 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
}

func olderThan(version: String) -> Bool {
return !self.isEqualToString(version) ? !self.newerThan(version) : false
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
}

}
7 changes: 7 additions & 0 deletions Versions Tests/Versions_Tests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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"))
}

}
2 changes: 1 addition & 1 deletion Versions.podspec
Original file line number Diff line number Diff line change
@@ -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.
Expand Down

0 comments on commit d1e5518

Please sign in to comment.