Skip to content

Commit 20bac9d

Browse files
committed
add formal fomatter class.
1 parent 7ad025f commit 20bac9d

File tree

13 files changed

+83
-16
lines changed

13 files changed

+83
-16
lines changed

lib/graphql/stitching.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def supports_visibility?
7171
end
7272
end
7373

74+
require_relative "stitching/formatter"
7475
require_relative "stitching/directives"
7576
require_relative "stitching/supergraph"
7677
require_relative "stitching/client"

lib/graphql/stitching/composer.rb

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,20 @@ class Composer
2121
end
2222

2323
# @api private
24-
BASIC_VALUE_MERGER = ->(values_by_location, _info) { values_by_location.values.find { !_1.nil? } }
24+
BASIC_VALUE_MERGER = ->(values_by_location, _info) { values_by_location.each_value.find { !_1.nil? } }
2525

2626
# @api private
27-
VISIBILITY_PROFILES_MERGER = ->(values_by_location, _info) { values_by_location.values.reduce(:&) }
27+
VISIBILITY_PROFILES_MERGER = ->(values_by_location, _info) { values_by_location.each_value.reduce(:&) }
28+
29+
# @api private
30+
# VISIBILITY_PROFILES_MERGER = begin
31+
# f = Class.new(Formatter) do
32+
# def merge_kwargs(values_by_location, _info)
33+
# values_by_location.each_value.reduce(:&)
34+
# end
35+
# end
36+
# f.new
37+
# end
2838

2939
# @api private
3040
COMPOSITION_VALIDATORS = [
@@ -52,22 +62,22 @@ def initialize(
5262
mutation_name: "Mutation",
5363
subscription_name: "Subscription",
5464
visibility_profiles: [],
55-
description_merger: nil,
5665
deprecation_merger: nil,
5766
default_value_merger: nil,
5867
directive_kwarg_merger: nil,
5968
root_field_location_selector: nil,
60-
root_entrypoints: nil
69+
root_entrypoints: nil,
70+
formatter: nil
6171
)
6272
@query_name = query_name
6373
@mutation_name = mutation_name
6474
@subscription_name = subscription_name
65-
@description_merger = description_merger || BASIC_VALUE_MERGER
6675
@deprecation_merger = deprecation_merger || BASIC_VALUE_MERGER
6776
@default_value_merger = default_value_merger || BASIC_VALUE_MERGER
6877
@directive_kwarg_merger = directive_kwarg_merger || BASIC_VALUE_MERGER
6978
@root_field_location_selector = root_field_location_selector
7079
@root_entrypoints = root_entrypoints || {}
80+
@formatter = formatter || Formatter.new
7181

7282
@field_map = {}
7383
@resolver_map = {}
@@ -537,12 +547,12 @@ def merge_value_types(type_name, subgraph_types, field_name: nil, argument_name:
537547
# @!visibility private
538548
def merge_descriptions(type_name, members_by_location, field_name: nil, argument_name: nil, enum_value: nil)
539549
strings_by_location = members_by_location.each_with_object({}) { |(l, m), memo| memo[l] = m.description }
540-
@description_merger.call(strings_by_location, {
550+
@formatter.merge_descriptions(strings_by_location, Formatter::Info.new(
541551
type_name: type_name,
542552
field_name: field_name,
543553
argument_name: argument_name,
544554
enum_value: enum_value,
545-
}.tap(&:compact!))
555+
))
546556
end
547557

548558
# @!scope class

lib/graphql/stitching/formatter.rb

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# frozen_string_literal: true
2+
3+
require_relative "type_resolver/arguments"
4+
require_relative "type_resolver/keys"
5+
6+
module GraphQL
7+
module Stitching
8+
class Formatter
9+
class Info
10+
attr_reader :type_name, :field_name, :argument_name, :enum_value, :directive_name, :kwarg_name
11+
12+
def initialize(
13+
type_name:,
14+
field_name: nil,
15+
argument_name: nil,
16+
enum_value: nil,
17+
directive_name: nil,
18+
kwarg_name: nil
19+
)
20+
@type_name = type_name
21+
@field_name = field_name
22+
@argument_name = argument_name
23+
@enum_value = enum_value
24+
@directive_name = directive_name
25+
@kwarg_name = kwarg_name
26+
end
27+
end
28+
29+
def merge_values(values_by_location, _info)
30+
values_by_location.each_value.find { !_1.nil? }
31+
end
32+
33+
def merge_descriptions(values_by_location, info)
34+
merge_values(values_by_location, info)
35+
end
36+
37+
def merge_deprecations(values_by_location, info)
38+
merge_values(values_by_location, info)
39+
end
40+
41+
def merge_default_values(values_by_location, info)
42+
merge_values(values_by_location, info)
43+
end
44+
45+
def merge_kwargs(values_by_location, info)
46+
merge_values(values_by_location, info)
47+
end
48+
end
49+
end
50+
end

test/graphql/stitching/composer/merge_arguments_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def test_merges_argument_descriptions
9090
b = %|input Test { """b""" arg:String } type Query { test("""b""" arg:Test):String }|
9191

9292
supergraph = compose_definitions({ "a" => a, "b" => b }, {
93-
description_merger: ->(str_by_location, _info) { str_by_location.values.join("/") }
93+
formatter: JoinFormatter.new,
9494
})
9595

9696
assert_equal "a/b", supergraph.schema.types["Test"].arguments["arg"].description

test/graphql/stitching/composer/merge_directive_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def test_merges_directive_definitions
1919
|
2020

2121
supergraph = compose_definitions({ "a" => a, "b" => b }, {
22-
description_merger: ->(str_by_location, _info) { str_by_location.values.join("/") }
22+
formatter: JoinFormatter.new,
2323
})
2424

2525
directive_definition = supergraph.schema.directives["fizzbuzz"]

test/graphql/stitching/composer/merge_enum_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def test_merges_enum_and_value_descriptions
99
b = %|"""b""" enum Status { """b""" YES } type Query { status:Status }|
1010

1111
supergraph = compose_definitions({ "a" => a, "b" => b }, {
12-
description_merger: ->(str_by_location, _info) { str_by_location.values.join("/") }
12+
formatter: JoinFormatter.new,
1313
})
1414

1515
assert_equal "a/b", supergraph.schema.types["Status"].description

test/graphql/stitching/composer/merge_fields_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def test_merges_field_descriptions
99
b = %{type Test { """b""" field: String } type Query { test:Test }}
1010

1111
supergraph = compose_definitions({ "a" => a, "b" => b }, {
12-
description_merger: ->(str_by_location, _info) { str_by_location.values.join("/") }
12+
formatter: JoinFormatter.new,
1313
})
1414

1515
assert_equal "a/b", supergraph.schema.types["Test"].fields["field"].description

test/graphql/stitching/composer/merge_input_object_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def test_merges_input_object_descriptions
99
b = %{"""b""" input Test { field:String } type Query { get(test:Test):String }}
1010

1111
info = compose_definitions({ "a" => a, "b" => b }, {
12-
description_merger: ->(str_by_location, _info) { str_by_location.values.join("/") }
12+
formatter: JoinFormatter.new,
1313
})
1414

1515
assert_equal "a/b", info.schema.types["Test"].description

test/graphql/stitching/composer/merge_interface_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def test_merges_interface_descriptions
99
b = %{"""b""" interface Test { field: String } type Query { test:Test }}
1010

1111
supergraph = compose_definitions({ "a" => a, "b" => b }, {
12-
description_merger: ->(str_by_location, _info) { str_by_location.values.join("/") }
12+
formatter: JoinFormatter.new,
1313
})
1414

1515
assert_equal "a/b", supergraph.schema.types["Test"].description

test/graphql/stitching/composer/merge_object_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def test_merges_object_descriptions
99
b = %{"""b""" type Test { field: String } type Query { test:Test }}
1010

1111
supergraph = compose_definitions({ "a" => a, "b" => b }, {
12-
description_merger: ->(str_by_location, _info) { str_by_location.values.join("/") }
12+
formatter: JoinFormatter.new,
1313
})
1414

1515
assert_equal "a/b", supergraph.schema.types["Test"].description

0 commit comments

Comments
 (0)