Skip to content

Commit bc940ba

Browse files
committed
Also freeze children arrays
1 parent a27a807 commit bc940ba

File tree

3 files changed

+9
-11
lines changed

3 files changed

+9
-11
lines changed

lib/graphql/compatibility/schema_parser_specification.rb

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -595,31 +595,27 @@ def test_it_parses_whole_definition_with_descriptions
595595

596596
assert_equal 6, document.definitions.size
597597

598-
schema_definition = document.definitions.shift
598+
schema_definition, directive_definition, enum_type_definition, object_type_definition, input_object_type_definition, interface_type_definition = document.definitions
599+
599600
assert_equal GraphQL::Language::Nodes::SchemaDefinition, schema_definition.class
600601

601-
directive_definition = document.definitions.shift
602602
assert_equal GraphQL::Language::Nodes::DirectiveDefinition, directive_definition.class
603603
assert_equal 'This is a directive', directive_definition.description
604604

605-
enum_type_definition = document.definitions.shift
606605
assert_equal GraphQL::Language::Nodes::EnumTypeDefinition, enum_type_definition.class
607606
assert_equal "Multiline comment\n\nWith an enum", enum_type_definition.description
608607

609608
assert_nil enum_type_definition.values[0].description
610609
assert_equal 'Not a creative color', enum_type_definition.values[1].description
611610

612-
object_type_definition = document.definitions.shift
613611
assert_equal GraphQL::Language::Nodes::ObjectTypeDefinition, object_type_definition.class
614612
assert_equal 'Comment without preceding space', object_type_definition.description
615613
assert_equal 'And a field to boot', object_type_definition.fields[0].description
616614

617-
input_object_type_definition = document.definitions.shift
618615
assert_equal GraphQL::Language::Nodes::InputObjectTypeDefinition, input_object_type_definition.class
619616
assert_equal 'Comment for input object types', input_object_type_definition.description
620617
assert_equal 'Color of the car', input_object_type_definition.fields[0].description
621618

622-
interface_type_definition = document.definitions.shift
623619
assert_equal GraphQL::Language::Nodes::InterfaceTypeDefinition, interface_type_definition.class
624620
assert_equal 'Comment for interface definitions', interface_type_definition.description
625621
assert_equal 'Amount of wheels', interface_type_definition.fields[0].description

lib/graphql/language/document_from_schema_definition.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def build_field_node(field)
6565
)
6666

6767
if field.deprecation_reason
68-
field_node.directives << GraphQL::Language::Nodes::Directive.new(
68+
field_node = field_node.merge_directive(
6969
name: GraphQL::Directive::DeprecatedDirective.name,
7070
arguments: [GraphQL::Language::Nodes::Argument.new(name: "reason", value: field.deprecation_reason)]
7171
)
@@ -107,7 +107,7 @@ def build_enum_value_node(enum_value)
107107
)
108108

109109
if enum_value.deprecation_reason
110-
enum_value_node.directives << GraphQL::Language::Nodes::Directive.new(
110+
enum_value_node = enum_value_node.merge_directive(
111111
name: GraphQL::Directive::DeprecatedDirective.name,
112112
arguments: [GraphQL::Language::Nodes::Argument.new(name: "reason", value: enum_value.deprecation_reason)]
113113
)

lib/graphql/language/nodes.rb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ def merge_#{method_name.to_s.sub(/s$/, "")}(node_opts)
168168
else
169169
module_eval <<-RUBY, __FILE__, __LINE__
170170
def children
171-
@children ||= #{children_of_type.keys.map { |k| "@#{k}" }.join(" + ")}
171+
@children ||= (#{children_of_type.keys.map { |k| "@#{k}" }.join(" + ")}).freeze
172172
end
173173
RUBY
174174
end
@@ -200,7 +200,7 @@ def scalar_methods(*method_names)
200200
attr_reader #{method_names.map { |m| ":#{m}"}.join(", ")}
201201
202202
def scalars
203-
@scalars ||= [#{method_names.map { |k| "@#{k}" }.join(", ")}]
203+
@scalars ||= [#{method_names.map { |k| "@#{k}" }.join(", ")}].freeze
204204
end
205205
RUBY
206206
end
@@ -224,7 +224,9 @@ def generate_initialize_node
224224
arguments = scalar_method_names.map { |m| "#{m}: nil"} +
225225
@children_methods.keys.map { |m| "#{m}: []" }
226226

227-
assignments = all_method_names.map { |m| "@#{m} = #{m}"}
227+
assignments = scalar_method_names.map { |m| "@#{m} = #{m}"} +
228+
@children_methods.keys.map { |m| "@#{m} = #{m}.freeze" }
229+
228230
module_eval <<-RUBY, __FILE__, __LINE__
229231
def initialize_node #{arguments.join(", ")}
230232
#{assignments.join("\n")}

0 commit comments

Comments
 (0)