Skip to content

Commit 969418d

Browse files
committed
Release 1.10.0
2 parents efab062 + b9176ed commit 969418d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1450
-86
lines changed

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
# 1.10.0
2+
3+
### Added
4+
- Recommend API client (#281)
5+
6+
### Fix
7+
- Add `abTestID` to `ResponseSearch` (#285)
8+
9+
### Changed
10+
- Non-null fields from `ResponseSearch` throws `IllegalStateException` instead of NPE (#286)
11+
112
# 1.9.2
213

314
### Fix

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ query.sortFacetsBy = SortFacetsBy.Count
145145
If you use this library in an Android project which uses R8, there is nothing you have to do. The specific rules are
146146
already bundled into the JAR, which can be interpreted by R8 automatically.
147147

148-
If however, you don’t use R8 you have to apply the rules from [this file](src/jvmMain/resources/META-INF/proguard/algoliasearch.pro).
148+
If however, you don’t use R8 you have to apply the rules from [this file](client/src/jvmMain/resources/META-INF/proguard/algoliasearch.pro).
149149

150150
### Guides
151151

build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ buildscript {
33
mavenCentral()
44
}
55
dependencies {
6-
val kotlinVersion = "1.5.21"
6+
val kotlinVersion = "1.5.30"
77
classpath(kotlin("gradle-plugin", version = kotlinVersion))
88
classpath(kotlin("serialization", version = kotlinVersion))
9-
classpath("com.vanniktech:gradle-maven-publish-plugin:0.17.0")
10-
classpath("com.diffplug.spotless:spotless-plugin-gradle:5.14.0")
9+
classpath("com.vanniktech:gradle-maven-publish-plugin:0.18.0")
10+
classpath("com.diffplug.spotless:spotless-plugin-gradle:5.15.0")
1111
}
1212
}
1313

client/build.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ kotlin {
2222
sourceSets {
2323
all {
2424
languageSettings.apply {
25-
progressiveMode = true
26-
useExperimentalAnnotation("kotlin.RequiresOptIn")
25+
optIn("kotlin.RequiresOptIn")
2726
}
2827
}
2928
val commonMain by getting {
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
@file:Suppress("FunctionName")
2+
3+
package com.algolia.search.client
4+
5+
import com.algolia.search.client.internal.ClientRecommendImpl
6+
import com.algolia.search.configuration.Configuration
7+
import com.algolia.search.configuration.ConfigurationRecommend
8+
import com.algolia.search.configuration.Credentials
9+
import com.algolia.search.configuration.internal.Credentials
10+
import com.algolia.search.configuration.internal.DEFAULT_LOG_LEVEL
11+
import com.algolia.search.endpoint.EndpointRecommend
12+
import com.algolia.search.model.APIKey
13+
import com.algolia.search.model.ApplicationID
14+
import com.algolia.search.transport.internal.Transport
15+
import io.ktor.client.features.logging.LogLevel
16+
17+
public interface ClientRecommend : Configuration, EndpointRecommend, Credentials {
18+
19+
public companion object
20+
}
21+
22+
public fun ClientRecommend(
23+
applicationID: ApplicationID,
24+
apiKey: APIKey,
25+
logLevel: LogLevel = DEFAULT_LOG_LEVEL,
26+
): ClientRecommend = ClientRecommendImpl(
27+
Transport(
28+
ConfigurationRecommend(applicationID = applicationID, apiKey = apiKey, logLevel = logLevel),
29+
Credentials(applicationID = applicationID, apiKey = apiKey)
30+
)
31+
)
32+
33+
public fun ClientRecommend(configuration: ConfigurationRecommend): ClientRecommend = ClientRecommendImpl(
34+
Transport(configuration, configuration)
35+
)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.algolia.search.client.internal
2+
3+
import com.algolia.search.client.ClientRecommend
4+
import com.algolia.search.configuration.Configuration
5+
import com.algolia.search.configuration.Credentials
6+
import com.algolia.search.endpoint.EndpointRecommend
7+
import com.algolia.search.endpoint.internal.EndpointRecommend
8+
import com.algolia.search.transport.internal.Transport
9+
10+
internal class ClientRecommendImpl(
11+
internal val transport: Transport
12+
) : ClientRecommend,
13+
EndpointRecommend by EndpointRecommend(transport),
14+
Configuration by transport,
15+
Credentials by transport.credentials
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.algolia.search.configuration
2+
3+
import com.algolia.search.configuration.internal.ConfigurationRecommendImpl
4+
import com.algolia.search.configuration.internal.DEFAULT_LOG_LEVEL
5+
import com.algolia.search.configuration.internal.DEFAULT_READ_TIMEOUT
6+
import com.algolia.search.configuration.internal.DEFAULT_WRITE_TIMEOUT
7+
import com.algolia.search.model.APIKey
8+
import com.algolia.search.model.ApplicationID
9+
import com.algolia.search.transport.internal.searchHosts
10+
import io.ktor.client.HttpClientConfig
11+
import io.ktor.client.engine.HttpClientEngine
12+
import io.ktor.client.features.logging.LogLevel
13+
14+
/**
15+
* Configuration used by [ConfigurationRecommend].
16+
*/
17+
public interface ConfigurationRecommend : Configuration, Credentials
18+
19+
/**
20+
* Create a [ConfigurationRecommend] instance.
21+
*
22+
* @param applicationID application ID
23+
* @param apiKey API key
24+
* @param writeTimeout write timout
25+
* @param readTimeout read timeout
26+
* @param logLevel logging level
27+
* @param hosts personalization region hosts
28+
* @param defaultHeaders default headers
29+
* @param engine http client engine
30+
* @param httpClientConfig http client configuration
31+
* @param compression request payload compression
32+
*/
33+
public fun ConfigurationRecommend(
34+
applicationID: ApplicationID,
35+
apiKey: APIKey,
36+
writeTimeout: Long = DEFAULT_WRITE_TIMEOUT,
37+
readTimeout: Long = DEFAULT_READ_TIMEOUT,
38+
logLevel: LogLevel = DEFAULT_LOG_LEVEL,
39+
hosts: List<RetryableHost> = applicationID.searchHosts,
40+
defaultHeaders: Map<String, String>? = null,
41+
engine: HttpClientEngine? = null,
42+
httpClientConfig: (HttpClientConfig<*>.() -> Unit)? = null,
43+
compression: Compression = Compression.None,
44+
): ConfigurationRecommend = ConfigurationRecommendImpl(
45+
applicationID = applicationID,
46+
apiKey = apiKey,
47+
writeTimeout = writeTimeout,
48+
readTimeout = readTimeout,
49+
logLevel = logLevel,
50+
hosts = hosts,
51+
defaultHeaders = defaultHeaders,
52+
engine = engine,
53+
httpClientConfig = httpClientConfig,
54+
compression = compression
55+
)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.algolia.search.configuration.internal
2+
3+
import com.algolia.search.client.ClientRecommend
4+
import com.algolia.search.configuration.Compression
5+
import com.algolia.search.configuration.ConfigurationRecommend
6+
import com.algolia.search.configuration.RetryableHost
7+
import com.algolia.search.configuration.internal.extension.getHttpClient
8+
import com.algolia.search.model.APIKey
9+
import com.algolia.search.model.ApplicationID
10+
import io.ktor.client.HttpClient
11+
import io.ktor.client.HttpClientConfig
12+
import io.ktor.client.engine.HttpClientEngine
13+
import io.ktor.client.features.logging.LogLevel
14+
15+
/**
16+
* Configuration used by [ClientRecommend].
17+
*/
18+
internal class ConfigurationRecommendImpl(
19+
override val applicationID: ApplicationID,
20+
override val apiKey: APIKey,
21+
override val writeTimeout: Long,
22+
override val readTimeout: Long,
23+
override val logLevel: LogLevel,
24+
override val hosts: List<RetryableHost>,
25+
override val defaultHeaders: Map<String, String>?,
26+
override val engine: HttpClientEngine?,
27+
override val httpClientConfig: (HttpClientConfig<*>.() -> Unit)?,
28+
override val compression: Compression,
29+
) : ConfigurationRecommend {
30+
31+
override val httpClient: HttpClient = getHttpClient()
32+
}

client/src/commonMain/kotlin/com/algolia/search/configuration/internal/extension/HttpClient.kt

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import io.ktor.client.features.UserAgent
1212
import io.ktor.client.features.defaultRequest
1313
import io.ktor.client.features.json.JsonFeature
1414
import io.ktor.client.features.json.serializer.KotlinxSerializer
15+
import io.ktor.client.features.logging.LogLevel
1516
import io.ktor.client.features.logging.Logger
1617
import io.ktor.client.features.logging.Logging
1718
import io.ktor.client.features.logging.SIMPLE
@@ -29,10 +30,7 @@ internal fun HttpClientConfig<*>.configure(configuration: Configuration) {
2930
install(JsonFeature) {
3031
serializer = KotlinxSerializer(JsonNonStrict)
3132
}
32-
install(Logging) {
33-
level = configuration.logLevel
34-
logger = Logger.SIMPLE
35-
}
33+
installLogging(configuration.logLevel)
3634
install(UserAgent) {
3735
agent = clientUserAgent(AlgoliaSearchClient.version)
3836
}
@@ -47,6 +45,17 @@ internal fun HttpClientConfig<*>.configure(configuration: Configuration) {
4745
}
4846
}
4947

48+
/**
49+
* Installs [Logging] if logging level is superior to [LogLevel.NONE].
50+
*/
51+
private fun HttpClientConfig<*>.installLogging(logLevel: LogLevel) {
52+
if (LogLevel.NONE == logLevel) return
53+
install(Logging) {
54+
level = logLevel
55+
logger = Logger.SIMPLE
56+
}
57+
}
58+
5059
internal fun HttpMethod.canCompress(): Boolean {
5160
return this == HttpMethod.Post || this == HttpMethod.Put
5261
}

0 commit comments

Comments
 (0)