graphql 0.19.3 → 0.19.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/analysis/max_query_complexity.rb +1 -1
  3. data/lib/graphql/analysis/max_query_depth.rb +1 -1
  4. data/lib/graphql/boolean_type.rb +2 -2
  5. data/lib/graphql/define/instance_definable.rb +2 -2
  6. data/lib/graphql/enum_type.rb +3 -3
  7. data/lib/graphql/field.rb +6 -6
  8. data/lib/graphql/float_type.rb +2 -2
  9. data/lib/graphql/id_type.rb +2 -2
  10. data/lib/graphql/input_object_type.rb +1 -1
  11. data/lib/graphql/int_type.rb +2 -2
  12. data/lib/graphql/internal_representation/rewrite.rb +12 -12
  13. data/lib/graphql/introspection/arguments_field.rb +1 -1
  14. data/lib/graphql/introspection/enum_value_type.rb +1 -1
  15. data/lib/graphql/introspection/enum_values_field.rb +1 -1
  16. data/lib/graphql/introspection/field_type.rb +1 -1
  17. data/lib/graphql/introspection/fields_field.rb +1 -1
  18. data/lib/graphql/introspection/input_fields_field.rb +1 -1
  19. data/lib/graphql/introspection/input_value_type.rb +2 -2
  20. data/lib/graphql/introspection/interfaces_field.rb +1 -1
  21. data/lib/graphql/introspection/of_type_field.rb +1 -1
  22. data/lib/graphql/introspection/possible_types_field.rb +1 -1
  23. data/lib/graphql/introspection/schema_field.rb +1 -1
  24. data/lib/graphql/introspection/schema_type.rb +5 -5
  25. data/lib/graphql/introspection/type_by_name_field.rb +1 -1
  26. data/lib/graphql/introspection/type_type.rb +6 -6
  27. data/lib/graphql/introspection/typename_field.rb +1 -1
  28. data/lib/graphql/language.rb +1 -0
  29. data/lib/graphql/language/comments.rb +44 -0
  30. data/lib/graphql/language/definition_slice.rb +1 -1
  31. data/lib/graphql/language/generation.rb +35 -12
  32. data/lib/graphql/language/lexer.rb +29 -10
  33. data/lib/graphql/language/lexer.rl +25 -6
  34. data/lib/graphql/language/nodes.rb +30 -23
  35. data/lib/graphql/language/parser.rb +33 -14
  36. data/lib/graphql/language/parser.y +33 -14
  37. data/lib/graphql/language/parser_tests.rb +86 -2
  38. data/lib/graphql/language/token.rb +3 -2
  39. data/lib/graphql/language/visitor.rb +3 -3
  40. data/lib/graphql/object_type.rb +1 -1
  41. data/lib/graphql/query/arguments.rb +23 -2
  42. data/lib/graphql/query/serial_execution/field_resolution.rb +31 -14
  43. data/lib/graphql/relay/base_connection.rb +1 -3
  44. data/lib/graphql/relay/connection_type.rb +1 -1
  45. data/lib/graphql/relay/mutation.rb +1 -1
  46. data/lib/graphql/relay/relation_connection.rb +7 -3
  47. data/lib/graphql/scalar_type.rb +1 -1
  48. data/lib/graphql/schema.rb +19 -8
  49. data/lib/graphql/schema/loader.rb +2 -2
  50. data/lib/graphql/schema/printer.rb +63 -8
  51. data/lib/graphql/schema/timeout_middleware.rb +11 -11
  52. data/lib/graphql/schema/validation.rb +12 -12
  53. data/lib/graphql/static_validation/arguments_validator.rb +1 -1
  54. data/lib/graphql/static_validation/rules/directives_are_defined.rb +1 -1
  55. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +1 -1
  56. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +1 -1
  57. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +1 -1
  58. data/lib/graphql/static_validation/rules/fields_will_merge.rb +3 -2
  59. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
  60. data/lib/graphql/static_validation/rules/fragment_types_exist.rb +1 -1
  61. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +9 -4
  62. data/lib/graphql/static_validation/rules/fragments_are_named.rb +1 -1
  63. data/lib/graphql/static_validation/rules/fragments_are_on_composite_types.rb +1 -1
  64. data/lib/graphql/static_validation/rules/fragments_are_used.rb +3 -3
  65. data/lib/graphql/static_validation/rules/mutation_root_exists.rb +1 -1
  66. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +2 -2
  67. data/lib/graphql/static_validation/rules/subscription_root_exists.rb +1 -1
  68. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +1 -1
  69. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +2 -2
  70. data/lib/graphql/static_validation/rules/variables_are_input_types.rb +1 -1
  71. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +6 -6
  72. data/lib/graphql/static_validation/type_stack.rb +2 -2
  73. data/lib/graphql/string_type.rb +2 -2
  74. data/lib/graphql/version.rb +1 -1
  75. data/readme.md +1 -1
  76. data/spec/graphql/analysis/analyze_query_spec.rb +3 -3
  77. data/spec/graphql/analysis/query_complexity_spec.rb +7 -7
  78. data/spec/graphql/introspection/directive_type_spec.rb +2 -2
  79. data/spec/graphql/introspection/introspection_query_spec.rb +26 -26
  80. data/spec/graphql/language/generation_spec.rb +137 -53
  81. data/spec/graphql/language/lexer_spec.rb +22 -0
  82. data/spec/graphql/language/visitor_spec.rb +6 -6
  83. data/spec/graphql/query/arguments_spec.rb +45 -1
  84. data/spec/graphql/query/context_spec.rb +4 -4
  85. data/spec/graphql/query/executor_spec.rb +1 -1
  86. data/spec/graphql/query/serial_execution/value_resolution_spec.rb +1 -1
  87. data/spec/graphql/relay/mutation_spec.rb +2 -2
  88. data/spec/graphql/relay/node_spec.rb +2 -2
  89. data/spec/graphql/relay/relation_connection_spec.rb +16 -0
  90. data/spec/graphql/schema/loader_spec.rb +2 -2
  91. data/spec/graphql/schema/middleware_chain_spec.rb +6 -6
  92. data/spec/graphql/schema/printer_spec.rb +268 -18
  93. data/spec/graphql/schema/rescue_middleware_spec.rb +1 -1
  94. data/spec/graphql/schema/timeout_middleware_spec.rb +2 -2
  95. data/spec/graphql/schema_spec.rb +2 -2
  96. data/spec/graphql/static_validation/rules/fragments_are_finite_spec.rb +13 -0
  97. data/spec/graphql/static_validation/rules/fragments_are_used_spec.rb +1 -1
  98. data/spec/graphql/static_validation/type_stack_spec.rb +1 -1
  99. data/spec/support/dairy_app.rb +25 -25
  100. data/spec/support/dairy_data.rb +2 -0
  101. data/spec/support/star_wars_data.rb +2 -1
  102. data/spec/support/star_wars_schema.rb +18 -18
  103. metadata +19 -2
@@ -7,7 +7,7 @@ module GraphQL
7
7
  name "__typename"
8
8
  description "The name of this type"
9
9
  type -> { !GraphQL::STRING_TYPE }
10
- resolve -> (obj, a, c) { wrapped_type.name }
10
+ resolve ->(obj, a, c) { wrapped_type.name }
11
11
  end
12
12
  end
13
13
  end
@@ -5,3 +5,4 @@ require "graphql/language/nodes"
5
5
  require "graphql/language/parser"
6
6
  require "graphql/language/token"
7
7
  require "graphql/language/visitor"
8
+ require "graphql/language/comments"
@@ -0,0 +1,44 @@
1
+ module GraphQL
2
+ module Language
3
+ module Comments
4
+ extend self
5
+
6
+ def commentize(description, indent: '')
7
+ lines = description.split("\n")
8
+
9
+ comment = ''
10
+
11
+ lines.each do |line|
12
+ if line == ''
13
+ comment << "#{indent}#\n"
14
+ else
15
+ sublines = break_line(line, 120 - indent.length)
16
+ sublines.each do |subline|
17
+ comment << "#{indent}# #{subline}\n"
18
+ end
19
+ end
20
+ end
21
+
22
+ comment
23
+ end
24
+
25
+ private
26
+
27
+ def break_line(line, length)
28
+ return [line] if line.length < length + 5
29
+
30
+ parts = line.split(Regexp.new("((?: |^).{15,#{length - 40}}(?= |$))"))
31
+ return [line] if parts.length < 4
32
+
33
+ sublines = [parts.slice!(0, 3).join]
34
+
35
+ parts.each_with_index do |part, i|
36
+ next if i % 2 == 1
37
+ sublines << "#{part[1..-1]}#{parts[i + 1]}"
38
+ end
39
+
40
+ sublines
41
+ end
42
+ end
43
+ end
44
+ end
@@ -16,7 +16,7 @@ module GraphQL
16
16
  def find_definition_dependencies(definitions, name)
17
17
  names = Set.new([name])
18
18
  visitor = Visitor.new(definitions[name])
19
- visitor[Nodes::FragmentSpread] << -> (node, parent) {
19
+ visitor[Nodes::FragmentSpread] << ->(node, parent) {
20
20
  if fragment = definitions[node.name]
21
21
  names.merge(find_definition_dependencies(definitions, fragment.name))
22
22
  end
@@ -72,18 +72,26 @@ module GraphQL
72
72
  when Nodes::VariableIdentifier
73
73
  "$#{node.name}"
74
74
  when Nodes::SchemaDefinition
75
+ if (node.query.nil? || node.query == 'Query') &&
76
+ (node.mutation.nil? || node.mutation == 'Mutation') &&
77
+ (node.subscription.nil? || node.subscription == 'Subscription')
78
+ return
79
+ end
80
+
75
81
  out = "schema {\n"
76
82
  out << " query: #{node.query}\n" if node.query
77
83
  out << " mutation: #{node.mutation}\n" if node.mutation
78
84
  out << " subscription: #{node.subscription}\n" if node.subscription
79
85
  out << "}"
80
86
  when Nodes::ScalarTypeDefinition
81
- out = "scalar #{node.name}"
87
+ out = generate_description(node)
88
+ out << "scalar #{node.name}"
82
89
  out << generate_directives(node.directives)
83
90
  when Nodes::ObjectTypeDefinition
84
- out = "type #{node.name}"
91
+ out = generate_description(node)
92
+ out << "type #{node.name}"
85
93
  out << generate_directives(node.directives)
86
- out << " implements " << node.interfaces.join(", ") unless node.interfaces.empty?
94
+ out << " implements " << node.interfaces.map(&:name).join(", ") unless node.interfaces.empty?
87
95
  out << generate_field_definitions(node.fields)
88
96
  when Nodes::InputValueDefinition
89
97
  out = "#{node.name}: #{generate(node.type)}"
@@ -97,16 +105,20 @@ module GraphQL
97
105
  out << ": #{generate(node.type)}"
98
106
  out << generate_directives(node.directives)
99
107
  when Nodes::InterfaceTypeDefinition
100
- out = "interface #{node.name}"
108
+ out = generate_description(node)
109
+ out << "interface #{node.name}"
101
110
  out << generate_directives(node.directives)
102
111
  out << generate_field_definitions(node.fields)
103
112
  when Nodes::UnionTypeDefinition
104
- out = "union #{node.name}"
113
+ out = generate_description(node)
114
+ out << "union #{node.name}"
105
115
  out << generate_directives(node.directives)
106
- out << " = " + node.types.join(" | ")
116
+ out << " = " + node.types.map(&:name).join(" | ")
107
117
  when Nodes::EnumTypeDefinition
108
- out = "enum #{node.name}#{generate_directives(node.directives)} {\n"
109
- node.values.each do |value|
118
+ out = generate_description(node)
119
+ out << "enum #{node.name}#{generate_directives(node.directives)} {\n"
120
+ node.values.each.with_index do |value, i|
121
+ out << generate_description(value, indent: ' ', first_in_block: i == 0)
110
122
  out << generate(value)
111
123
  end
112
124
  out << "}"
@@ -115,15 +127,18 @@ module GraphQL
115
127
  out << generate_directives(node.directives)
116
128
  out << "\n"
117
129
  when Nodes::InputObjectTypeDefinition
118
- out = "input #{node.name}"
130
+ out = generate_description(node)
131
+ out << "input #{node.name}"
119
132
  out << generate_directives(node.directives)
120
133
  out << " {\n"
121
- node.fields.each do |field|
134
+ node.fields.each.with_index do |field, i|
135
+ out << generate_description(field, indent: ' ', first_in_block: i == 0)
122
136
  out << " #{generate(field)}\n"
123
137
  end
124
138
  out << "}"
125
139
  when Nodes::DirectiveDefinition
126
- out = "directive @#{node.name}"
140
+ out = generate_description(node)
141
+ out << "directive @#{node.name}"
127
142
  out << "(#{node.arguments.map { |a| generate(a) }.join(", ")})" if node.arguments.any?
128
143
  out << " on #{node.locations.join(' | ')}"
129
144
  when Nodes::AbstractNode
@@ -161,9 +176,17 @@ module GraphQL
161
176
  end
162
177
  end
163
178
 
179
+ def generate_description(node, indent: '', first_in_block: true)
180
+ return '' unless node.description
181
+
182
+ description = indent != '' && !first_in_block ? "\n" : ""
183
+ description << GraphQL::Language::Comments.commentize(node.description, indent: indent)
184
+ end
185
+
164
186
  def generate_field_definitions(fields)
165
187
  out = " {\n"
166
- fields.each do |field|
188
+ fields.each.with_index do |field, i|
189
+ out << generate_description(field, indent: ' ', first_in_block: i == 0)
167
190
  out << " #{generate(field)}\n"
168
191
  end
169
192
  out << "}"
@@ -333,7 +333,7 @@ self._graphql_lexer_trans_actions = [
333
333
  25, 17, 15, 117, 0, 0, 0, 0,
334
334
  0, 0, 0, 0, 0, 0, 0, 9,
335
335
  33, 7, 57, 117, 117, 37, 0, 0,
336
- 0, 45, 21, 0, 0, 47, 47, 0,
336
+ 0, 47, 21, 0, 0, 45, 45, 0,
337
337
  57, 57, 49, 0, 0, 0, 0, 0,
338
338
  0, 39, 0, 41, 0, 0, 0, 0,
339
339
  60, 41, 0, 0, 0, 0, 0, 57,
@@ -400,7 +400,7 @@ self._graphql_lexer_trans_actions = [
400
400
  117, 43, 117, 0, 117, 117, 117, 43,
401
401
  117, 0, 117, 117, 117, 43, 117, 102,
402
402
  117, 117, 117, 43, 55, 55, 55, 51,
403
- 55, 53, 45, 55, 47, 49, 39, 41,
403
+ 55, 53, 47, 55, 45, 49, 39, 41,
404
404
  41, 39, 49, 55, 43, 43, 43, 43,
405
405
  43, 43, 43, 43, 43, 43, 43, 43,
406
406
  43, 43, 43, 43, 43, 43, 43, 43,
@@ -519,7 +519,7 @@ end
519
519
 
520
520
  # line 132 "lib/graphql/language/lexer.rl"
521
521
 
522
- emit_token = -> (name) {
522
+ emit_token = ->(name) {
523
523
  emit(name, ts, te, meta)
524
524
  }
525
525
 
@@ -798,7 +798,7 @@ te = p+1
798
798
  begin emit_token.call(:PIPE) end
799
799
  end
800
800
  when 39 then
801
- # line 87 "lib/graphql/language/lexer.rl"
801
+ # line 88 "lib/graphql/language/lexer.rl"
802
802
  begin
803
803
  te = p+1
804
804
  begin
@@ -831,10 +831,10 @@ te = p
831
831
  p = p - 1; begin emit_token.call(:IDENTIFIER) end
832
832
  end
833
833
  when 44 then
834
- # line 92 "lib/graphql/language/lexer.rl"
834
+ # line 86 "lib/graphql/language/lexer.rl"
835
835
  begin
836
836
  te = p
837
- p = p - 1; begin meta[:col] += te - ts end
837
+ p = p - 1; begin record_comment(ts, te, meta) end
838
838
  end
839
839
  when 45 then
840
840
  # line 93 "lib/graphql/language/lexer.rl"
@@ -984,13 +984,29 @@ end
984
984
  meta[:tokens]
985
985
  end
986
986
 
987
+ def self.record_comment(ts, te, meta)
988
+ token = GraphQL::Language::Token.new(
989
+ name: :COMMENT,
990
+ value: meta[:data][ts...te].pack("c*"),
991
+ line: meta[:line],
992
+ col: meta[:col],
993
+ prev_token: @previous_token,
994
+ )
995
+
996
+ @previous_token = token
997
+
998
+ meta[:col] += te - ts
999
+ end
1000
+
987
1001
  def self.emit(token_name, ts, te, meta)
988
- meta[:tokens] << GraphQL::Language::Token.new(
1002
+ meta[:tokens] << token = GraphQL::Language::Token.new(
989
1003
  name: token_name,
990
1004
  value: meta[:data][ts...te].pack("c*"),
991
1005
  line: meta[:line],
992
1006
  col: meta[:col],
1007
+ prev_token: @previous_token,
993
1008
  )
1009
+ @previous_token = token
994
1010
  # Bump the column counter for the next token
995
1011
  meta[:col] += te - ts
996
1012
  end
@@ -1008,28 +1024,31 @@ end
1008
1024
  }
1009
1025
 
1010
1026
  UTF_8 = /\\u[\dAa-f]{4}/i
1011
- UTF_8_REPLACE = -> (m) { [m[-4..-1].to_i(16)].pack('U'.freeze) }
1027
+ UTF_8_REPLACE = ->(m) { [m[-4..-1].to_i(16)].pack('U'.freeze) }
1012
1028
 
1013
1029
  def self.emit_string(ts, te, meta)
1014
1030
  value = meta[:data][ts...te].pack("c*").force_encoding("UTF-8")
1015
1031
  if value =~ /\\u|\\./ && value !~ ESCAPES
1016
- meta[:tokens] << GraphQL::Language::Token.new(
1032
+ meta[:tokens] << token = GraphQL::Language::Token.new(
1017
1033
  name: :BAD_UNICODE_ESCAPE,
1018
1034
  value: value,
1019
1035
  line: meta[:line],
1020
1036
  col: meta[:col],
1037
+ prev_token: @previous_token,
1021
1038
  )
1022
1039
  else
1023
1040
  replace_escaped_characters_in_place(value)
1024
1041
 
1025
- meta[:tokens] << GraphQL::Language::Token.new(
1042
+ meta[:tokens] << token = GraphQL::Language::Token.new(
1026
1043
  name: :STRING,
1027
1044
  value: value,
1028
1045
  line: meta[:line],
1029
1046
  col: meta[:col],
1047
+ prev_token: @previous_token,
1030
1048
  )
1031
1049
  end
1032
1050
 
1051
+ @previous_token = token
1033
1052
  meta[:col] += te - ts
1034
1053
  end
1035
1054
  end
@@ -83,6 +83,7 @@
83
83
  BANG => { emit_token.call(:BANG) };
84
84
  PIPE => { emit_token.call(:PIPE) };
85
85
  IDENTIFIER => { emit_token.call(:IDENTIFIER) };
86
+ COMMENT => { record_comment(ts, te, meta) };
86
87
 
87
88
  NEWLINE => {
88
89
  meta[:line] += 1
@@ -90,7 +91,6 @@
90
91
  };
91
92
 
92
93
  BLANK => { meta[:col] += te - ts };
93
- COMMENT => { meta[:col] += te - ts };
94
94
 
95
95
  UNKNOWN_CHAR => { emit_token.call(:UNKNOWN_CHAR) };
96
96
 
@@ -130,7 +130,7 @@ module GraphQL
130
130
 
131
131
  %% write init;
132
132
 
133
- emit_token = -> (name) {
133
+ emit_token = ->(name) {
134
134
  emit(name, ts, te, meta)
135
135
  }
136
136
 
@@ -139,13 +139,29 @@ module GraphQL
139
139
  meta[:tokens]
140
140
  end
141
141
 
142
+ def self.record_comment(ts, te, meta)
143
+ token = GraphQL::Language::Token.new(
144
+ name: :COMMENT,
145
+ value: meta[:data][ts...te].pack("c*"),
146
+ line: meta[:line],
147
+ col: meta[:col],
148
+ prev_token: @previous_token,
149
+ )
150
+
151
+ @previous_token = token
152
+
153
+ meta[:col] += te - ts
154
+ end
155
+
142
156
  def self.emit(token_name, ts, te, meta)
143
- meta[:tokens] << GraphQL::Language::Token.new(
157
+ meta[:tokens] << token = GraphQL::Language::Token.new(
144
158
  name: token_name,
145
159
  value: meta[:data][ts...te].pack("c*"),
146
160
  line: meta[:line],
147
161
  col: meta[:col],
162
+ prev_token: @previous_token,
148
163
  )
164
+ @previous_token = token
149
165
  # Bump the column counter for the next token
150
166
  meta[:col] += te - ts
151
167
  end
@@ -163,28 +179,31 @@ module GraphQL
163
179
  }
164
180
 
165
181
  UTF_8 = /\\u[\dAa-f]{4}/i
166
- UTF_8_REPLACE = -> (m) { [m[-4..-1].to_i(16)].pack('U'.freeze) }
182
+ UTF_8_REPLACE = ->(m) { [m[-4..-1].to_i(16)].pack('U'.freeze) }
167
183
 
168
184
  def self.emit_string(ts, te, meta)
169
185
  value = meta[:data][ts...te].pack("c*").force_encoding("UTF-8")
170
186
  if value =~ /\\u|\\./ && value !~ ESCAPES
171
- meta[:tokens] << GraphQL::Language::Token.new(
187
+ meta[:tokens] << token = GraphQL::Language::Token.new(
172
188
  name: :BAD_UNICODE_ESCAPE,
173
189
  value: value,
174
190
  line: meta[:line],
175
191
  col: meta[:col],
192
+ prev_token: @previous_token,
176
193
  )
177
194
  else
178
195
  replace_escaped_characters_in_place(value)
179
196
 
180
- meta[:tokens] << GraphQL::Language::Token.new(
197
+ meta[:tokens] << token = GraphQL::Language::Token.new(
181
198
  name: :STRING,
182
199
  value: value,
183
200
  line: meta[:line],
184
201
  col: meta[:col],
202
+ prev_token: @previous_token,
185
203
  )
186
204
  end
187
205
 
206
+ @previous_token = token
188
207
  meta[:col] += te - ts
189
208
  end
190
209
  end
@@ -17,9 +17,6 @@ module GraphQL
17
17
  if options.key?(:position_source)
18
18
  position_source = options.delete(:position_source)
19
19
  @line, @col = position_source.line_and_column
20
- elsif options.key?(:line)
21
- @line = options.delete(:line)
22
- @col = options.delete(:col)
23
20
  end
24
21
 
25
22
  initialize_node(options)
@@ -143,14 +140,15 @@ module GraphQL
143
140
  end
144
141
 
145
142
  class DirectiveDefinition < AbstractNode
146
- attr_accessor :name, :arguments, :locations
143
+ attr_accessor :name, :arguments, :locations, :description
147
144
  scalar_attributes :name
148
145
  child_attributes :arguments, :locations
149
146
 
150
- def initialize_node(name: nil, arguments: [], locations: [])
147
+ def initialize_node(name: nil, arguments: [], locations: [], description: nil)
151
148
  @name = name
152
149
  @arguments = arguments
153
150
  @locations = locations
151
+ @description = description
154
152
  end
155
153
  end
156
154
 
@@ -347,111 +345,120 @@ module GraphQL
347
345
  end
348
346
 
349
347
  class ScalarTypeDefinition < AbstractNode
350
- attr_accessor :name, :directives
348
+ attr_accessor :name, :directives, :description
351
349
  scalar_attributes :name
352
350
  child_attributes :directives
353
351
 
354
- def initialize_node(name:, directives: [])
352
+ def initialize_node(name:, directives: [], description: nil)
355
353
  @name = name
356
354
  @directives = directives
355
+ @description = description
357
356
  end
358
357
  end
359
358
 
360
359
  class ObjectTypeDefinition < AbstractNode
361
- attr_accessor :name, :interfaces, :fields, :directives
360
+ attr_accessor :name, :interfaces, :fields, :directives, :description
362
361
  scalar_attributes :name
363
362
  child_attributes :interfaces, :fields, :directives
364
363
 
365
- def initialize_node(name:, interfaces:, fields:, directives: [])
364
+ def initialize_node(name:, interfaces:, fields:, directives: [], description: nil)
366
365
  @name = name
367
366
  @interfaces = interfaces || []
368
367
  @directives = directives
369
368
  @fields = fields
369
+ @description = description
370
370
  end
371
371
  end
372
372
 
373
373
  class InputValueDefinition < AbstractNode
374
- attr_accessor :name, :type, :default_value, :directives
374
+ attr_accessor :name, :type, :default_value, :directives,:description
375
375
  scalar_attributes :name, :type, :default_value
376
376
  child_attributes :directives
377
377
 
378
- def initialize_node(name:, type:, default_value: nil, directives: [])
378
+ def initialize_node(name:, type:, default_value: nil, directives: [], description: nil)
379
379
  @name = name
380
380
  @type = type
381
381
  @default_value = default_value
382
382
  @directives = directives
383
+ @description = description
383
384
  end
384
385
  end
385
386
 
386
387
  class FieldDefinition < AbstractNode
387
- attr_accessor :name, :arguments, :type, :directives
388
+ attr_accessor :name, :arguments, :type, :directives, :description
388
389
  scalar_attributes :name, :type
389
390
  child_attributes :arguments, :directives
390
391
 
391
- def initialize_node(name:, arguments:, type:, directives: [])
392
+ def initialize_node(name:, arguments:, type:, directives: [], description: nil)
392
393
  @name = name
393
394
  @arguments = arguments
394
395
  @type = type
395
396
  @directives = directives
397
+ @description = description
396
398
  end
397
399
  end
398
400
 
399
401
  class InterfaceTypeDefinition < AbstractNode
400
- attr_accessor :name, :fields, :directives
402
+ attr_accessor :name, :fields, :directives, :description
401
403
  scalar_attributes :name
402
404
  child_attributes :fields, :directives
403
405
 
404
- def initialize_node(name:, fields:, directives: [])
406
+ def initialize_node(name:, fields:, directives: [], description: nil)
405
407
  @name = name
406
408
  @fields = fields
407
409
  @directives = directives
410
+ @description = description
408
411
  end
409
412
  end
410
413
 
411
414
  class UnionTypeDefinition < AbstractNode
412
- attr_accessor :name, :types, :directives
415
+ attr_accessor :name, :types, :directives, :description
413
416
  scalar_attributes :name
414
417
  child_attributes :types, :directives
415
418
 
416
- def initialize_node(name:, types:, directives: [])
419
+ def initialize_node(name:, types:, directives: [], description: nil)
417
420
  @name = name
418
421
  @types = types
419
422
  @directives = directives
423
+ @description = description
420
424
  end
421
425
  end
422
426
 
423
427
  class EnumTypeDefinition < AbstractNode
424
- attr_accessor :name, :values, :directives
428
+ attr_accessor :name, :values, :directives, :description
425
429
  scalar_attributes :name
426
430
  child_attributes :values, :directives
427
431
 
428
- def initialize_node(name:, values:, directives: [])
432
+ def initialize_node(name:, values:, directives: [], description: nil)
429
433
  @name = name
430
434
  @values = values
431
435
  @directives = directives
436
+ @description = description
432
437
  end
433
438
  end
434
439
 
435
440
  class EnumValueDefinition < AbstractNode
436
- attr_accessor :name, :directives
441
+ attr_accessor :name, :directives, :description
437
442
  scalar_attributes :name
438
443
  child_attributes :directives
439
444
 
440
- def initialize_node(name:, directives: [])
445
+ def initialize_node(name:, directives: [], description: nil)
441
446
  @name = name
442
447
  @directives = directives
448
+ @description = description
443
449
  end
444
450
  end
445
451
 
446
452
  class InputObjectTypeDefinition < AbstractNode
447
- attr_accessor :name, :fields, :directives
453
+ attr_accessor :name, :fields, :directives, :description
448
454
  scalar_attributes :name
449
455
  child_attributes :fields
450
456
 
451
- def initialize_node(name:, fields:, directives: [])
457
+ def initialize_node(name:, fields:, directives: [], description: nil)
452
458
  @name = name
453
459
  @fields = fields
454
460
  @directives = directives
461
+ @description = description
455
462
  end
456
463
  end
457
464
  end