Moving stuff about/renaming

This commit is contained in:
Adam Fowler
2021-03-14 10:19:51 +00:00
parent 06251739d7
commit 5f49dd6953
5 changed files with 54 additions and 89 deletions

View File

@@ -2,4 +2,9 @@
struct HBMustacheContext { struct HBMustacheContext {
let first: Bool let first: Bool
let last: Bool let last: Bool
init(first: Bool = false, last: Bool = false) {
self.first = first
self.last = last
}
} }

View File

@@ -1,23 +1,9 @@
protocol HBMustacheBaseMethods { protocol HBMustacheMethods {
func runMethod(_ name: String) -> Any? func runMethod(_ name: String) -> Any?
} }
protocol HBMustacheMethods {
typealias Method = (Self) -> Any
static var methods: [String: Method] { get set }
}
extension HBMustacheMethods { extension String: HBMustacheMethods {
static func addMethod(named name: String, method: @escaping Method) {
Self.methods[name] = method
}
func runMethod(_ name: String) -> Any? {
guard let method = Self.methods[name] else { return nil }
return method(self)
}
}
extension String: HBMustacheBaseMethods {
func runMethod(_ name: String) -> Any? { func runMethod(_ name: String) -> Any? {
switch name { switch name {
case "lowercased": case "lowercased":
@@ -30,7 +16,7 @@ extension String: HBMustacheBaseMethods {
} }
} }
extension Array: HBMustacheBaseMethods { extension Array: HBMustacheMethods {
func runMethod(_ name: String) -> Any? { func runMethod(_ name: String) -> Any? {
switch name { switch name {
case "reversed": case "reversed":
@@ -43,7 +29,7 @@ extension Array: HBMustacheBaseMethods {
} }
} }
extension Dictionary: HBMustacheBaseMethods { extension Dictionary: HBMustacheMethods {
func runMethod(_ name: String) -> Any? { func runMethod(_ name: String) -> Any? {
switch name { switch name {
case "enumerated": case "enumerated":

View File

@@ -0,0 +1,14 @@
protocol HBMustacheParent {
func child(named: String) -> Any?
}
extension HBMustacheParent {
// default child to nil
func child(named: String) -> Any? { return nil }
}
extension Dictionary: HBMustacheParent where Key == String {
func child(named: String) -> Any? { return self[named] }
}

View File

@@ -0,0 +1,28 @@
protocol HBMustacheSequence {
func renderSection(with template: HBMustacheTemplate) -> String
func renderInvertedSection(with template: HBMustacheTemplate) -> String
}
extension Sequence {
func renderSection(with template: HBMustacheTemplate) -> String {
var string = ""
for obj in self {
string += template.render(obj)
}
return string
}
func renderInvertedSection(with template: HBMustacheTemplate) -> String {
var iterator = makeIterator()
if iterator.next() == nil {
return template.render(self)
}
return ""
}
}
extension Array: HBMustacheSequence {}
extension ReversedCollection: HBMustacheSequence {}
extension EnumeratedSequence: HBMustacheSequence {}

View File

@@ -37,7 +37,7 @@ extension HBMustacheTemplate {
func renderSection(_ child: Any?, parent: Any, with template: HBMustacheTemplate) -> String { func renderSection(_ child: Any?, parent: Any, with template: HBMustacheTemplate) -> String {
switch child { switch child {
case let array as HBSequence: case let array as HBMustacheSequence:
return array.renderSection(with: template) return array.renderSection(with: template)
case let bool as Bool: case let bool as Bool:
return bool ? template.render(parent) : "" return bool ? template.render(parent) : ""
@@ -52,7 +52,7 @@ extension HBMustacheTemplate {
func renderInvertedSection(_ child: Any?, parent: Any, with template: HBMustacheTemplate) -> String { func renderInvertedSection(_ child: Any?, parent: Any, with template: HBMustacheTemplate) -> String {
switch child { switch child {
case let array as HBSequence: case let array as HBMustacheSequence:
return array.renderInvertedSection(with: template) return array.renderInvertedSection(with: template)
case let bool as Bool: case let bool as Bool:
return bool ? "" : template.render(parent) return bool ? "" : template.render(parent)
@@ -86,7 +86,7 @@ extension HBMustacheTemplate {
child = _getChild(named: nameSplit[...], from: object) child = _getChild(named: nameSplit[...], from: object)
} }
if let method = method, if let method = method,
let runnable = child as? HBMustacheBaseMethods { let runnable = child as? HBMustacheMethods {
if let result = runnable.runMethod(method) { if let result = runnable.runMethod(method) {
return result return result
} }
@@ -113,71 +113,3 @@ extension HBMustacheTemplate {
} }
} }
protocol HBMustacheParent {
func child(named: String) -> Any?
}
extension HBMustacheParent {
// default child to nil
func child(named: String) -> Any? { return nil }
}
extension Dictionary: HBMustacheParent where Key == String {
func child(named: String) -> Any? { return self[named] }
}
protocol HBSequence {
func renderSection(with template: HBMustacheTemplate) -> String
func renderInvertedSection(with template: HBMustacheTemplate) -> String
}
extension Array: HBSequence {
func renderSection(with template: HBMustacheTemplate) -> String {
var string = ""
for obj in self {
string += template.render(obj)
}
return string
}
func renderInvertedSection(with template: HBMustacheTemplate) -> String {
if count == 0 {
return template.render(self)
}
return ""
}
}
extension ReversedCollection: HBSequence {
func renderSection(with template: HBMustacheTemplate) -> String {
var string = ""
for obj in self {
string += template.render(obj)
}
return string
}
func renderInvertedSection(with template: HBMustacheTemplate) -> String {
if count == 0 {
return template.render(self)
}
return ""
}
}
extension EnumeratedSequence: HBSequence {
func renderSection(with template: HBMustacheTemplate) -> String {
var string = ""
for obj in self {
string += template.render(obj)
}
return string
}
func renderInvertedSection(with template: HBMustacheTemplate) -> String {
if self.underestimatedCount == 0 {
return template.render(self)
}
return ""
}
}