Skip to content

Commit bf0ccb5

Browse files
committed
extract Translator
1 parent 9c07311 commit bf0ccb5

File tree

4 files changed

+24
-6
lines changed

4 files changed

+24
-6
lines changed

src/com/j0rsa/labot/client/Skyeng.kt

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.j0rsa.labot.client
22

33
import com.j0rsa.labot.client.support.Google
4+
import com.j0rsa.labot.client.support.Translator
45
import com.j0rsa.labot.ktor.SetCookie
56
import com.j0rsa.labot.loggerFor
67
import io.ktor.client.HttpClient
@@ -266,7 +267,11 @@ class Skyeng(
266267
)
267268
}
268269

269-
suspend fun toAnkiClozeNote(deckName: String, voice: Voice = Voice.Male2) = examples.map {
270+
suspend fun toAnkiClozeNote(
271+
deckName: String,
272+
voice: Voice = Voice.Male2,
273+
translator: Translator = Google
274+
) = examples.map {
270275
val cWrappedExample = (it.text ?: return@map null).replace("[", "{{c1::").replace("]", "}}")
271276
val clearExample = it.text.replace("[", "").replace("]", "")
272277
val wordSoundAttachment = customSoundAttachment(voice) ?: return@map null
@@ -276,7 +281,7 @@ class Skyeng(
276281
|$cWrappedExample<br/>
277282
|- <b>${translation.text}</b><br/>
278283
|{{c1::[sound:${wordSoundAttachment.filename}]}}<br/>
279-
|${Google.translateEnToRu(clearExample)}<br/>
284+
|${translator.translateEnToRu(clearExample)}<br/>
280285
|{{c1::[sound:${sentenceSoundAttachment.filename}]}}<br/>
281286
|{{c1::<img src='${pictureAttachment.filename}'/>}}
282287
""".trimMargin()

src/com/j0rsa/labot/client/support/Google.kt

+6-2
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@ import io.ktor.client.request.get
66
import io.ktor.client.request.parameter
77
import io.ktor.client.statement.bodyAsText
88

9-
object Google {
9+
interface Translator {
10+
suspend fun translateEnToRu(text: String): String
11+
}
12+
13+
object Google : Translator {
1014
private val client = HttpClient(CIO)
1115

12-
suspend fun translateEnToRu(text: String) =
16+
override suspend fun translateEnToRu(text: String) =
1317
client.get("https://translate.googleapis.com/translate_a/single") {
1418
parameter("client", "gtx")
1519
parameter("sl", "en")

test/com/j0rsa/labot/client/GoogleTest.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@ package com.j0rsa.labot.client
22

33
import com.j0rsa.labot.client.support.Google
44
import io.kotest.core.spec.style.StringSpec
5+
import io.kotest.matchers.collections.shouldBeOneOf
56
import io.kotest.matchers.shouldBe
67

78
class GoogleTest : StringSpec({
89

910
"translate" {
10-
Google.translateEnToRu("Some example") shouldBe "Какой-то пример"
11+
Google.translateEnToRu("Some example") shouldBeOneOf listOf(
12+
"Какой-то пример",
13+
"Некоторый пример",
14+
)
1115
}
1216
})

test/com/j0rsa/labot/client/SkyengTest.kt

+6-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.j0rsa.labot.client
22

33
import com.j0rsa.labot.AppConfig
44
import com.j0rsa.labot.client.Skyeng.Companion.Voice
5+
import com.j0rsa.labot.client.support.Translator
56
import io.kotest.core.spec.style.StringSpec
67
import io.kotest.matchers.ints.shouldBeGreaterThanOrEqual
78
import io.kotest.matchers.shouldBe
@@ -106,6 +107,10 @@ class SkyengTest : StringSpec({
106107
}
107108

108109
"to anki cloze note" {
110+
val translator = object :Translator{
111+
override suspend fun translateEnToRu(text: String): String =
112+
"Его успех вызвал зависть у некоторых его старых друзей."
113+
}
109114
val notes = Skyeng.Companion.Meaning(
110115
alternatives = listOf(),
111116
definition = Skyeng.Companion.MeaningDefinition(
@@ -136,7 +141,7 @@ class SkyengTest : StringSpec({
136141
text = "jealous",
137142
transcription = "ˈʤɛləs",
138143
translation = Skyeng.Companion.Translation(text = "завистливый")
139-
).toAnkiClozeNote("test").filterNotNull()
144+
).toAnkiClozeNote("test", translator = translator).filterNotNull()
140145
notes.size shouldBe 2
141146
val first = notes.first()
142147
first.fields.text shouldBe """

0 commit comments

Comments
 (0)