Skip to content

Commit bdfc533

Browse files
committed
add escaping to the DSL
1 parent 7451f85 commit bdfc533

File tree

2 files changed

+73
-8
lines changed

2 files changed

+73
-8
lines changed

src/commonMain/kotlin/com/algolia/search/dsl/DSLQuery.kt

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,29 +49,41 @@ public fun Query.filters(block: DSLFilters.() -> Unit) {
4949
/**
5050
* Use [FilterGroupsConverter.Legacy] on the [block] output and assign it to [Query.optionalFilters].
5151
*/
52-
public fun Query.optionalFilters(block: DSLFacetFilters.() -> Unit) {
53-
optionalFilters = FilterGroupsConverter.Legacy.Facet(DSLFacetFilters(block))
52+
public fun Query.optionalFilters(escape: Boolean = true, block: DSLFacetFilters.() -> Unit) {
53+
optionalFilters = when(escape) {
54+
true -> FilterGroupsConverter.Legacy.Facet(DSLFacetFilters(block))
55+
false -> FilterGroupsConverter.Legacy.Facet.Unquoted(DSLFacetFilters(block))
56+
}
5457
}
5558

5659
/**
5760
* Use [FilterGroupsConverter.Legacy] on the [block] output and assign it to [Query.facetFilters].
5861
*/
59-
public fun Query.facetFilters(block: DSLFacetFilters.() -> Unit) {
60-
facetFilters = FilterGroupsConverter.Legacy.Facet(DSLFacetFilters(block))
62+
public fun Query.facetFilters(escape: Boolean = true, block: DSLFacetFilters.() -> Unit) {
63+
facetFilters = when(escape) {
64+
true -> FilterGroupsConverter.Legacy.Facet(DSLFacetFilters(block))
65+
false -> FilterGroupsConverter.Legacy.Facet.Unquoted(DSLFacetFilters(block))
66+
}
6167
}
6268

6369
/**
6470
* Use [FilterGroupsConverter.Legacy] on the [block] output and assign it to [Query.numericFilters].
6571
*/
66-
public fun Query.numericFilters(block: DSLNumericFilters.() -> Unit) {
67-
numericFilters = FilterGroupsConverter.Legacy.Numeric(DSLNumericFilters(block))
72+
public fun Query.numericFilters(escape: Boolean = true, block: DSLNumericFilters.() -> Unit) {
73+
numericFilters = when(escape) {
74+
true -> FilterGroupsConverter.Legacy.Numeric(DSLNumericFilters(block))
75+
false -> FilterGroupsConverter.Legacy.Numeric.Unquoted(DSLNumericFilters(block))
76+
}
6877
}
6978

7079
/**
7180
* Use [FilterGroupsConverter.Legacy] on the [block] output and assign it to [Query.tagFilters].
7281
*/
73-
public fun Query.tagFilters(block: DSLTagFilters.() -> Unit) {
74-
tagFilters = FilterGroupsConverter.Legacy.Tag(DSLTagFilters(block))
82+
public fun Query.tagFilters(escape: Boolean = true, block: DSLTagFilters.() -> Unit) {
83+
tagFilters = when (escape) {
84+
true -> FilterGroupsConverter.Legacy.Tag(DSLTagFilters(block))
85+
false -> FilterGroupsConverter.Legacy.Tag.Unquoted(DSLTagFilters(block))
86+
}
7587
}
7688

7789
/**

src/commonTest/kotlin/dsl/TestDSLQuery.kt

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import com.algolia.search.model.search.Polygon
3030
import shouldNotBeNull
3131
import unknown
3232
import kotlin.test.Test
33+
import kotlin.test.assertEquals
3334

3435
internal class TestDSLQuery {
3536

@@ -71,6 +72,19 @@ internal class TestDSLQuery {
7172
}
7273

7374
query.facetFilters!!.isNotEmpty()
75+
assertEquals(listOf(listOf("\"attributeA\":0")), query.facetFilters)
76+
}
77+
78+
@Test
79+
fun facetFiltersUnquoted() {
80+
val query = query {
81+
facetFilters(escape = false) {
82+
and { facet(attributeA, 0) }
83+
}
84+
}
85+
86+
query.facetFilters!!.isNotEmpty()
87+
assertEquals(listOf(listOf("attributeA:0")), query.facetFilters)
7488
}
7589

7690
@Test
@@ -82,6 +96,19 @@ internal class TestDSLQuery {
8296
}
8397

8498
query.numericFilters!!.isNotEmpty()
99+
assertEquals(listOf(listOf("\"attributeA\" >= 0"), listOf("\"attributeA\" <= 1")), query.numericFilters)
100+
}
101+
102+
@Test
103+
fun numericFiltersUnquoted() {
104+
val query = query {
105+
numericFilters(escape = false) {
106+
and { range(attributeA, 0..1) }
107+
}
108+
}
109+
110+
query.numericFilters!!.isNotEmpty()
111+
assertEquals(listOf(listOf("attributeA >= 0"), listOf("attributeA <= 1")), query.numericFilters)
85112
}
86113

87114
@Test
@@ -93,6 +120,19 @@ internal class TestDSLQuery {
93120
}
94121

95122
query.tagFilters!!.isNotEmpty()
123+
assertEquals(listOf(listOf("_tags:\"unknown\"")), query.tagFilters)
124+
}
125+
126+
@Test
127+
fun tagFiltersUnquoted() {
128+
val query = query {
129+
tagFilters(escape = false) {
130+
and { tag(unknown) }
131+
}
132+
}
133+
134+
query.tagFilters!!.isNotEmpty()
135+
assertEquals(listOf(listOf("_tags:unknown")), query.tagFilters)
96136
}
97137

98138
@Test
@@ -104,6 +144,19 @@ internal class TestDSLQuery {
104144
}
105145

106146
query.optionalFilters!!.isNotEmpty()
147+
assertEquals(listOf(listOf("\"attributeA\":0")), query.optionalFilters)
148+
}
149+
150+
@Test
151+
fun optionalFiltersUnquoted() {
152+
val query = query {
153+
optionalFilters(escape = false) {
154+
and { facet(attributeA, 0) }
155+
}
156+
}
157+
158+
query.optionalFilters!!.isNotEmpty()
159+
assertEquals(listOf(listOf("attributeA:0")), query.optionalFilters)
107160
}
108161

109162
@Test

0 commit comments

Comments
 (0)