diff --git a/CHANGELOG.md b/CHANGELOG.md index 865bc3f..2e5a0e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - Fixed rendering `{{ block.super }}` with several levels of inheritance - Fixed checking dictionary values for nil in `default` filter - Fixed comparing string variables with string literals, in Swift 4 string literals became `Substring` and thus couldn't be directly compared to strings. +- Integer literals now resolve into Int values, not Float ## 0.10.1 diff --git a/Sources/Variable.swift b/Sources/Variable.swift index 659cf51..c17b966 100644 --- a/Sources/Variable.swift +++ b/Sources/Variable.swift @@ -63,8 +63,11 @@ public struct Variable : Equatable, Resolvable { return String(variable[variable.characters.index(after: variable.startIndex) ..< variable.characters.index(before: variable.endIndex)]) } + // Number literal + if let int = Int(variable) { + return int + } if let number = Number(variable) { - // Number literal return number } diff --git a/Tests/StencilTests/FilterSpec.swift b/Tests/StencilTests/FilterSpec.swift index ded572c..2501610 100644 --- a/Tests/StencilTests/FilterSpec.swift +++ b/Tests/StencilTests/FilterSpec.swift @@ -136,7 +136,19 @@ func testFilter() { let result = try template.render(Context(dictionary: [:])) try expect(result) == "Hello World" } - + + $0.it("can use int as default") { + let template = Template(templateString: "{{ value|default:1 }}") + let result = try template.render(Context(dictionary: [:])) + try expect(result) == "1" + } + + $0.it("can use float as default") { + let template = Template(templateString: "{{ value|default:1.5 }}") + let result = try template.render(Context(dictionary: [:])) + try expect(result) == "1.5" + } + $0.it("checks for underlying nil value correctly") { let template = Template(templateString: "Hello {{ user.name|default:\"anonymous\" }}") let nilName: String? = nil diff --git a/Tests/StencilTests/VariableSpec.swift b/Tests/StencilTests/VariableSpec.swift index 44af2cc..1a567d8 100644 --- a/Tests/StencilTests/VariableSpec.swift +++ b/Tests/StencilTests/VariableSpec.swift @@ -61,7 +61,7 @@ func testVariable() { $0.it("can resolve an integer literal") { let variable = Variable("5") - let result = try variable.resolve(context) as? Number + let result = try variable.resolve(context) as? Int try expect(result) == 5 }