added queryBuilder utilities for clause sequences

This commit is contained in:
John Rommel Estropia
2017-09-22 00:08:01 +09:00
parent 1bfb7451c3
commit 03bb7619da

View File

@@ -161,6 +161,11 @@ public extension From {
return self.fetchChain(appending: clause)
}
public func appending<S: Sequence>(_ clauses: S) -> FetchChainBuilder<D> where S.Element: FetchClause {
return self.fetchChain(appending: clauses)
}
// MARK: Private
@@ -168,6 +173,11 @@ public extension From {
return .init(from: self, fetchClauses: [clause])
}
private func fetchChain<S: Sequence>(appending clauses: S) -> FetchChainBuilder<D> where S.Element: FetchClause {
return .init(from: self, fetchClauses: Array(clauses))
}
}
public extension From where D: NSManagedObject {
@@ -293,6 +303,11 @@ public extension FetchChainBuilder {
return self.fetchChain(appending: clause)
}
public func appending<S: Sequence>(_ clauses: S) -> FetchChainBuilder<D> where S.Element: FetchClause {
return self.fetchChain(appending: clauses)
}
// MARK: Private
@@ -303,6 +318,14 @@ public extension FetchChainBuilder {
fetchClauses: self.fetchClauses + [clause]
)
}
private func fetchChain<S: Sequence>(appending clauses: S) -> FetchChainBuilder<D> where S.Element: FetchClause {
return .init(
from: self.from,
fetchClauses: self.fetchClauses + Array(clauses)
)
}
}
public extension QueryChainBuilder {
@@ -352,6 +375,11 @@ public extension QueryChainBuilder {
return self.queryChain(appending: clause)
}
public func appending<S: Sequence>(_ clauses: S) -> QueryChainBuilder<D, R> where S.Element: QueryClause {
return self.queryChain(appending: clauses)
}
// MARK: Private
@@ -363,6 +391,15 @@ public extension QueryChainBuilder {
queryClauses: self.queryClauses + [clause]
)
}
private func queryChain<S: Sequence>(appending clauses: S) -> QueryChainBuilder<D, R> where S.Element: QueryClause {
return .init(
from: self.from,
select: self.select,
queryClauses: self.queryClauses + Array(clauses)
)
}
}
public extension QueryChainBuilder where D: NSManagedObject {
@@ -429,6 +466,11 @@ public extension SectionMonitorChainBuilder {
return self.sectionMonitorChain(appending: clause)
}
public func appending<S: Sequence>(_ clauses: S) -> SectionMonitorChainBuilder<D> where S.Element: FetchClause {
return self.sectionMonitorChain(appending: clauses)
}
// MARK: Private
@@ -440,4 +482,13 @@ public extension SectionMonitorChainBuilder {
fetchClauses: self.fetchClauses + [clause]
)
}
private func sectionMonitorChain<S: Sequence>(appending clauses: S) -> SectionMonitorChainBuilder<D> where S.Element: FetchClause {
return .init(
from: self.from,
sectionBy: self.sectionBy,
fetchClauses: self.fetchClauses + Array(clauses)
)
}
}