Skip to content

Commit

Permalink
Merge pull request #3 from volatilegg/fetch-allRaws-easier
Browse files Browse the repository at this point in the history
Add allRawValues return allRaws value with all values initialised
  • Loading branch information
polac24 committed Mar 3, 2018
2 parents 11105e2 + 061f2b1 commit 4b0c4c1
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 17 deletions.
29 changes: 17 additions & 12 deletions Project/EnumListProjectTests/EnumListTests.swift
Expand Up @@ -111,12 +111,13 @@ class EnumListTests: XCTestCase {
// Arrange

// Act
SubjectString.Values.initialize()
let allValues = SubjectString.Values.all
let allRawValues = SubjectString.Values.allRawValues
// Assert
XCTAssertEqual(allValues, Set([.caseNo1, .caseNo2]))
XCTAssertEqual(allRawValues, Set(["case1", "case2"]))
}

func testAllRawStringValuesExistInAllRaws(){
// Arrange

Expand All @@ -126,7 +127,7 @@ class EnumListTests: XCTestCase {
// Assert
XCTAssertEqual(allRaws, Set(["case1", "case2"]))
}

func testNotCallingAllBeforeAskingForAllRawsReturnsEmptySet(){
enum PrivateSubject: EnumListStringRaw<PrivateSubject.Values>, RawRepresentable{
struct Values:StringEnumValues {
Expand All @@ -146,7 +147,7 @@ class EnumListTests: XCTestCase {
// Assert
XCTAssertTrue(allRaws.isEmpty)
}

func testFetchingNonExistingEnumFillsAllRawsSet(){
enum PrivateSubject: EnumListStringRaw<PrivateSubject.Values>, RawRepresentable{
struct Values:StringEnumValues {
Expand Down Expand Up @@ -206,7 +207,7 @@ class EnumListTests: XCTestCase {
// Arrange

// Act
PrivateSubject.Values.initialize()
_ = PrivateSubject.Values.all

// Assert
let allRaws = PrivateSubject.Values.allRaws
Expand All @@ -219,8 +220,10 @@ class EnumListTests: XCTestCase {

// Act
let allValues = SubjectInt.Values.all
let allRawValues = SubjectInt.Values.allRawValues
// Assert
XCTAssertEqual(allValues, Set([.caseNo1, .caseNo2]))
XCTAssertEqual(allRawValues, Set([1, 200]))
}

func testAllRawIntValuesExistInAllRaws(){
Expand All @@ -238,7 +241,7 @@ class EnumListTests: XCTestCase {
SubjectString.Values.allRaws = ["X"]

// Act
SubjectString.Values.initialize()
_ = SubjectString.Values.all

// Assert
let allRaws = SubjectString.Values.allRaws
Expand All @@ -250,7 +253,7 @@ class EnumListTests: XCTestCase {
SubjectInt.Values.allRaws = [111]

// Act
SubjectInt.Values.initialize()
_ = SubjectInt.Values.all

// Assert
let allRaws = SubjectInt.Values.allRaws
Expand All @@ -273,19 +276,21 @@ class EnumListTests: XCTestCase {
SubjectInt.Values.allRaws = [111]

// Act

// Assert
let allRaws = SubjectInt.Values.all
let allRawValues = SubjectInt.Values.allRawValues
// Assert

XCTAssertEqual(allRaws, Set([.caseNo1, .caseNo2]))
XCTAssertEqual(allRawValues, Set([1, 200]))
}



func testAllValuesForEnumWithDefaultStringVariableAreValid(){
XCTAssertEqual(SubjectStringDefaultValue.Values.all, [.caseNo1, .caseNo2])
XCTAssertEqual(SubjectStringDefaultValue.Values.allRawValues, ["caseNo1", "case2"])
}
func testAllRawValuesForEnumWithDefaultStringVariableAreValid(){
// Arrange
SubjectStringDefaultValue.Values.initialize();
_ = SubjectStringDefaultValue.Values.all
// Act
XCTAssertEqual(SubjectStringDefaultValue.Values.allRaws, ["caseNo1", "case2"])
}
Expand Down
5 changes: 3 additions & 2 deletions Project/EnumListProjectTests/EnumListUnboxTests.swift
Expand Up @@ -42,11 +42,12 @@ class EnumListUnboxTests: XCTestCase {
let _:SubjectString = try a.unbox(key: "data")

// Act
SubjectString.Values.initialize()
let all = SubjectString.Values.all

let allRawValues = SubjectString.Values.allRawValues

// Assert
XCTAssertEqual(all, [.caseNo1, .caseNo2])
XCTAssertEqual(allRawValues, ["case1", "case2"])
}

func testUnboxingStringFindsEnum() throws {
Expand Down
3 changes: 2 additions & 1 deletion README.md
Expand Up @@ -136,7 +136,8 @@ YourEnumName.Values.allRaws // Set(["caseNo1", "case2"])

### All Raw Values

To can grab all raw values (which are a `Set<String>` or `Set<Int>`, depending of your `enum` deifinition), but keep in mind that you have to either call `YourEnumName.Values.initialize()` or `YourEnumName.Values.all` before that, just to fill `YourEnumName.Values.allRaws` with valid values.
`YourEnumName.Values.allRawValues` for grabing all raw values (which are a `Set<String>` or `Set<Int>`, depending of your `enum` deifinition).
**Note:** `YourEnumName.Values.initialize()` or `YourEnumName.Values.all` are not required to call before anymore.

### Safety

Expand Down
12 changes: 10 additions & 2 deletions Sources/EnumValuesExtensions.swift
Expand Up @@ -25,7 +25,11 @@ public extension StringEnumValues where Element.RawValue == EnumListStringRaw<Se
initialize()
return buildAllElementsSet(conversion:{EnumListStringRaw<Self>(stringLiteral: $0)})
}
static func initialize(){
static var allRawValues: Set<String> {
initialize()
return allRaws
}
private static func initialize(){
resetRaws(imaginationRawValue: EnumListStringRaw<Self>())
}
}
Expand All @@ -35,7 +39,11 @@ public extension IntEnumValues where Element.RawValue == EnumListIntRaw<Self>, R
initialize()
return buildAllElementsSet(conversion:EnumListIntRaw<Self>.init)
}
static func initialize(){
static var allRawValues: Set<Int> {
initialize()
return allRaws
}
private static func initialize(){
resetRaws(imaginationRawValue: EnumListIntRaw<Self>())
}
}

0 comments on commit 4b0c4c1

Please sign in to comment.