Skip to content

Commit

Permalink
Merge pull request #1311 from Netflix/feature/bigdecimal-enable-flag
Browse files Browse the repository at this point in the history
Have the ability to turn off the BigDecimal and BigInteger extended scalars
  • Loading branch information
srinivasankavitha committed Nov 8, 2022
2 parents 7818497 + 0be45a1 commit 6aff9aa
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 4 deletions.
Expand Up @@ -21,10 +21,13 @@ import com.netflix.graphql.dgs.DgsRuntimeWiring
import graphql.scalars.ExtendedScalars
import graphql.schema.GraphQLScalarType
import graphql.schema.idl.RuntimeWiring
import org.springframework.boot.autoconfigure.condition.AllNestedConditions
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Conditional
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.ConfigurationCondition

@ConditionalOnClass(graphql.scalars.ExtendedScalars::class)
@ConditionalOnProperty(
Expand Down Expand Up @@ -108,13 +111,78 @@ open class DgsExtendedScalarsAutoConfiguration {
// Others
ExtendedScalars.GraphQLLong,
ExtendedScalars.GraphQLShort,
ExtendedScalars.GraphQLByte,
ExtendedScalars.GraphQLBigDecimal,
ExtendedScalars.GraphQLBigInteger
ExtendedScalars.GraphQLByte
)
}
}
}

@Conditional(OnBigDecimalAndNumbers::class)
@Configuration(proxyBeanMethods = false)
open class BigDecimalAutoConfiguration {
@Bean
open fun bigDecimalExtendedScalarsRegistrar(): ExtendedScalarRegistrar {
return object : AbstractExtendedScalarRegistrar() {
override fun getScalars(): List<GraphQLScalarType> {
return listOf(
// Others
ExtendedScalars.GraphQLBigDecimal
)
}
}
}
}

open class OnBigDecimalAndNumbers :
AllNestedConditions(ConfigurationCondition.ConfigurationPhase.PARSE_CONFIGURATION) {
@ConditionalOnProperty(
prefix = "dgs.graphql.extensions.scalars.numbers.",
name = ["enabled"],
havingValue = "true",
matchIfMissing = true
)
open class OnNumbers

@ConditionalOnProperty(
prefix = "dgs.graphql.extensions.scalars.numbers.bigdecimal",
name = ["enabled"],
havingValue = "true",
matchIfMissing = true
)
open class OnBigDecimal
}

@Conditional(OnBigIntegerAndNumbers::class)
@Configuration(proxyBeanMethods = false)
open class BigIntegerAutoConfiguration {
@Bean
open fun bigIntegerExtendedScalarsRegistrar(): ExtendedScalarRegistrar {
return object : AbstractExtendedScalarRegistrar() {
override fun getScalars(): List<GraphQLScalarType> {
return listOf(ExtendedScalars.GraphQLBigInteger)
}
}
}
}

open class OnBigIntegerAndNumbers :
AllNestedConditions(ConfigurationCondition.ConfigurationPhase.PARSE_CONFIGURATION) {
@ConditionalOnProperty(
prefix = "dgs.graphql.extensions.scalars.numbers.",
name = ["enabled"],
havingValue = "true",
matchIfMissing = true
)
open class OnNumbers

@ConditionalOnProperty(
prefix = "dgs.graphql.extensions.scalars.numbers.biginteger",
name = ["enabled"],
havingValue = "true",
matchIfMissing = true
)
open class OnBigInteger
}
}

@ConditionalOnProperty(
Expand Down
Expand Up @@ -19,7 +19,17 @@
{
"name": "dgs.graphql.extensions.scalars.numbers.enabled",
"type": "java.lang.Boolean",
"description": "Enabled by default, if dgs.graphql.extensions.scalars.enabled is enabled, will register all numeric scalar extensions such as PositiveInt, NegativeInt, etc."
"description": "Enabled by default, will register all numeric scalar extensions such as PositiveInt, NegativeInt, etc."
},
{
"name": "dgs.graphql.extensions.scalars.numbers.bigdecimal.enabled",
"type": "java.lang.Boolean",
"description": "Enabled by default, can be used to disable the BigDecimal scalar; it requires dgs.graphql.extensions.scalars.numbers.enabled to be enabled as well."
},
{
"name": "dgs.graphql.extensions.scalars.numbers.biginteger.enabled",
"type": "java.lang.Boolean",
"description": "Enabled by default, can be used to disable the BigInteger scalar; it requires dgs.graphql.extensions.scalars.numbers.enabled to be enabled as well."
},
{
"name": "dgs.graphql.extensions.scalars.chars.enabled",
Expand Down
Expand Up @@ -35,6 +35,8 @@ internal class DgsExtendedScalarsAutoConfigurationTests {
.hasSingleBean(DgsExtendedScalarsAutoConfiguration::class.java)
.hasSingleBean(DgsExtendedScalarsAutoConfiguration.CharsExtendedScalarsAutoConfiguration::class.java)
.hasSingleBean(DgsExtendedScalarsAutoConfiguration.NumbersExtendedScalarsAutoConfiguration::class.java)
.hasSingleBean(DgsExtendedScalarsAutoConfiguration.NumbersExtendedScalarsAutoConfiguration.BigDecimalAutoConfiguration::class.java)
.hasSingleBean(DgsExtendedScalarsAutoConfiguration.NumbersExtendedScalarsAutoConfiguration.BigIntegerAutoConfiguration::class.java)
.hasSingleBean(DgsExtendedScalarsAutoConfiguration.ObjectsExtendedScalarsAutoConfiguration::class.java)
.hasSingleBean(DgsExtendedScalarsAutoConfiguration.TimeExtendedScalarsAutoConfiguration::class.java)
.hasSingleBean(DgsExtendedScalarsAutoConfiguration.IDsExtendedScalarsAutoConfiguration::class.java)
Expand Down Expand Up @@ -84,6 +86,36 @@ internal class DgsExtendedScalarsAutoConfigurationTests {
.hasSingleBean(DgsExtendedScalarsAutoConfiguration::class.java)
assertThat(context)
.doesNotHaveBean(DgsExtendedScalarsAutoConfiguration.NumbersExtendedScalarsAutoConfiguration::class.java)
.doesNotHaveBean(DgsExtendedScalarsAutoConfiguration.NumbersExtendedScalarsAutoConfiguration.BigDecimalAutoConfiguration::class.java)
.doesNotHaveBean(DgsExtendedScalarsAutoConfiguration.NumbersExtendedScalarsAutoConfiguration.BigIntegerAutoConfiguration::class.java)
}
}

@Test
fun `The BigDecimal scalar can be disabled`() {
context.withPropertyValues(
"dgs.graphql.extensions.scalars.numbers.bigdecimal.enabled=false"
).run { context ->
assertThat(context)
.hasSingleBean(DgsExtendedScalarsAutoConfiguration::class.java)
.hasSingleBean(DgsExtendedScalarsAutoConfiguration.NumbersExtendedScalarsAutoConfiguration::class.java)
.hasSingleBean(DgsExtendedScalarsAutoConfiguration.NumbersExtendedScalarsAutoConfiguration.BigIntegerAutoConfiguration::class.java)
assertThat(context)
.doesNotHaveBean(DgsExtendedScalarsAutoConfiguration.NumbersExtendedScalarsAutoConfiguration.BigDecimalAutoConfiguration::class.java)
}
}

@Test
fun `The BigInteger scalar can be disabled`() {
context.withPropertyValues(
"dgs.graphql.extensions.scalars.numbers.biginteger.enabled=false"
).run { context ->
assertThat(context)
.hasSingleBean(DgsExtendedScalarsAutoConfiguration::class.java)
.hasSingleBean(DgsExtendedScalarsAutoConfiguration.NumbersExtendedScalarsAutoConfiguration::class.java)
.hasSingleBean(DgsExtendedScalarsAutoConfiguration.NumbersExtendedScalarsAutoConfiguration.BigDecimalAutoConfiguration::class.java)
assertThat(context)
.doesNotHaveBean(DgsExtendedScalarsAutoConfiguration.NumbersExtendedScalarsAutoConfiguration.BigIntegerAutoConfiguration::class.java)
}
}

Expand Down

0 comments on commit 6aff9aa

Please sign in to comment.