Skip to content

Commit f6133be

Browse files
committed
DATAMONGO-2138 - Rename buildCriteria(), use fold()
1 parent c6a49cd commit f6133be

File tree

3 files changed

+24
-28
lines changed

3 files changed

+24
-28
lines changed

spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/query/TypedCriteriaExtensions.kt

+17-26
Original file line numberDiff line numberDiff line change
@@ -34,31 +34,22 @@ class TypedCriteria(
3434
}
3535

3636
fun typedCriteria(vararg typedCriteria: TypedCriteria): CriteriaDefinition {
37-
return chainCriteria(Criteria(), typedCriteria.toList())
37+
return typedCriteria.fold(Criteria()) { chain, head -> head.operation(chain.and(head.name))}
3838
}
3939

40-
private fun chainCriteria(criteria: Criteria, tail: Collection<TypedCriteria>): Criteria {
41-
if (tail.isEmpty()) {
42-
return criteria
43-
}
44-
val head = tail.first()
45-
head.operation(criteria.and(head.name))
46-
return chainCriteria(criteria, tail.drop(1))
47-
}
48-
49-
infix fun <T> KProperty<T>.isEqualTo(value: T) = filter { isEqualTo(value) }
50-
infix fun <T> KProperty<T>.ne(value: T) = filter { ne(value) }
51-
infix fun <T> KProperty<T>.lt(value: T) = filter { lt(value) }
52-
infix fun <T> KProperty<T>.lte(value: T) = filter { lte(value) }
53-
infix fun <T> KProperty<T>.gt(value: T) = filter { gt(value) }
54-
infix fun <T> KProperty<T>.gte(value: T) = filter { gte(value) }
55-
infix fun <T> KProperty<T>.inValues(value: Collection<T>) = filter { `in`(value) }
56-
fun <T> KProperty<T>.inValues(vararg o: Any) = filter { `in`(*o) }
57-
infix fun <T> KProperty<T>.nin(value: Collection<T>) = filter { nin(value) }
58-
fun <T> KProperty<T>.nin(vararg o: Any) = filter { nin(*o) }
59-
fun KProperty<Number>.mod(value: Number, remainder: Number) = filter { mod(value, remainder) }
60-
infix fun <T : Collection<*>> KProperty<T>.all(value: T) = filter { all(value) }
61-
fun <T> KProperty<T>.all(vararg o: Any) = filter { all(*o) }
62-
fun KProperty<Collection<*>>.size(s: Int) = filter { size(s) }
63-
64-
private fun <T> KProperty<T>.filter(operation: Criteria.() -> Criteria) = TypedCriteria(this, operation)
40+
infix fun <T> KProperty<T>.isEqualTo(value: T) = buildCriteria { isEqualTo(value) }
41+
infix fun <T> KProperty<T>.ne(value: T) = buildCriteria { ne(value) }
42+
infix fun <T> KProperty<T>.lt(value: T) = buildCriteria { lt(value) }
43+
infix fun <T> KProperty<T>.lte(value: T) = buildCriteria { lte(value) }
44+
infix fun <T> KProperty<T>.gt(value: T) = buildCriteria { gt(value) }
45+
infix fun <T> KProperty<T>.gte(value: T) = buildCriteria { gte(value) }
46+
infix fun <T> KProperty<T>.inValues(value: Collection<T>) = buildCriteria { `in`(value) }
47+
fun <T> KProperty<T>.inValues(vararg o: Any) = buildCriteria { `in`(*o) }
48+
infix fun <T> KProperty<T>.nin(value: Collection<T>) = buildCriteria { nin(value) }
49+
fun <T> KProperty<T>.nin(vararg o: Any) = buildCriteria { nin(*o) }
50+
fun KProperty<Number>.mod(value: Number, remainder: Number) = buildCriteria { mod(value, remainder) }
51+
infix fun <T : Collection<*>> KProperty<T>.all(value: T) = buildCriteria { all(value) }
52+
fun <T> KProperty<T>.all(vararg o: Any) = buildCriteria { all(*o) }
53+
infix fun KProperty<Collection<*>>.size(s: Int) = buildCriteria { size(s) }
54+
55+
private fun <T> KProperty<T>.buildCriteria(operation: Criteria.() -> Criteria) = TypedCriteria(this, operation)

spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/query/TypedCriteriaExtensionsTest.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,14 @@ class TypedCriteriaExtensionsTest {
122122

123123
@Test
124124
fun `Typed criteria all list`() {
125-
val typed = Book::authors.all(listOf(1, 2, 3))
125+
val typed = Book::authors all listOf(1, 2, 3)
126126
val classic = Criteria("authors").all(listOf(1, 2, 3))
127127
assertCriteriaEquals(classic, typed)
128128
}
129129

130130
@Test
131131
fun `Typed criteria size`() {
132-
val typed = Book::authors.size(4)
132+
val typed = Book::authors size 4
133133
val classic = Criteria("authors").size(4)
134134
assertCriteriaEquals(classic, typed)
135135
}

spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/query/TypedQueryExtensionsTest.kt

+5
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,9 @@ class TypedQueryExtensionsTest {
3939

4040
assertEquals(classic.queryObject, typed.queryObject)
4141
}
42+
43+
@Test
44+
fun `Typed Query`() {
45+
typedQuery(Book::name lte 123)
46+
}
4247
}

0 commit comments

Comments
 (0)