Skip to content

Commit 473a537

Browse files
author
Michael Long
committed
Resolver.Name conformance to Hashable and Equatable
1 parent a2b83de commit 473a537

File tree

4 files changed

+36
-7
lines changed

4 files changed

+36
-7
lines changed

CHANGELOG

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Resolver Changelog
22

3+
### 1.4.5
4+
5+
* Resolver.Name conformance to Hashable and Equatable
6+
37
### 1.4.4
48

59
* Reduced code size and improved performance

Resolver.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "Resolver"
3-
s.version = "1.4.4"
3+
s.version = "1.4.5"
44
s.summary = "An ultralight Dependency Injection / Service Locator framework for Swift on iOS."
55
s.homepage = "https://github.com/hmlongco/Resolver"
66
s.license = "MIT"

Sources/Resolver/Resolver.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -356,8 +356,8 @@ extension Resolver {
356356
extension Resolver {
357357

358358
/// Internal class used by Resolver for typed name space support.
359-
public struct Name: ExpressibleByStringLiteral {
360-
let rawValue: String
359+
public struct Name: ExpressibleByStringLiteral, Hashable, Equatable {
360+
public let rawValue: String
361361
public init(_ rawValue: String) {
362362
self.rawValue = rawValue
363363
}
@@ -368,6 +368,12 @@ extension Resolver {
368368
if let string = string { return Name(string) }
369369
return nil
370370
}
371+
static public func == (lhs: Name, rhs: Name) -> Bool {
372+
return lhs.rawValue == rhs.rawValue
373+
}
374+
public func hash(into hasher: inout Hasher) {
375+
hasher.combine(rawValue)
376+
}
371377
}
372378

373379
}

Tests/ResolverTests/ResolverNameTests.swift

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,6 @@ class ResolverNameTests: XCTestCase {
147147

148148
func testResolverNamedStringRegistrations() {
149149

150-
Task.init {
151-
152-
}
153-
154150
resolver.register { AppConfig() }
155151
resolver.register(name: "host1") { r in r.resolve(AppConfig.self).host1 }
156152
resolver.register(name: "host2") { r in r.resolve(AppConfig.self).host2 }
@@ -164,4 +160,27 @@ class ResolverNameTests: XCTestCase {
164160
XCTAssertNil(host3)
165161
}
166162

163+
func testResolverNameHashableConformance() {
164+
165+
let registrations: [Resolver.Name:XYZNameService] = [
166+
.fred : XYZNameService("Fred"),
167+
.barney : XYZNameService("Barney"),
168+
]
169+
170+
registrations.forEach { (name, service) in
171+
resolver.register(name: name) { service }
172+
}
173+
174+
let fred: XYZNameService? = resolver.optional(name: .fred)
175+
let barney: XYZNameService? = resolver.optional(name: .barney)
176+
177+
// Check all services resolved
178+
XCTAssertNotNil(fred)
179+
XCTAssertNotNil(barney)
180+
181+
// Check correct service factories called
182+
XCTAssert(fred?.name == "Fred")
183+
XCTAssert(barney?.name == "Barney")
184+
}
185+
167186
}

0 commit comments

Comments
 (0)