Skip to content

Commit a24964f

Browse files
authored
Merge pull request #71 from Igor-Palaguta/intValue
Fix intValue() that always failed
2 parents 023af5a + fd8c7bf commit a24964f

File tree

5 files changed

+64
-29
lines changed

5 files changed

+64
-29
lines changed

Sources/GraphQL/Execution/Values.swift

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,11 @@ func getArgumentValues(argDefs: [GraphQLArgumentDefinition], argASTs: [Argument]
3737
let name = argDef.name
3838
let valueAST = argASTMap[name]?.value
3939

40-
var value = try valueFromAST(
40+
let value = try valueFromAST(
4141
valueAST: valueAST,
4242
type: argDef.type,
4343
variables: variableValues
44-
)
45-
46-
if value == nil {
47-
value = try argDef.defaultValue.flatMap { string in
48-
guard let data = string.data(using: .utf8) else {
49-
return nil
50-
}
51-
52-
let object = try JSONSerialization.jsonObject(with: data, options: .allowFragments)
53-
return try map(from: object)
54-
}
55-
}
44+
) ?? argDef.defaultValue
5645

5746
if let value = value {
5847
result[name] = value

Sources/GraphQL/Map/Map.swift

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,6 @@ public enum MapError : Error {
44
case incompatibleType
55
case outOfBounds
66
case valueNotFound
7-
case notMapInitializable(Any.Type)
8-
case notMapRepresentable(Any.Type)
9-
case notMapDictionaryKeyInitializable(Any.Type)
10-
case notMapDictionaryKeyRepresentable(Any.Type)
11-
case cannotInitialize(type: Any.Type, from: Any.Type)
127
}
138

149
// MARK: Map
@@ -229,27 +224,27 @@ extension Map {
229224

230225
extension Map {
231226
public var bool: Bool? {
232-
return try? get()
227+
return try? boolValue()
233228
}
234229

235230
public var int: Int? {
236-
return try? (get() as Number).intValue
231+
return try? intValue()
237232
}
238233

239234
public var double: Double? {
240-
return try? (get() as Number).doubleValue
235+
return try? doubleValue()
241236
}
242237

243238
public var string: String? {
244-
return try? get()
239+
return try? stringValue()
245240
}
246241

247242
public var array: [Map]? {
248-
return try? get()
243+
return try? arrayValue()
249244
}
250245

251246
public var dictionary: [String: Map]? {
252-
return try? get()
247+
return try? dictionaryValue()
253248
}
254249
}
255250

@@ -288,7 +283,7 @@ extension Map {
288283

289284
public func intValue(converting: Bool = false) throws -> Int {
290285
guard converting else {
291-
return try get()
286+
return try (get() as Number).intValue
292287
}
293288

294289
switch self {
@@ -312,7 +307,7 @@ extension Map {
312307

313308
public func doubleValue(converting: Bool = false) throws -> Double {
314309
guard converting else {
315-
return try get()
310+
return try (get() as Number).doubleValue
316311
}
317312

318313
switch self {

Sources/GraphQL/Type/Definition.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -667,7 +667,7 @@ public struct GraphQLArgument {
667667
public struct GraphQLArgumentDefinition {
668668
public let name: String
669669
public let type: GraphQLInputType
670-
public let defaultValue: String?
670+
public let defaultValue: Map?
671671
public let description: String?
672672

673673
init(
@@ -678,7 +678,7 @@ public struct GraphQLArgumentDefinition {
678678
) {
679679
self.name = name
680680
self.type = type
681-
self.defaultValue = defaultValue?.description
681+
self.defaultValue = defaultValue
682682
self.description = description
683683
}
684684
}

Sources/GraphQL/Type/Introspection.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ let __InputValue = try! GraphQLObjectType(
360360
return nil
361361
}
362362

363-
return .string(defaultValue)
363+
return .string(defaultValue.description)
364364
}
365365
)
366366
]
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
@testable import GraphQL
2+
import XCTest
3+
4+
class MapTests: XCTestCase {
5+
func testThrowableConversion() throws {
6+
XCTAssertEqual(try Map.number(5).intValue(), 5)
7+
XCTAssertEqual(try Map.number(3.14).doubleValue(), 3.14)
8+
XCTAssertEqual(try Map.bool(false).boolValue(), false)
9+
XCTAssertEqual(try Map.bool(true).boolValue(), true)
10+
XCTAssertEqual(try Map.string("Hello world").stringValue(), "Hello world")
11+
12+
}
13+
14+
func testOptionalConversion() {
15+
XCTAssertEqual(Map.number(5).int, 5)
16+
XCTAssertEqual(Map.number(3.14).double, 3.14)
17+
XCTAssertEqual(Map.bool(false).bool, false)
18+
XCTAssertEqual(Map.bool(true).bool, true)
19+
XCTAssertEqual(Map.string("Hello world").string, "Hello world")
20+
}
21+
22+
func testArrayConversion() throws {
23+
let map = Map.array([.number(1), .number(4), .number(9)])
24+
XCTAssertEqual(map.array?.count, 3)
25+
26+
let array = try map.arrayValue()
27+
XCTAssertEqual(array.count, 3)
28+
29+
XCTAssertEqual(try array[0].intValue(), 1)
30+
XCTAssertEqual(try array[1].intValue(), 4)
31+
XCTAssertEqual(try array[2].intValue(), 9)
32+
}
33+
34+
func testDictionaryConversion() throws {
35+
let map = Map.dictionary(
36+
[
37+
"first": .number(1),
38+
"second": .number(4),
39+
"third": .number(9)
40+
]
41+
)
42+
XCTAssertEqual(map.dictionary?.count, 3)
43+
44+
let dictionary = try map.dictionaryValue()
45+
46+
XCTAssertEqual(dictionary.count, 3)
47+
XCTAssertEqual(try dictionary["first"]?.intValue(), 1)
48+
XCTAssertEqual(try dictionary["second"]?.intValue(), 4)
49+
XCTAssertEqual(try dictionary["third"]?.intValue(), 9)
50+
}
51+
}

0 commit comments

Comments
 (0)