Moving stuff about/renaming
This commit is contained in:
@@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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":
|
||||||
|
|||||||
14
Sources/HummingbirdMustache/Parent.swift
Normal file
14
Sources/HummingbirdMustache/Parent.swift
Normal 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] }
|
||||||
|
}
|
||||||
|
|
||||||
28
Sources/HummingbirdMustache/Sequence.swift
Normal file
28
Sources/HummingbirdMustache/Sequence.swift
Normal 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 {}
|
||||||
@@ -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 ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user