Skip to content

Commit 7e3711d

Browse files
committed
Add support for extend scalar to parser
1 parent 53af6cb commit 7e3711d

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

lib/graphql/compatibility/schema_parser_specification.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,23 @@ def test_it_parses_schema_extensions_with_only_directives
246246
assert_equal nil, schema_extension.subscription
247247
end
248248

249+
def test_it_parses_scalar_extensions
250+
document = parse('
251+
extend scalar Date @something @somethingElse
252+
')
253+
254+
scalar_extension = document.definitions.first
255+
assert_equal GraphQL::Language::Nodes::ScalarTypeExtension, scalar_extension.class
256+
assert_equal 'Date', scalar_extension.name
257+
assert_equal [2, 15], scalar_extension.position
258+
259+
assert_equal 2, scalar_extension.directives.length
260+
assert_equal GraphQL::Language::Nodes::Directive, scalar_extension.directives.first.class
261+
assert_equal 'something', scalar_extension.directives.first.name
262+
assert_equal GraphQL::Language::Nodes::Directive, scalar_extension.directives.last.class
263+
assert_equal 'somethingElse', scalar_extension.directives.last.name
264+
end
265+
249266
def test_it_parses_whole_definition_with_descriptions
250267
document = parse(SCHEMA_DEFINITION_STRING)
251268

lib/graphql/language/nodes.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,16 @@ def initialize_node(name:, directives: [], description: nil)
418418
end
419419
end
420420

421+
class ScalarTypeExtension < AbstractNode
422+
attr_accessor :name, :directives
423+
alias :children :directives
424+
425+
def initialize_node(name:, directives:)
426+
@name = name
427+
@directives = directives
428+
end
429+
end
430+
421431
class ObjectTypeDefinition < AbstractNode
422432
include Scalars::Name
423433

lib/graphql/language/parser.y

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,11 +299,17 @@ rule
299299

300300
type_system_extension:
301301
schema_extension
302+
| type_extension
302303

303304
schema_extension:
304305
EXTEND SCHEMA directives_list_opt LCURLY operation_type_definition_list RCURLY { return make_node(:SchemaExtension, position_source: val[0], directives: val[2], **val[4]) }
305306
| EXTEND SCHEMA directives_list { return make_node(:SchemaExtension, position_source: val[0], directives: val[2]) }
306307

308+
type_extension:
309+
scalar_type_extension
310+
311+
scalar_type_extension: EXTEND SCALAR name directives_list { return make_node(:ScalarTypeExtension, name: val[2], directives: val[3], position_source: val[0]) }
312+
307313
scalar_type_definition: SCALAR name directives_list_opt { return make_node(:ScalarTypeDefinition, name: val[1], directives: val[2], description: get_description(val[0]), position_source: val[0]) }
308314

309315
object_type_definition:

0 commit comments

Comments
 (0)