[Context] Convenience push with block function
This commit is contained in:
@@ -42,4 +42,12 @@ public class Context {
|
|||||||
public func pop() -> [String: Any]? {
|
public func pop() -> [String: Any]? {
|
||||||
return dictionaries.popLast()
|
return dictionaries.popLast()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Push a new level onto the context for the duration of the execution of the given closure
|
||||||
|
public func push<Result>(dictionary: [String: Any]? = nil, @noescape closure: (() throws -> Result)) rethrows -> Result {
|
||||||
|
push(dictionary)
|
||||||
|
let result = try closure()
|
||||||
|
pop()
|
||||||
|
return result
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,4 +50,16 @@ describe("Context") {
|
|||||||
context.push(["name": "Katie"])
|
context.push(["name": "Katie"])
|
||||||
try expect(context["name"] as? String) == "Katie"
|
try expect(context["name"] as? String) == "Katie"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$0.it("allows you to push a dictionary and run a closure then restoring previous state") {
|
||||||
|
var didRun = false
|
||||||
|
|
||||||
|
try context.push(["name": "Katie"]) {
|
||||||
|
didRun = true
|
||||||
|
try expect(context["name"] as? String) == "Katie"
|
||||||
|
}
|
||||||
|
|
||||||
|
try expect(didRun).to.beTrue()
|
||||||
|
try expect(context["name"] as? String) == "Kyle"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user