-
Notifications
You must be signed in to change notification settings - Fork 149
/
triviaJs.kt
80 lines (74 loc) · 2.56 KB
/
triviaJs.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
* Copyright (C) 2022 Block, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package app.cash.zipline.samples.trivia
class RealTriviaService : TriviaService {
private val gameWithAnswersList = listOf(
GameWithAnswers(
id = 0,
name = "IDEs of March",
questionList = listOf(
object : QuestionAndAnswer {
override val question = "This Java IDE was IBM's attempt at blocking out the SUN"
override fun result(answer: String) = when {
answer.trim().equals("Eclipse", ignoreCase = true) -> AnswerResult(
correct = true,
message = "Yep! Next they'll need to block out an Oracle.",
)
else -> AnswerResult(
correct = false,
message = "Nope! The stars aren't in alignment for you.",
)
}
},
object : QuestionAndAnswer {
override val question =
"IntelliJ ships with a mode to emulate this editor in case you can't quit it"
override fun result(answer: String) = when {
answer.matches(Regex("vim?", option = RegexOption.IGNORE_CASE)) -> AnswerResult(
correct = true,
message = "You got it! :wq while you're ahead!",
)
else -> AnswerResult(
correct = false,
message = "Not that! Are you taking your VItamins?",
)
}
},
),
),
)
override fun games() = gameWithAnswersList.map { it.game }
override fun answer(gameId: Int, questionId: Int, answer: String) =
gameWithAnswersList[gameId].questionList[questionId].result(answer)
}
interface QuestionAndAnswer {
val question: String
fun result(answer: String): AnswerResult
}
class GameWithAnswers(
private val id: Int,
private val name: String,
val questionList: List<QuestionAndAnswer>,
) {
val game: TriviaGame
get() = TriviaGame(
id = id,
name = name,
questions = questionList.withIndex().map { (index, value) ->
Question(index, value.question)
},
)
}