Skip to content

Commit b463cbc

Browse files
author
Salman Ahmad
committed
Refactored code as per PR feedback
1 parent bded7d4 commit b463cbc

File tree

10 files changed

+44
-64
lines changed

10 files changed

+44
-64
lines changed

config/config.go

Lines changed: 0 additions & 11 deletions
This file was deleted.

example/social/server/server.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import (
55
"net/http"
66

77
"github.com/graph-gophers/graphql-go"
8-
"github.com/graph-gophers/graphql-go/config"
98
"github.com/graph-gophers/graphql-go/example/social"
109
"github.com/graph-gophers/graphql-go/relay"
1110
)
1211

1312
var schema *graphql.Schema
1413

1514
func init() {
16-
schema = graphql.MustParseSchema(social.Schema, &social.Resolver{}, &config.Config{UseResolverMethods: false})
15+
opts := []graphql.SchemaOpt{graphql.UseFieldResolvers(), graphql.MaxParallelism(20)}
16+
schema = graphql.MustParseSchema(social.Schema, &social.Resolver{}, opts...)
1717
}
1818

1919
func main() {

example/social/social.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package social
22

33
import (
44
"context"
5-
"errors"
65
"fmt"
76
)
87

@@ -157,14 +156,14 @@ func (r *Resolver) Admin(ctx context.Context, args struct {
157156
return *usr, nil
158157
}
159158
}
160-
err := fmt.Sprintf("user with id=%s and role=%s does not exist", args.Id, args.Role)
161-
return user{}, errors.New(err)
159+
err := fmt.Errorf("user with id=%s and role=%s does not exist", args.Id, args.Role)
160+
return user{}, err
162161
}
163162

164163
func (r *Resolver) User(ctx context.Context, args struct{ Id string }) (user, error) {
165164
if usr, ok := usersMap[args.Id]; ok {
166165
return *usr, nil
167166
}
168-
err := fmt.Sprintf("user with id=%s does not exist", args.Id)
169-
return user{}, errors.New(err)
167+
err := fmt.Errorf("user with id=%s does not exist", args.Id)
168+
return user{}, err
170169
}

example/starwars/server/server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
var schema *graphql.Schema
1313

1414
func init() {
15-
schema = graphql.MustParseSchema(starwars.Schema, &starwars.Resolver{}, nil)
15+
schema = graphql.MustParseSchema(starwars.Schema, &starwars.Resolver{})
1616
}
1717

1818
func main() {

graphql.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"encoding/json"
66
"fmt"
77

8-
"github.com/graph-gophers/graphql-go/config"
98
"github.com/graph-gophers/graphql-go/errors"
109
"github.com/graph-gophers/graphql-go/internal/common"
1110
"github.com/graph-gophers/graphql-go/internal/exec"
@@ -22,16 +21,10 @@ import (
2221
// ParseSchema parses a GraphQL schema and attaches the given root resolver. It returns an error if
2322
// the Go type signature of the resolvers does not match the schema. If nil is passed as the
2423
// resolver, then the schema can not be executed, but it may be inspected (e.g. with ToJSON).
25-
func ParseSchema(schemaString string, resolver interface{}, conf *config.Config, opts ...SchemaOpt) (*Schema, error) {
26-
27-
// set default values in case config is null
28-
if conf == nil {
29-
conf = config.Default()
30-
}
24+
func ParseSchema(schemaString string, resolver interface{}, opts ...SchemaOpt) (*Schema, error) {
3125

3226
s := &Schema{
33-
schema: schema.New(conf),
34-
config: conf,
27+
schema: schema.New(),
3528
maxParallelism: 10,
3629
tracer: trace.OpenTracingTracer{},
3730
logger: &log.DefaultLogger{},
@@ -46,7 +39,7 @@ func ParseSchema(schemaString string, resolver interface{}, conf *config.Config,
4639
}
4740

4841
if resolver != nil {
49-
r, err := resolvable.ApplyResolver(s.schema, resolver)
42+
r, err := resolvable.ApplyResolver(s.schema, resolver, s.useFieldResolvers)
5043
if err != nil {
5144
return nil, err
5245
}
@@ -57,8 +50,8 @@ func ParseSchema(schemaString string, resolver interface{}, conf *config.Config,
5750
}
5851

5952
// MustParseSchema calls ParseSchema and panics on error.
60-
func MustParseSchema(schemaString string, resolver interface{}, conf *config.Config, opts ...SchemaOpt) *Schema {
61-
s, err := ParseSchema(schemaString, resolver, conf, opts...)
53+
func MustParseSchema(schemaString string, resolver interface{}, opts ...SchemaOpt) *Schema {
54+
s, err := ParseSchema(schemaString, resolver, opts...)
6255
if err != nil {
6356
panic(err)
6457
}
@@ -69,11 +62,11 @@ func MustParseSchema(schemaString string, resolver interface{}, conf *config.Con
6962
type Schema struct {
7063
schema *schema.Schema
7164
res *resolvable.Schema
72-
config *config.Config
7365

74-
maxParallelism int
75-
tracer trace.Tracer
76-
logger log.Logger
66+
maxParallelism int
67+
tracer trace.Tracer
68+
logger log.Logger
69+
useFieldResolvers bool
7770
}
7871

7972
// SchemaOpt is an option to pass to ParseSchema or MustParseSchema.
@@ -100,6 +93,13 @@ func Logger(logger log.Logger) SchemaOpt {
10093
}
10194
}
10295

96+
// Specifies whether to use struct field resolvers
97+
func UseFieldResolvers() SchemaOpt {
98+
return func(s *Schema) {
99+
s.useFieldResolvers = true
100+
}
101+
}
102+
103103
// Response represents a typical response of a GraphQL server. It may be encoded to JSON directly or
104104
// it may be further processed to a custom response type, for example to include custom error data.
105105
type Response struct {

graphql_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func TestHelloWorld(t *testing.T) {
7474
type Query {
7575
hello: String!
7676
}
77-
`, &helloWorldResolver1{}, nil),
77+
`, &helloWorldResolver1{}),
7878
Query: `
7979
{
8080
hello
@@ -96,7 +96,7 @@ func TestHelloWorld(t *testing.T) {
9696
type Query {
9797
hello: String!
9898
}
99-
`, &helloWorldResolver2{}, nil),
99+
`, &helloWorldResolver2{}),
100100
Query: `
101101
{
102102
hello
@@ -122,7 +122,7 @@ func TestHelloSnake(t *testing.T) {
122122
type Query {
123123
hello_html: String!
124124
}
125-
`, &helloSnakeResolver1{}, nil),
125+
`, &helloSnakeResolver1{}),
126126
Query: `
127127
{
128128
hello_html
@@ -144,7 +144,7 @@ func TestHelloSnake(t *testing.T) {
144144
type Query {
145145
hello_html: String!
146146
}
147-
`, &helloSnakeResolver2{}, nil),
147+
`, &helloSnakeResolver2{}),
148148
Query: `
149149
{
150150
hello_html
@@ -170,7 +170,7 @@ func TestHelloSnakeArguments(t *testing.T) {
170170
type Query {
171171
say_hello(full_name: String!): String!
172172
}
173-
`, &helloSnakeResolver1{}, nil),
173+
`, &helloSnakeResolver1{}),
174174
Query: `
175175
{
176176
say_hello(full_name: "Rob Pike")
@@ -192,7 +192,7 @@ func TestHelloSnakeArguments(t *testing.T) {
192192
type Query {
193193
say_hello(full_name: String!): String!
194194
}
195-
`, &helloSnakeResolver2{}, nil),
195+
`, &helloSnakeResolver2{}),
196196
Query: `
197197
{
198198
say_hello(full_name: "Rob Pike")
@@ -606,7 +606,7 @@ func TestDeprecatedDirective(t *testing.T) {
606606
b: Int! @deprecated
607607
c: Int! @deprecated(reason: "We don't like it")
608608
}
609-
`, &testDeprecatedDirectiveResolver{}, nil),
609+
`, &testDeprecatedDirectiveResolver{}),
610610
Query: `
611611
{
612612
__type(name: "Query") {
@@ -650,7 +650,7 @@ func TestDeprecatedDirective(t *testing.T) {
650650
B @deprecated
651651
C @deprecated(reason: "We don't like it")
652652
}
653-
`, &testDeprecatedDirectiveResolver{}, nil),
653+
`, &testDeprecatedDirectiveResolver{}),
654654
Query: `
655655
{
656656
__type(name: "Test") {
@@ -1441,7 +1441,7 @@ func TestMutationOrder(t *testing.T) {
14411441
type Mutation {
14421442
changeTheNumber(newNumber: Int!): Query
14431443
}
1444-
`, &theNumberResolver{}, nil),
1444+
`, &theNumberResolver{}),
14451445
Query: `
14461446
mutation {
14471447
first: changeTheNumber(newNumber: 1) {
@@ -1485,7 +1485,7 @@ func TestTime(t *testing.T) {
14851485
}
14861486
14871487
scalar Time
1488-
`, &timeResolver{}, nil),
1488+
`, &timeResolver{}),
14891489
Query: `
14901490
query($t: Time!) {
14911491
a: addHour(time: $t)
@@ -1520,7 +1520,7 @@ func TestUnexportedMethod(t *testing.T) {
15201520
type Mutation {
15211521
changeTheNumber(newNumber: Int!): Int!
15221522
}
1523-
`, &resolverWithUnexportedMethod{}, nil)
1523+
`, &resolverWithUnexportedMethod{})
15241524
if err == nil {
15251525
t.Error("error expected")
15261526
}
@@ -1541,7 +1541,7 @@ func TestUnexportedField(t *testing.T) {
15411541
type Mutation {
15421542
changeTheNumber(newNumber: Int!): Int!
15431543
}
1544-
`, &resolverWithUnexportedField{}, nil)
1544+
`, &resolverWithUnexportedField{})
15451545
if err == nil {
15461546
t.Error("error expected")
15471547
}
@@ -1648,7 +1648,7 @@ func TestInput(t *testing.T) {
16481648
Option1
16491649
Option2
16501650
}
1651-
`, &inputResolver{}, nil)
1651+
`, &inputResolver{})
16521652
gqltesting.RunTests(t, []*gqltesting.Test{
16531653
{
16541654
Schema: coercionSchema,

internal/exec/resolvable/resolvable.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"reflect"
77
"strings"
88

9-
"github.com/graph-gophers/graphql-go/config"
109
"github.com/graph-gophers/graphql-go/internal/common"
1110
"github.com/graph-gophers/graphql-go/internal/exec/packer"
1211
"github.com/graph-gophers/graphql-go/internal/schema"
@@ -58,14 +57,13 @@ func (*List) isResolvable() {}
5857
func (*Scalar) isResolvable() {}
5958

6059
// TODO figure out a better way to handle passed config
61-
// use this to save passed config in order to use it in functions or later
6260
// this approach avoids updating signature of many functions
63-
var conf *config.Config
61+
var useFieldResolvers bool
6462

65-
func ApplyResolver(s *schema.Schema, resolver interface{}) (*Schema, error) {
63+
func ApplyResolver(s *schema.Schema, resolver interface{}, useFieldRes bool) (*Schema, error) {
6664

6765
b := newBuilder(s)
68-
conf = s.Config
66+
useFieldResolvers = useFieldRes
6967

7068
var query, mutation Resolvable
7169

@@ -234,7 +232,7 @@ func (b *execBuilder) makeObjectExec(typeName string, fields schema.FieldList, p
234232
* 2) Otherwise use resolver type's field
235233
*/
236234
if isResolverSchemaOrType(rt) == true || len(f.Args) > 0 ||
237-
conf.UseResolverMethods == true || rt.Kind() == reflect.Interface {
235+
useFieldResolvers == false || rt.Kind() == reflect.Interface {
238236
methodIndex = findMethod(resolverType, f.Name)
239237
} else {
240238
fieldIndex = findField(rt, f.Name)
@@ -268,7 +266,7 @@ func (b *execBuilder) makeObjectExec(typeName string, fields schema.FieldList, p
268266
* 2) Or it is configured to use method
269267
*/
270268
typeAssertions := make(map[string]*TypeAssertion)
271-
if isResolverSchemaOrType(rt) == true || conf.UseResolverMethods == true {
269+
if isResolverSchemaOrType(rt) == true || useFieldResolvers == false {
272270
for _, impl := range possibleTypes {
273271
methodIndex := findMethod(resolverType, "To"+impl.Name)
274272
if methodIndex == -1 {

internal/schema/meta.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package schema
22

3-
import "github.com/graph-gophers/graphql-go/config"
4-
53
var Meta *Schema
64

75
func init() {
86
Meta = &Schema{} // bootstrap
9-
Meta = New(config.Default())
7+
Meta = New()
108
if err := Meta.Parse(metaSrc); err != nil {
119
panic(err)
1210
}

internal/schema/schema.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"fmt"
55
"text/scanner"
66

7-
"github.com/graph-gophers/graphql-go/config"
87
"github.com/graph-gophers/graphql-go/errors"
98
"github.com/graph-gophers/graphql-go/internal/common"
109
)
@@ -46,8 +45,6 @@ type Schema struct {
4645
objects []*Object
4746
unions []*Union
4847
enums []*Enum
49-
50-
Config *config.Config
5148
}
5249

5350
// Resolve a named type in the schema by its name.
@@ -233,12 +230,11 @@ type Field struct {
233230
}
234231

235232
// New initializes an instance of Schema.
236-
func New(config *config.Config) *Schema {
233+
func New() *Schema {
237234
s := &Schema{
238235
entryPointNames: make(map[string]string),
239236
Types: make(map[string]NamedType),
240237
Directives: make(map[string]*DirectiveDecl),
241-
Config: config,
242238
}
243239
for n, t := range Meta.Types {
244240
s.Types[n] = t

relay/relay_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"github.com/graph-gophers/graphql-go/relay"
1111
)
1212

13-
var starwarsSchema = graphql.MustParseSchema(starwars.Schema, &starwars.Resolver{}, nil)
13+
var starwarsSchema = graphql.MustParseSchema(starwars.Schema, &starwars.Resolver{})
1414

1515
func TestServeHTTP(t *testing.T) {
1616
w := httptest.NewRecorder()

0 commit comments

Comments
 (0)