Skip to content

Commit 1130a0e

Browse files
committed
#383 Added a search in FieldResolverScanner for getters where the field name needs to be converted from snake to camel case.
1 parent c694d1a commit 1130a0e

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

src/main/kotlin/graphql/kickstart/tools/resolver/FieldResolverScanner.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ import graphql.language.FieldDefinition
1212
import graphql.language.TypeName
1313
import graphql.schema.DataFetchingEnvironment
1414
import org.apache.commons.lang3.ClassUtils
15+
import org.apache.commons.lang3.StringUtils
1516
import org.apache.commons.lang3.reflect.FieldUtils
17+
import org.apache.commons.lang3.text.WordUtils
1618
import org.slf4j.LoggerFactory
1719
import java.lang.reflect.Method
1820
import java.lang.reflect.Modifier
@@ -83,6 +85,7 @@ internal class FieldResolverScanner(val options: SchemaParserOptions) {
8385
// 2. Method that returns a boolean with "is" style getter
8486
// 3. Method with "get" style getter
8587
// 4. Method with "getField" style getter
88+
// 5. Method with "get" style getter with the field name converted from snake_case to camelCased. ex: key_ops -> getKeyOps()
8689
return methods.find {
8790
it.name == name && verifyMethodArguments(it, argumentCount, search)
8891
} ?: methods.find {
@@ -91,6 +94,8 @@ internal class FieldResolverScanner(val options: SchemaParserOptions) {
9194
it.name == "get${name.capitalize()}" && verifyMethodArguments(it, argumentCount, search)
9295
} ?: methods.find {
9396
it.name == "getField${name.capitalize()}" && verifyMethodArguments(it, argumentCount, search)
97+
} ?: methods.find {
98+
it.name == "get${StringUtils.remove(WordUtils.capitalizeFully(name, '_'), "_")}" && verifyMethodArguments(it, argumentCount, search)
9499
}
95100
}
96101

src/test/groovy/graphql/kickstart/tools/FieldResolverScannerSpec.groovy

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,18 @@ class FieldResolverScannerSpec extends Specification {
8787
((MethodFieldResolver) meta).getMethod().getReturnType() == BoatInformation.class
8888
}
8989

90+
def "scanner finds field resolver method using camelCase for snake_cased field_name"() {
91+
setup:
92+
def resolver = new RootResolverInfo([new CamelCaseQuery1()], options)
93+
94+
when:
95+
def meta = scanner.findFieldResolver(new FieldDefinition("hull_type", new TypeName("HullType")), resolver)
96+
97+
then:
98+
meta instanceof MethodFieldResolver
99+
((MethodFieldResolver) meta).getMethod().getReturnType() == HullType.class
100+
}
101+
90102
class RootQuery1 implements GraphQLQueryResolver {
91103
def field1() {}
92104
}
@@ -99,6 +111,12 @@ class FieldResolverScannerSpec extends Specification {
99111
def field1() {}
100112
}
101113

114+
class CamelCaseQuery1 implements GraphQLQueryResolver {
115+
HullType getHullType(){}
116+
}
117+
118+
class HullType {}
119+
102120
class ParentPropertyQuery {
103121
private Integer version = 1
104122
}

0 commit comments

Comments
 (0)