Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b7d3a61

Browse files
committed
feat: add here provider API
BREAKING CHANGE: scala distance version has been updated to 7.2.0. TravelMode and package names are different
1 parent 658c432 commit b7d3a61

File tree

5 files changed

+93
-17
lines changed

5 files changed

+93
-17
lines changed

build.sbt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ ThisBuild / pushRemoteCacheTo := Some(
1212
lazy val root = Project(id = "JRubyScalaDistances", base = file("."))
1313
.settings(libraryDependencies ++= scalaDistancesLibraries)
1414

15-
16-
lazy val scalaDistancesVersion = "6.1.0"
15+
lazy val scalaDistancesVersion = "7.2.0"
1716

1817
lazy val scalaDistancesLibraries = Seq(
1918
"com.colisweb" %% "scala-distances-core" % scalaDistancesVersion,
2019
"com.colisweb" %% "scala-distances-provider-google" % scalaDistancesVersion,
20+
"com.colisweb" %% "scala-distances-provider-here" % scalaDistancesVersion,
2121
"com.colisweb" %% "scala-distances-cache-redis" % scalaDistancesVersion
2222
)

src/main/scala/com/colisweb/jrubyscaladistances/GoogleApiConfiguration.scala renamed to src/main/scala/com/colisweb/jrubyscaladistances/google/GoogleApiConfiguration.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.colisweb.jrubyscaladistances
1+
package com.colisweb.jrubyscaladistances.google
22

33
import scala.concurrent.duration.Duration
44

src/main/scala/com/colisweb/jrubyscaladistances/JRubyScalaDistance.scala renamed to src/main/scala/com/colisweb/jrubyscaladistances/google/JRubyGoogleScalaDistance.scala

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.colisweb.jrubyscaladistances
1+
package com.colisweb.jrubyscaladistances.google
22

33
import com.colisweb.distances.caches.{RedisCache, RedisConfiguration}
44
import com.colisweb.distances.model.path.DirectedPathWithModeAt
@@ -10,24 +10,24 @@ import com.colisweb.distances.providers.google.{
1010
GoogleGeoApiContext
1111
}
1212
import com.colisweb.distances.{DistanceApi, Distances}
13+
import com.colisweb.jrubyscaladistances.JRubyRedisConfiguration
1314
import com.google.maps.OkHttpRequestHandler
15+
import eu.timepit.refined.types.string.NonEmptyString
1416
import io.circe.Codec
1517
import io.circe.generic.extras.semiauto.deriveConfiguredCodec
16-
import org.slf4j.LoggerFactory
18+
import org.slf4j.{Logger, LoggerFactory}
1719
import scalacache.Flags
18-
import io.circe.generic.extras.defaults._
19-
import io.circe.generic.extras.semiauto._
2020

2121
import scala.concurrent.duration.FiniteDuration
2222
import scala.util.Try
2323

24-
final class JRubyScalaDistance(googleApiConfig: GoogleApiConfiguration, redisConfig: JRubyRedisConfiguration) {
24+
final class JRubyGoogleScalaDistance(googleApiConfig: GoogleApiConfiguration, redisConfig: JRubyRedisConfiguration) {
2525

26-
val logger = LoggerFactory.getLogger(classOf[OkHttpRequestHandler])
27-
val loggingF = (message: String) => logger.debug(message.replaceAll("key=([^&]*)&", "key=REDACTED&"))
26+
val logger: Logger = LoggerFactory.getLogger(classOf[OkHttpRequestHandler])
27+
val loggingF: String => Unit = (message: String) => logger.debug(message.replaceAll("key=([^&]*)&", "key=REDACTED&"))
2828

29-
val googleGeoApiContext = GoogleGeoApiContext(
30-
googleApiConfig.apiKey,
29+
val googleGeoApiContext: GoogleGeoApiContext = GoogleGeoApiContext(
30+
NonEmptyString.unsafeFrom(googleApiConfig.apiKey),
3131
googleApiConfig.connectTimeout,
3232
googleApiConfig.readTimeout,
3333
googleApiConfig.queryRateLimit,
@@ -38,6 +38,8 @@ final class JRubyScalaDistance(googleApiConfig: GoogleApiConfiguration, redisCon
3838

3939
import scalacache.modes.try_._
4040
import scalacache.serialization.circe._
41+
import io.circe.generic.extras.defaults._
42+
import io.circe.generic.extras.semiauto._
4143

4244
implicit val distanceAndDurationCodec: Codec[DistanceAndDuration] = deriveConfiguredCodec
4345

@@ -62,18 +64,18 @@ final class JRubyScalaDistance(googleApiConfig: GoogleApiConfiguration, redisCon
6264
.api
6365
}
6466

67+
def getShortestDrivingDistance(
68+
origin: Point,
69+
destination: Point
70+
): Try[DistanceAndDuration] = getShortestDistance(origin, destination, TravelMode.Car())
71+
6572
def getShortestDistance(
6673
origin: Point,
6774
destination: Point,
6875
travelMode: TravelMode
6976
): Try[DistanceAndDuration] =
7077
distanceApi.distance(DirectedPathWithModeAt(origin, destination, travelMode, None))
7178

72-
def getShortestDrivingDistance(
73-
origin: Point,
74-
destination: Point
75-
): Try[DistanceAndDuration] = getShortestDistance(origin, destination, TravelMode.Driving)
76-
7779
def shutdown(): Unit = googleGeoApiContext.geoApiContext.shutdown()
7880

7981
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.colisweb.jrubyscaladistances.here
2+
3+
import scala.concurrent.duration.Duration
4+
5+
final case class HereApiConfiguration(
6+
apiKey: String,
7+
connectTimeout: Duration,
8+
readTimeout: Duration
9+
)
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.colisweb.jrubyscaladistances.here
2+
3+
import com.colisweb.distances.caches.{RedisCache, RedisConfiguration}
4+
import com.colisweb.distances.model.path.DirectedPathWithModeAt
5+
import com.colisweb.distances.model.{DistanceAndDuration, Point, TravelMode}
6+
import com.colisweb.distances.providers.here.{HereRoutingApi, HereRoutingContext, RoutingMode}
7+
import com.colisweb.distances.{DistanceApi, Distances}
8+
import com.colisweb.jrubyscaladistances.JRubyRedisConfiguration
9+
import eu.timepit.refined.types.string.NonEmptyString
10+
import io.circe.Codec
11+
import io.circe.generic.extras.semiauto.deriveConfiguredCodec
12+
import scalacache.Flags
13+
14+
import scala.concurrent.duration.FiniteDuration
15+
import scala.util.Try
16+
17+
final class JRubyHereScalaDistance(hereApiConfig: HereApiConfiguration, redisConfig: JRubyRedisConfiguration) {
18+
19+
val hereContext: HereRoutingContext = HereRoutingContext(
20+
NonEmptyString.unsafeFrom(hereApiConfig.apiKey),
21+
hereApiConfig.connectTimeout,
22+
hereApiConfig.readTimeout
23+
)
24+
25+
val distanceApi: DistanceApi[Try, DirectedPathWithModeAt] = {
26+
27+
import scalacache.modes.try_._
28+
import scalacache.serialization.circe._
29+
import io.circe.generic.extras.defaults._
30+
import io.circe.generic.extras.semiauto._
31+
32+
implicit val distanceAndDurationCodec: Codec[DistanceAndDuration] = deriveConfiguredCodec
33+
34+
val redisTtl = redisConfig.expirationTimeout match {
35+
case duration: FiniteDuration => Some(duration)
36+
case _ => None
37+
}
38+
39+
Distances
40+
.from[Try, DirectedPathWithModeAt](
41+
HereRoutingApi.sync(hereContext)(RoutingMode.MinimalDistanceMode)
42+
)
43+
.caching(
44+
RedisCache(
45+
RedisConfiguration(redisConfig.host, redisConfig.port),
46+
Flags.defaultFlags,
47+
redisTtl
48+
)
49+
)
50+
.api
51+
}
52+
53+
def getShortestDrivingDistance(
54+
origin: Point,
55+
destination: Point
56+
): Try[DistanceAndDuration] = getShortestDistance(origin, destination, TravelMode.Car())
57+
58+
def getShortestDistance(
59+
origin: Point,
60+
destination: Point,
61+
travelMode: TravelMode
62+
): Try[DistanceAndDuration] =
63+
distanceApi.distance(DirectedPathWithModeAt(origin, destination, travelMode, None))
64+
65+
}

0 commit comments

Comments
 (0)