Browse Source

Add Kotlin extension for `findAndModify` without options parameter.

Signed-off-by: NillPoe <nillpoe@pm.me>
Closes: #5128
Original pull request: #5130
5.0.x
NillPoe 1 month ago committed by Mark Paluch
parent
commit
348edbd17b
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 10
      spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/MongoOperationsExtensions.kt
  2. 9
      spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveMongoOperationsExtensions.kt
  3. 21
      spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/MongoOperationsExtensionsTests.kt
  4. 21
      spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveMongoOperationsExtensionsTests.kt

10
spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/MongoOperationsExtensions.kt

@ -255,6 +255,16 @@ inline fun <reified T : Any, reified E : Any> MongoOperations.findDistinct(query @@ -255,6 +255,16 @@ inline fun <reified T : Any, reified E : Any> MongoOperations.findDistinct(query
if (collectionName != null) findDistinct(query, field, collectionName, E::class.java, T::class.java)
else findDistinct(query, field, E::class.java, T::class.java)
/**
* Extension for [MongoOperations.findAndModify] leveraging reified type parameters.
*
* @author Yejun Ho
* @since 5.0.2
*/
inline fun <reified T : Any> MongoOperations.findAndModify(query: Query, update: UpdateDefinition, collectionName: String? = null): T? =
if (collectionName != null) findAndModify(query, update, T::class.java, collectionName)
else findAndModify(query, update, T::class.java)
/**
* Extension for [MongoOperations.findAndModify] leveraging reified type parameters.
*

9
spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveMongoOperationsExtensions.kt

@ -188,6 +188,15 @@ inline fun <reified O : Any> ReactiveMongoOperations.aggregate( @@ -188,6 +188,15 @@ inline fun <reified O : Any> ReactiveMongoOperations.aggregate(
inline fun <reified T : Any> ReactiveMongoOperations.geoNear(near: NearQuery, collectionName: String? = null): Flux<GeoResult<T>> =
if (collectionName != null) geoNear(near, T::class.java, collectionName) else geoNear(near, T::class.java)
/**
* Extension for [ReactiveMongoOperations.findAndModify] leveraging reified type parameters.
*
* @author Yejun Ho
* @since 5.0.2
*/
inline fun <reified T : Any> ReactiveMongoOperations.findAndModify(query: Query, update: UpdateDefinition, collectionName: String? = null): Mono<T> =
if (collectionName != null) findAndModify(query, update, T::class.java, collectionName) else findAndModify(query, update, T::class.java)
/**
* Extension for [ReactiveMongoOperations.findAndModify] leveraging reified type parameters.
*

21
spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/MongoOperationsExtensionsTests.kt

@ -319,6 +319,27 @@ class MongoOperationsExtensionsTests { @@ -319,6 +319,27 @@ class MongoOperationsExtensionsTests {
verify { operations.findAndModify(query, update, options, First::class.java) }
}
@Test // GH-5128
fun `findAndModify(Query, Update) with reified type parameter extension should call its Java counterpart`() {
val query = mockk<Query>()
val update = mockk<Update>()
operations.findAndModify<First>(query, update)
verify { operations.findAndModify(query, update, First::class.java) }
}
@Test // GH-5128
fun `findAndModify(Query, Update, String) with reified type parameter extension should call its Java counterpart`() {
val collectionName = "foo"
val query = mockk<Query>()
val update = mockk<Update>()
operations.findAndModify<First>(query, update, collectionName)
verify { operations.findAndModify(query, update, First::class.java, collectionName) }
}
@Test // DATAMONGO-1689
fun `findAndModify(Query, Update, FindAndModifyOptions, String) with reified type parameter extension should call its Java counterpart`() {

21
spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveMongoOperationsExtensionsTests.kt

@ -162,6 +162,27 @@ class ReactiveMongoOperationsExtensionsTests { @@ -162,6 +162,27 @@ class ReactiveMongoOperationsExtensionsTests {
verify { operations.findById(id, First::class.java, collectionName) }
}
@Test // GH-5128
fun `findAndModify(Query, Update) with reified type parameter extension should call its Java counterpart`() {
val query = mockk<Query>()
val update = mockk<Update>()
operations.findAndModify<First>(query, update)
verify { operations.findAndModify(query, update, First::class.java) }
}
@Test // GH-5128
fun `findAndModify(Query, Update, String) with reified type parameter extension should call its Java counterpart`() {
val collectionName = "foo"
val query = mockk<Query>()
val update = mockk<Update>()
operations.findAndModify<First>(query, update, collectionName)
verify { operations.findAndModify(query, update, First::class.java, collectionName) }
}
@Test // DATAMONGO-1689
fun `findAndModify(Query, Update, FindAndModifyOptions) with reified type parameter extension should call its Java counterpart`() {

Loading…
Cancel
Save