Skip to content

Commit 78f9e6d

Browse files
authored
Merge pull request #84 from stocky37/api-resources
2 parents 42a67f2 + 6c7e5f8 commit 78f9e6d

File tree

3 files changed

+29
-21
lines changed

3 files changed

+29
-21
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ plugins {
1010
}
1111

1212
group = "me.sargunvohra.lib"
13-
version = "2.3.1"
13+
version = "2.4.0-SNAPSHOT"
1414

1515
repositories {
1616
jcenter()

src/main/kotlin/me/sargunvohra/lib/pokekotlin/model/resource.kt

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,40 @@
11
package me.sargunvohra.lib.pokekotlin.model
22

3+
private fun urlToId(url: String): Int {
4+
return "/-?[0-9]+/$".toRegex().find(url)!!.value.filter { it.isDigit() || it == '-' }.toInt()
5+
}
6+
7+
private fun urlToCat(url: String): String {
8+
return "/[a-z\\-]+/-?[0-9]+/$".toRegex().find(url)!!.value.filter { it.isLetter() || it == '-' }
9+
}
10+
11+
private fun resourceUrl(id: Int, category: String): String {
12+
return "/api/v2/$category/$id/"
13+
}
14+
315
interface ResourceSummary {
416
val id: Int
517
val category: String
618
}
719

820
data class ApiResource(
9-
override val category: String,
10-
override val id: Int
11-
) : ResourceSummary
21+
val url: String
22+
) : ResourceSummary {
23+
constructor(category: String, id: Int) : this(resourceUrl(id, category))
24+
25+
override val category by lazy { urlToCat(url) }
26+
override val id by lazy { urlToId(url) }
27+
}
1228

1329
data class NamedApiResource(
1430
val name: String,
15-
override val category: String,
16-
override val id: Int
17-
) : ResourceSummary
31+
val url: String
32+
) : ResourceSummary {
33+
constructor(name: String, category: String, id: Int) : this(name, resourceUrl(id, category))
34+
35+
override val category by lazy { urlToCat(url) }
36+
override val id by lazy { urlToId(url) }
37+
}
1838

1939
interface ResourceSummaryList<out T : ResourceSummary> {
2040
val count: Int

src/main/kotlin/me/sargunvohra/lib/pokekotlin/util/adapters.kt

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,6 @@ import java.lang.reflect.Type
88
import me.sargunvohra.lib.pokekotlin.model.ApiResource
99
import me.sargunvohra.lib.pokekotlin.model.NamedApiResource
1010

11-
private fun urlToId(url: String): Int {
12-
return "/-?[0-9]+/$".toRegex().find(url)!!.value.filter { it.isDigit() || it == '-' }.toInt()
13-
}
14-
15-
private fun urlToCat(url: String): String {
16-
return "/[a-z\\-]+/-?[0-9]+/$".toRegex().find(url)!!.value.filter { it.isLetter() || it == '-' }
17-
}
18-
1911
internal class ApiResourceAdapter : JsonDeserializer<ApiResource> {
2012

2113
data class Json(val url: String)
@@ -26,7 +18,7 @@ internal class ApiResourceAdapter : JsonDeserializer<ApiResource> {
2618
context: JsonDeserializationContext
2719
): ApiResource {
2820
val temp = context.deserialize<Json>(element, TypeToken.get(Json::class.java).type)
29-
return ApiResource(category = urlToCat(temp.url), id = urlToId(temp.url))
21+
return ApiResource(temp.url)
3022
}
3123
}
3224

@@ -40,10 +32,6 @@ internal class NamedApiResourceAdapter : JsonDeserializer<NamedApiResource> {
4032
context: JsonDeserializationContext
4133
): NamedApiResource {
4234
val temp = context.deserialize<Json>(element, TypeToken.get(Json::class.java).type)
43-
return NamedApiResource(
44-
name = temp.name,
45-
category = urlToCat(temp.url),
46-
id = urlToId(temp.url)
47-
)
35+
return NamedApiResource(temp.name, temp.url)
4836
}
4937
}

0 commit comments

Comments
 (0)