tinygql 0.1.0 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/tinygql/lexer.rb +38 -48
- data/lib/tinygql/nodes.rb +79 -79
- data/lib/tinygql/nodes.rb.erb +4 -4
- data/lib/tinygql/parser.rb +4 -3
- data/lib/tinygql/version.rb +1 -1
- data/lib/tinygql/visitors.rb +74 -74
- data/lib/tinygql/visitors.rb.erb +2 -2
- data/test/lexer_test.rb +12 -0
- data/test/parser_test.rb +21 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fbe2d05150ba3c665c9d4fe81ee632a870d4420776a7b77736d124fd7036081b
|
4
|
+
data.tar.gz: 3e3ef634a539c8345a0701c18a0d61fd158dacaca505ca17506f16e2287ed144
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9605f20a8c7fed57279b8632315b689135cac81d44bcdfe014ec72bf48cc564f0c4f1c35b02de098a3dabaf4cc5b97af90dd10a07ec6170a5bb0a84ac8597afc
|
7
|
+
data.tar.gz: 046db3a78e16f1f08c7c66cebf2a17c9e46a014e8d9e9f9f9faeb4c67aa6a74f7fab3b392e67dc9db43e6cf4b47cc784b0f9667d6caec1663ecd674a27d02210
|
data/lib/tinygql/lexer.rb
CHANGED
@@ -4,38 +4,41 @@ require "strscan"
|
|
4
4
|
|
5
5
|
module TinyGQL
|
6
6
|
class Lexer
|
7
|
-
IDENTIFIER = /[_A-Za-z][_0-9A-Za-z]
|
7
|
+
IDENTIFIER = /[_A-Za-z][_0-9A-Za-z]*\b/
|
8
8
|
IGNORE = %r{
|
9
9
|
(?:
|
10
10
|
[, \c\r\n\t]+ |
|
11
11
|
\#.*$
|
12
|
-
)
|
12
|
+
)*
|
13
13
|
}x
|
14
14
|
INT = /[-]?(?:[0]|[1-9][0-9]*)/
|
15
15
|
FLOAT_DECIMAL = /[.][0-9]+/
|
16
16
|
FLOAT_EXP = /[eE][+-]?[0-9]+/
|
17
|
-
|
17
|
+
NUMERIC = /#{INT}(#{FLOAT_DECIMAL}#{FLOAT_EXP}|#{FLOAT_DECIMAL}|#{FLOAT_EXP})?/
|
18
|
+
|
19
|
+
KEYWORDS = {
|
20
|
+
"on" => :ON,
|
21
|
+
"fragment" => :FRAGMENT,
|
22
|
+
"true" => :TRUE,
|
23
|
+
"false" => :FALSE,
|
24
|
+
"null" => :NULL,
|
25
|
+
"query" => :QUERY,
|
26
|
+
"mutation" => :MUTATION,
|
27
|
+
"subscription" => :SUBSCRIPTION,
|
28
|
+
"schema" => :SCHEMA,
|
29
|
+
"scalar" => :SCALAR,
|
30
|
+
"type" => :TYPE,
|
31
|
+
"extend" => :EXTEND,
|
32
|
+
"implements" => :IMPLEMENTS,
|
33
|
+
"interface" => :INTERFACE,
|
34
|
+
"union" => :UNION,
|
35
|
+
"enum" => :ENUM,
|
36
|
+
"input" => :INPUT,
|
37
|
+
"directive" => :DIRECTIVE,
|
38
|
+
"repeatable" => :REPEATABLE
|
39
|
+
}.freeze
|
18
40
|
|
19
41
|
module Literals
|
20
|
-
ON = /on\b/
|
21
|
-
FRAGMENT = /fragment\b/
|
22
|
-
TRUE = /true\b/
|
23
|
-
FALSE = /false\b/
|
24
|
-
NULL = /null\b/
|
25
|
-
QUERY = /query\b/
|
26
|
-
MUTATION = /mutation\b/
|
27
|
-
SUBSCRIPTION = /subscription\b/
|
28
|
-
SCHEMA = /schema\b/
|
29
|
-
SCALAR = /scalar\b/
|
30
|
-
TYPE = /type\b/
|
31
|
-
EXTEND = /extend\b/
|
32
|
-
IMPLEMENTS = /implements\b/
|
33
|
-
INTERFACE = /interface\b/
|
34
|
-
UNION = /union\b/
|
35
|
-
ENUM = /enum\b/
|
36
|
-
INPUT = /input\b/
|
37
|
-
DIRECTIVE = /directive\b/
|
38
|
-
REPEATABLE = /repeatable\b/
|
39
42
|
LCURLY = '{'
|
40
43
|
RCURLY = '}'
|
41
44
|
LPAREN = '('
|
@@ -66,9 +69,7 @@ module TinyGQL
|
|
66
69
|
STRING_CHAR = /#{ESCAPED_QUOTE}|[^"\\]|#{UNICODE_ESCAPE}|#{STRING_ESCAPE}/
|
67
70
|
|
68
71
|
LIT_NAME_LUT = Literals.constants.each_with_object({}) { |n, o|
|
69
|
-
|
70
|
-
key = key.is_a?(Regexp) ? key.source.gsub(/(\\b|\\)/, '') : key
|
71
|
-
o[key] = n
|
72
|
+
o[Literals.const_get(n)] = n
|
72
73
|
}
|
73
74
|
|
74
75
|
LIT = Regexp.union(Literals.constants.map { |n| Literals.const_get(n) })
|
@@ -86,9 +87,6 @@ module TinyGQL
|
|
86
87
|
#{BLOCK_QUOTE}
|
87
88
|
}xm
|
88
89
|
|
89
|
-
# # catch-all for anything else. must be at the bottom for precedence.
|
90
|
-
UNKNOWN_CHAR = /./
|
91
|
-
|
92
90
|
def initialize string
|
93
91
|
raise unless string.valid_encoding?
|
94
92
|
|
@@ -98,7 +96,7 @@ module TinyGQL
|
|
98
96
|
end
|
99
97
|
|
100
98
|
def line
|
101
|
-
@scan.string[0, @scan.pos].count("\n")
|
99
|
+
@scan.string[0, @scan.pos].count("\n") + 1
|
102
100
|
end
|
103
101
|
|
104
102
|
def done?
|
@@ -106,25 +104,17 @@ module TinyGQL
|
|
106
104
|
end
|
107
105
|
|
108
106
|
def advance
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
when str = @scan.scan(IDENTIFIER) then return emit(:IDENTIFIER, str)
|
121
|
-
when @scan.skip(BLOCK_STRING) then return emit_block(@scan[1])
|
122
|
-
when @scan.skip(QUOTED_STRING) then return emit_string(@scan[1])
|
123
|
-
when str = @scan.scan(UNKNOWN_CHAR) then return emit(:UNKNOWN_CHAR, str)
|
124
|
-
else
|
125
|
-
# This should never happen since `UNKNOWN_CHAR` ensures we make progress
|
126
|
-
raise "Unknown string?"
|
127
|
-
end
|
107
|
+
@scan.skip(IGNORE)
|
108
|
+
|
109
|
+
case
|
110
|
+
when str = @scan.scan(LIT) then return emit(LIT_NAME_LUT[str], str)
|
111
|
+
when str = @scan.scan(IDENTIFIER) then return emit(KEYWORDS.fetch(str, :IDENTIFIER), str)
|
112
|
+
when @scan.skip(BLOCK_STRING) then return emit_block(@scan[1])
|
113
|
+
when @scan.skip(QUOTED_STRING) then return emit_string(@scan[1])
|
114
|
+
when str = @scan.scan(NUMERIC) then return emit(@scan[1] ? :FLOAT : :INT, str)
|
115
|
+
when @scan.eos? then emit(nil, nil) and return false
|
116
|
+
else
|
117
|
+
emit(:UNKNOWN_CHAR, @scan.getch)
|
128
118
|
end
|
129
119
|
end
|
130
120
|
|
data/lib/tinygql/nodes.rb
CHANGED
@@ -3,48 +3,48 @@ module TinyGQL
|
|
3
3
|
class Node
|
4
4
|
include Enumerable
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
6
|
+
def document?; false; end
|
7
|
+
def operation_definition?; false; end
|
8
|
+
def variable?; false; end
|
9
|
+
def named_type?; false; end
|
10
|
+
def not_null_type?; false; end
|
11
|
+
def list_type?; false; end
|
12
|
+
def variable_definition?; false; end
|
13
|
+
def value?; false; end
|
14
|
+
def argument?; false; end
|
15
|
+
def field?; false; end
|
16
|
+
def object_field?; false; end
|
17
|
+
def int_value?; false; end
|
18
|
+
def float_value?; false; end
|
19
|
+
def string_value?; false; end
|
20
|
+
def boolean_value?; false; end
|
21
|
+
def null_value?; false; end
|
22
|
+
def enum_value?; false; end
|
23
|
+
def list_value?; false; end
|
24
|
+
def object_value?; false; end
|
25
|
+
def directive?; false; end
|
26
|
+
def type_condition?; false; end
|
27
|
+
def inline_fragment?; false; end
|
28
|
+
def fragment_spread?; false; end
|
29
|
+
def fragment_definition?; false; end
|
30
|
+
def root_operation_type_definition?; false; end
|
31
|
+
def schema_definition?; false; end
|
32
|
+
def field_definition?; false; end
|
33
|
+
def input_value_definition?; false; end
|
34
|
+
def object_type_definition?; false; end
|
35
|
+
def interface_type_definition?; false; end
|
36
|
+
def union_type_definition?; false; end
|
37
|
+
def scalar_type_definition?; false; end
|
38
|
+
def enum_value_definition?; false; end
|
39
|
+
def enum_type_definition?; false; end
|
40
|
+
def input_object_type_definition?; false; end
|
41
|
+
def object_type_extension?; false; end
|
42
|
+
def executable_directive_location?; false; end
|
43
|
+
def type_system_directive_location?; false; end
|
44
|
+
def directive_definition?; false; end
|
45
45
|
def each(&blk)
|
46
46
|
yield self
|
47
|
-
children.each {
|
47
|
+
children.each { |v| v.each(&blk) }
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
@@ -63,7 +63,7 @@ module TinyGQL
|
|
63
63
|
viz.handle_document self, seed
|
64
64
|
end
|
65
65
|
|
66
|
-
def document
|
66
|
+
def document?; true; end
|
67
67
|
|
68
68
|
def children
|
69
69
|
ary = []; ary.concat(definitions); ary
|
@@ -88,7 +88,7 @@ module TinyGQL
|
|
88
88
|
viz.handle_operation_definition self, seed
|
89
89
|
end
|
90
90
|
|
91
|
-
def operation_definition
|
91
|
+
def operation_definition?; true; end
|
92
92
|
|
93
93
|
def children
|
94
94
|
ary = []; ary.concat(variable_definitions) if variable_definitions; ary.concat(directives) if directives; ary.concat(selection_set); ary
|
@@ -109,7 +109,7 @@ module TinyGQL
|
|
109
109
|
viz.handle_variable self, seed
|
110
110
|
end
|
111
111
|
|
112
|
-
def variable
|
112
|
+
def variable?; true; end
|
113
113
|
|
114
114
|
def children
|
115
115
|
ary = []; ary
|
@@ -130,7 +130,7 @@ module TinyGQL
|
|
130
130
|
viz.handle_named_type self, seed
|
131
131
|
end
|
132
132
|
|
133
|
-
def named_type
|
133
|
+
def named_type?; true; end
|
134
134
|
|
135
135
|
def children
|
136
136
|
ary = []; ary
|
@@ -151,7 +151,7 @@ module TinyGQL
|
|
151
151
|
viz.handle_not_null_type self, seed
|
152
152
|
end
|
153
153
|
|
154
|
-
def not_null_type
|
154
|
+
def not_null_type?; true; end
|
155
155
|
|
156
156
|
def children
|
157
157
|
ary = []; ary << type; ary
|
@@ -172,7 +172,7 @@ module TinyGQL
|
|
172
172
|
viz.handle_list_type self, seed
|
173
173
|
end
|
174
174
|
|
175
|
-
def list_type
|
175
|
+
def list_type?; true; end
|
176
176
|
|
177
177
|
def children
|
178
178
|
ary = []; ary << type; ary
|
@@ -195,7 +195,7 @@ module TinyGQL
|
|
195
195
|
viz.handle_variable_definition self, seed
|
196
196
|
end
|
197
197
|
|
198
|
-
def variable_definition
|
198
|
+
def variable_definition?; true; end
|
199
199
|
|
200
200
|
def children
|
201
201
|
ary = []; ary << variable; ary << type; ary << default_value if default_value; ary
|
@@ -216,7 +216,7 @@ module TinyGQL
|
|
216
216
|
viz.handle_value self, seed
|
217
217
|
end
|
218
218
|
|
219
|
-
def value
|
219
|
+
def value?; true; end
|
220
220
|
|
221
221
|
def children
|
222
222
|
ary = []; ary
|
@@ -238,7 +238,7 @@ module TinyGQL
|
|
238
238
|
viz.handle_argument self, seed
|
239
239
|
end
|
240
240
|
|
241
|
-
def argument
|
241
|
+
def argument?; true; end
|
242
242
|
|
243
243
|
def children
|
244
244
|
ary = []; ary << value; ary
|
@@ -263,7 +263,7 @@ module TinyGQL
|
|
263
263
|
viz.handle_field self, seed
|
264
264
|
end
|
265
265
|
|
266
|
-
def field
|
266
|
+
def field?; true; end
|
267
267
|
|
268
268
|
def children
|
269
269
|
ary = []; ary.concat(arguments) if arguments; ary.concat(directives) if directives; ary.concat(selection_set) if selection_set; ary
|
@@ -285,7 +285,7 @@ module TinyGQL
|
|
285
285
|
viz.handle_object_field self, seed
|
286
286
|
end
|
287
287
|
|
288
|
-
def object_field
|
288
|
+
def object_field?; true; end
|
289
289
|
|
290
290
|
def children
|
291
291
|
ary = []; ary << value; ary
|
@@ -301,7 +301,7 @@ module TinyGQL
|
|
301
301
|
viz.handle_int_value self, seed
|
302
302
|
end
|
303
303
|
|
304
|
-
def int_value
|
304
|
+
def int_value?; true; end
|
305
305
|
|
306
306
|
end
|
307
307
|
class FloatValue < Value
|
@@ -314,7 +314,7 @@ module TinyGQL
|
|
314
314
|
viz.handle_float_value self, seed
|
315
315
|
end
|
316
316
|
|
317
|
-
def float_value
|
317
|
+
def float_value?; true; end
|
318
318
|
|
319
319
|
end
|
320
320
|
class StringValue < Value
|
@@ -327,7 +327,7 @@ module TinyGQL
|
|
327
327
|
viz.handle_string_value self, seed
|
328
328
|
end
|
329
329
|
|
330
|
-
def string_value
|
330
|
+
def string_value?; true; end
|
331
331
|
|
332
332
|
end
|
333
333
|
class BooleanValue < Value
|
@@ -340,7 +340,7 @@ module TinyGQL
|
|
340
340
|
viz.handle_boolean_value self, seed
|
341
341
|
end
|
342
342
|
|
343
|
-
def boolean_value
|
343
|
+
def boolean_value?; true; end
|
344
344
|
|
345
345
|
end
|
346
346
|
class NullValue < Value
|
@@ -353,7 +353,7 @@ module TinyGQL
|
|
353
353
|
viz.handle_null_value self, seed
|
354
354
|
end
|
355
355
|
|
356
|
-
def null_value
|
356
|
+
def null_value?; true; end
|
357
357
|
|
358
358
|
end
|
359
359
|
class EnumValue < Value
|
@@ -366,7 +366,7 @@ module TinyGQL
|
|
366
366
|
viz.handle_enum_value self, seed
|
367
367
|
end
|
368
368
|
|
369
|
-
def enum_value
|
369
|
+
def enum_value?; true; end
|
370
370
|
|
371
371
|
end
|
372
372
|
class ListValue < Value
|
@@ -379,7 +379,7 @@ module TinyGQL
|
|
379
379
|
viz.handle_list_value self, seed
|
380
380
|
end
|
381
381
|
|
382
|
-
def list_value
|
382
|
+
def list_value?; true; end
|
383
383
|
|
384
384
|
end
|
385
385
|
class ObjectValue < Node
|
@@ -397,7 +397,7 @@ module TinyGQL
|
|
397
397
|
viz.handle_object_value self, seed
|
398
398
|
end
|
399
399
|
|
400
|
-
def object_value
|
400
|
+
def object_value?; true; end
|
401
401
|
|
402
402
|
def children
|
403
403
|
ary = []; ary.concat(values); ary
|
@@ -419,7 +419,7 @@ module TinyGQL
|
|
419
419
|
viz.handle_directive self, seed
|
420
420
|
end
|
421
421
|
|
422
|
-
def directive
|
422
|
+
def directive?; true; end
|
423
423
|
|
424
424
|
def children
|
425
425
|
ary = []; ary.concat(arguments); ary
|
@@ -440,7 +440,7 @@ module TinyGQL
|
|
440
440
|
viz.handle_type_condition self, seed
|
441
441
|
end
|
442
442
|
|
443
|
-
def type_condition
|
443
|
+
def type_condition?; true; end
|
444
444
|
|
445
445
|
def children
|
446
446
|
ary = []; ary << named_type; ary
|
@@ -463,7 +463,7 @@ module TinyGQL
|
|
463
463
|
viz.handle_inline_fragment self, seed
|
464
464
|
end
|
465
465
|
|
466
|
-
def inline_fragment
|
466
|
+
def inline_fragment?; true; end
|
467
467
|
|
468
468
|
def children
|
469
469
|
ary = []; ary << type_condition if type_condition; ary.concat(directives) if directives; ary.concat(selection_set); ary
|
@@ -485,7 +485,7 @@ module TinyGQL
|
|
485
485
|
viz.handle_fragment_spread self, seed
|
486
486
|
end
|
487
487
|
|
488
|
-
def fragment_spread
|
488
|
+
def fragment_spread?; true; end
|
489
489
|
|
490
490
|
def children
|
491
491
|
ary = []; ary << fragment_name; ary.concat(directives) if directives; ary
|
@@ -509,7 +509,7 @@ module TinyGQL
|
|
509
509
|
viz.handle_fragment_definition self, seed
|
510
510
|
end
|
511
511
|
|
512
|
-
def fragment_definition
|
512
|
+
def fragment_definition?; true; end
|
513
513
|
|
514
514
|
def children
|
515
515
|
ary = []; ary << fragment_name; ary << type_condition; ary.concat(directives) if directives; ary.concat(selection_set); ary
|
@@ -531,7 +531,7 @@ module TinyGQL
|
|
531
531
|
viz.handle_root_operation_type_definition self, seed
|
532
532
|
end
|
533
533
|
|
534
|
-
def root_operation_type_definition
|
534
|
+
def root_operation_type_definition?; true; end
|
535
535
|
|
536
536
|
def children
|
537
537
|
ary = []; ary << operation_type; ary << named_type; ary
|
@@ -553,7 +553,7 @@ module TinyGQL
|
|
553
553
|
viz.handle_schema_definition self, seed
|
554
554
|
end
|
555
555
|
|
556
|
-
def schema_definition
|
556
|
+
def schema_definition?; true; end
|
557
557
|
|
558
558
|
def children
|
559
559
|
ary = []; ary.concat(directives) if directives; ary.concat(root_operation_definitions); ary
|
@@ -578,7 +578,7 @@ module TinyGQL
|
|
578
578
|
viz.handle_field_definition self, seed
|
579
579
|
end
|
580
580
|
|
581
|
-
def field_definition
|
581
|
+
def field_definition?; true; end
|
582
582
|
|
583
583
|
def children
|
584
584
|
ary = []; ary.concat(arguments_definition) if arguments_definition; ary << type; ary.concat(directives) if directives; ary
|
@@ -603,7 +603,7 @@ module TinyGQL
|
|
603
603
|
viz.handle_input_value_definition self, seed
|
604
604
|
end
|
605
605
|
|
606
|
-
def input_value_definition
|
606
|
+
def input_value_definition?; true; end
|
607
607
|
|
608
608
|
def children
|
609
609
|
ary = []; ary << type; ary << default_value if default_value; ary.concat(directives) if directives; ary
|
@@ -628,7 +628,7 @@ module TinyGQL
|
|
628
628
|
viz.handle_object_type_definition self, seed
|
629
629
|
end
|
630
630
|
|
631
|
-
def object_type_definition
|
631
|
+
def object_type_definition?; true; end
|
632
632
|
|
633
633
|
def children
|
634
634
|
ary = []; ary.concat(implements_interfaces) if implements_interfaces; ary.concat(directives) if directives; ary.concat(fields_definition) if fields_definition; ary
|
@@ -652,7 +652,7 @@ module TinyGQL
|
|
652
652
|
viz.handle_interface_type_definition self, seed
|
653
653
|
end
|
654
654
|
|
655
|
-
def interface_type_definition
|
655
|
+
def interface_type_definition?; true; end
|
656
656
|
|
657
657
|
def children
|
658
658
|
ary = []; ary.concat(directives) if directives; ary.concat(fields_definition) if fields_definition; ary
|
@@ -676,7 +676,7 @@ module TinyGQL
|
|
676
676
|
viz.handle_union_type_definition self, seed
|
677
677
|
end
|
678
678
|
|
679
|
-
def union_type_definition
|
679
|
+
def union_type_definition?; true; end
|
680
680
|
|
681
681
|
def children
|
682
682
|
ary = []; ary.concat(directives) if directives; ary.concat(union_member_types) if union_member_types; ary
|
@@ -699,7 +699,7 @@ module TinyGQL
|
|
699
699
|
viz.handle_scalar_type_definition self, seed
|
700
700
|
end
|
701
701
|
|
702
|
-
def scalar_type_definition
|
702
|
+
def scalar_type_definition?; true; end
|
703
703
|
|
704
704
|
def children
|
705
705
|
ary = []; ary.concat(directives) if directives; ary
|
@@ -722,7 +722,7 @@ module TinyGQL
|
|
722
722
|
viz.handle_enum_value_definition self, seed
|
723
723
|
end
|
724
724
|
|
725
|
-
def enum_value_definition
|
725
|
+
def enum_value_definition?; true; end
|
726
726
|
|
727
727
|
def children
|
728
728
|
ary = []; ary << enum_value; ary.concat(directives) if directives; ary
|
@@ -746,7 +746,7 @@ module TinyGQL
|
|
746
746
|
viz.handle_enum_type_definition self, seed
|
747
747
|
end
|
748
748
|
|
749
|
-
def enum_type_definition
|
749
|
+
def enum_type_definition?; true; end
|
750
750
|
|
751
751
|
def children
|
752
752
|
ary = []; ary.concat(directives) if directives; ary.concat(enum_value_definition) if enum_value_definition; ary
|
@@ -770,7 +770,7 @@ module TinyGQL
|
|
770
770
|
viz.handle_input_object_type_definition self, seed
|
771
771
|
end
|
772
772
|
|
773
|
-
def input_object_type_definition
|
773
|
+
def input_object_type_definition?; true; end
|
774
774
|
|
775
775
|
def children
|
776
776
|
ary = []; ary.concat(directives) if directives; ary.concat(input_fields_definition) if input_fields_definition; ary
|
@@ -794,7 +794,7 @@ module TinyGQL
|
|
794
794
|
viz.handle_object_type_extension self, seed
|
795
795
|
end
|
796
796
|
|
797
|
-
def object_type_extension
|
797
|
+
def object_type_extension?; true; end
|
798
798
|
|
799
799
|
def children
|
800
800
|
ary = []; ary.concat(implements_interfaces) if implements_interfaces; ary.concat(directives) if directives; ary.concat(fields_definition) if fields_definition; ary
|
@@ -815,7 +815,7 @@ module TinyGQL
|
|
815
815
|
viz.handle_executable_directive_location self, seed
|
816
816
|
end
|
817
817
|
|
818
|
-
def executable_directive_location
|
818
|
+
def executable_directive_location?; true; end
|
819
819
|
|
820
820
|
def children
|
821
821
|
ary = []; ary
|
@@ -836,7 +836,7 @@ module TinyGQL
|
|
836
836
|
viz.handle_type_system_directive_location self, seed
|
837
837
|
end
|
838
838
|
|
839
|
-
def type_system_directive_location
|
839
|
+
def type_system_directive_location?; true; end
|
840
840
|
|
841
841
|
def children
|
842
842
|
ary = []; ary
|
@@ -860,7 +860,7 @@ module TinyGQL
|
|
860
860
|
viz.handle_directive_definition self, seed
|
861
861
|
end
|
862
862
|
|
863
|
-
def directive_definition
|
863
|
+
def directive_definition?; true; end
|
864
864
|
|
865
865
|
def children
|
866
866
|
ary = []; ary.concat(arguments_definition) if arguments_definition; ary.concat(directive_locations); ary
|
data/lib/tinygql/nodes.rb.erb
CHANGED
@@ -4,18 +4,18 @@ module TinyGQL
|
|
4
4
|
include Enumerable
|
5
5
|
|
6
6
|
<%- nodes.each do |node| -%>
|
7
|
-
|
7
|
+
def <%= node.human_name %>?; false; end
|
8
8
|
<%- end -%>
|
9
9
|
def each(&blk)
|
10
10
|
yield self
|
11
|
-
children.each {
|
11
|
+
children.each { |v| v.each(&blk) }
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
<%- nodes.each do |node| -%>
|
16
16
|
class <%= node.name %> < <%= node.parent ? node.parent : "Node" %>
|
17
17
|
<%- if node.fields.any? -%>
|
18
|
-
attr_reader <%= node.fields.map { ":" +
|
18
|
+
attr_reader <%= node.fields.map { |v| ":" + v.name }.join(", ") %>
|
19
19
|
|
20
20
|
def initialize <%= node.fields.map(&:name).join(", ") %>
|
21
21
|
<%- node.fields.each do |field| -%>
|
@@ -32,7 +32,7 @@ module TinyGQL
|
|
32
32
|
viz.handle_<%= node.human_name %> self, seed
|
33
33
|
end
|
34
34
|
|
35
|
-
def <%= node.human_name
|
35
|
+
def <%= node.human_name %>?; true; end
|
36
36
|
|
37
37
|
<%- if node.has_children? -%>
|
38
38
|
def children
|
data/lib/tinygql/parser.rb
CHANGED
@@ -254,8 +254,9 @@ module TinyGQL
|
|
254
254
|
def implements_interfaces
|
255
255
|
expect_token :IMPLEMENTS
|
256
256
|
list = [self.named_type]
|
257
|
-
while
|
258
|
-
accept_token
|
257
|
+
while true
|
258
|
+
accept_token if at?(:AMP)
|
259
|
+
break unless at?(:IDENTIFIER)
|
259
260
|
list << self.named_type
|
260
261
|
end
|
261
262
|
list
|
@@ -570,7 +571,7 @@ module TinyGQL
|
|
570
571
|
|
571
572
|
def expect_token tok
|
572
573
|
unless at?(tok)
|
573
|
-
raise UnexpectedToken, "Expected token #{tok}, actual: #{token_name} line: #{@lexer.line}"
|
574
|
+
raise UnexpectedToken, "Expected token #{tok}, actual: #{token_name} #{@lexer.token_value} line: #{@lexer.line}"
|
574
575
|
end
|
575
576
|
accept_token
|
576
577
|
end
|
data/lib/tinygql/version.rb
CHANGED
data/lib/tinygql/visitors.rb
CHANGED
@@ -2,16 +2,16 @@ module TinyGQL
|
|
2
2
|
module Visitors
|
3
3
|
module Visitor
|
4
4
|
def handle_document obj
|
5
|
-
obj.definitions.each {
|
5
|
+
obj.definitions.each { |v| v.accept self }
|
6
6
|
end
|
7
7
|
def handle_operation_definition obj
|
8
8
|
if obj.variable_definitions
|
9
|
-
obj.variable_definitions.each {
|
9
|
+
obj.variable_definitions.each { |v| v.accept self }
|
10
10
|
end
|
11
11
|
if obj.directives
|
12
|
-
obj.directives.each {
|
12
|
+
obj.directives.each { |v| v.accept self }
|
13
13
|
end
|
14
|
-
obj.selection_set.each {
|
14
|
+
obj.selection_set.each { |v| v.accept self }
|
15
15
|
end
|
16
16
|
def handle_variable obj
|
17
17
|
end
|
@@ -37,13 +37,13 @@ module TinyGQL
|
|
37
37
|
end
|
38
38
|
def handle_field obj
|
39
39
|
if obj.arguments
|
40
|
-
obj.arguments.each {
|
40
|
+
obj.arguments.each { |v| v.accept self }
|
41
41
|
end
|
42
42
|
if obj.directives
|
43
|
-
obj.directives.each {
|
43
|
+
obj.directives.each { |v| v.accept self }
|
44
44
|
end
|
45
45
|
if obj.selection_set
|
46
|
-
obj.selection_set.each {
|
46
|
+
obj.selection_set.each { |v| v.accept self }
|
47
47
|
end
|
48
48
|
end
|
49
49
|
def handle_object_field obj
|
@@ -64,10 +64,10 @@ module TinyGQL
|
|
64
64
|
def handle_list_value obj
|
65
65
|
end
|
66
66
|
def handle_object_value obj
|
67
|
-
obj.values.each {
|
67
|
+
obj.values.each { |v| v.accept self }
|
68
68
|
end
|
69
69
|
def handle_directive obj
|
70
|
-
obj.arguments.each {
|
70
|
+
obj.arguments.each { |v| v.accept self }
|
71
71
|
end
|
72
72
|
def handle_type_condition obj
|
73
73
|
obj.named_type.accept self
|
@@ -77,23 +77,23 @@ module TinyGQL
|
|
77
77
|
obj.type_condition.accept self
|
78
78
|
end
|
79
79
|
if obj.directives
|
80
|
-
obj.directives.each {
|
80
|
+
obj.directives.each { |v| v.accept self }
|
81
81
|
end
|
82
|
-
obj.selection_set.each {
|
82
|
+
obj.selection_set.each { |v| v.accept self }
|
83
83
|
end
|
84
84
|
def handle_fragment_spread obj
|
85
85
|
obj.fragment_name.accept self
|
86
86
|
if obj.directives
|
87
|
-
obj.directives.each {
|
87
|
+
obj.directives.each { |v| v.accept self }
|
88
88
|
end
|
89
89
|
end
|
90
90
|
def handle_fragment_definition obj
|
91
91
|
obj.fragment_name.accept self
|
92
92
|
obj.type_condition.accept self
|
93
93
|
if obj.directives
|
94
|
-
obj.directives.each {
|
94
|
+
obj.directives.each { |v| v.accept self }
|
95
95
|
end
|
96
|
-
obj.selection_set.each {
|
96
|
+
obj.selection_set.each { |v| v.accept self }
|
97
97
|
end
|
98
98
|
def handle_root_operation_type_definition obj
|
99
99
|
obj.operation_type.accept self
|
@@ -101,17 +101,17 @@ module TinyGQL
|
|
101
101
|
end
|
102
102
|
def handle_schema_definition obj
|
103
103
|
if obj.directives
|
104
|
-
obj.directives.each {
|
104
|
+
obj.directives.each { |v| v.accept self }
|
105
105
|
end
|
106
|
-
obj.root_operation_definitions.each {
|
106
|
+
obj.root_operation_definitions.each { |v| v.accept self }
|
107
107
|
end
|
108
108
|
def handle_field_definition obj
|
109
109
|
if obj.arguments_definition
|
110
|
-
obj.arguments_definition.each {
|
110
|
+
obj.arguments_definition.each { |v| v.accept self }
|
111
111
|
end
|
112
112
|
obj.type.accept self
|
113
113
|
if obj.directives
|
114
|
-
obj.directives.each {
|
114
|
+
obj.directives.each { |v| v.accept self }
|
115
115
|
end
|
116
116
|
end
|
117
117
|
def handle_input_value_definition obj
|
@@ -120,72 +120,72 @@ module TinyGQL
|
|
120
120
|
obj.default_value.accept self
|
121
121
|
end
|
122
122
|
if obj.directives
|
123
|
-
obj.directives.each {
|
123
|
+
obj.directives.each { |v| v.accept self }
|
124
124
|
end
|
125
125
|
end
|
126
126
|
def handle_object_type_definition obj
|
127
127
|
if obj.implements_interfaces
|
128
|
-
obj.implements_interfaces.each {
|
128
|
+
obj.implements_interfaces.each { |v| v.accept self }
|
129
129
|
end
|
130
130
|
if obj.directives
|
131
|
-
obj.directives.each {
|
131
|
+
obj.directives.each { |v| v.accept self }
|
132
132
|
end
|
133
133
|
if obj.fields_definition
|
134
|
-
obj.fields_definition.each {
|
134
|
+
obj.fields_definition.each { |v| v.accept self }
|
135
135
|
end
|
136
136
|
end
|
137
137
|
def handle_interface_type_definition obj
|
138
138
|
if obj.directives
|
139
|
-
obj.directives.each {
|
139
|
+
obj.directives.each { |v| v.accept self }
|
140
140
|
end
|
141
141
|
if obj.fields_definition
|
142
|
-
obj.fields_definition.each {
|
142
|
+
obj.fields_definition.each { |v| v.accept self }
|
143
143
|
end
|
144
144
|
end
|
145
145
|
def handle_union_type_definition obj
|
146
146
|
if obj.directives
|
147
|
-
obj.directives.each {
|
147
|
+
obj.directives.each { |v| v.accept self }
|
148
148
|
end
|
149
149
|
if obj.union_member_types
|
150
|
-
obj.union_member_types.each {
|
150
|
+
obj.union_member_types.each { |v| v.accept self }
|
151
151
|
end
|
152
152
|
end
|
153
153
|
def handle_scalar_type_definition obj
|
154
154
|
if obj.directives
|
155
|
-
obj.directives.each {
|
155
|
+
obj.directives.each { |v| v.accept self }
|
156
156
|
end
|
157
157
|
end
|
158
158
|
def handle_enum_value_definition obj
|
159
159
|
obj.enum_value.accept self
|
160
160
|
if obj.directives
|
161
|
-
obj.directives.each {
|
161
|
+
obj.directives.each { |v| v.accept self }
|
162
162
|
end
|
163
163
|
end
|
164
164
|
def handle_enum_type_definition obj
|
165
165
|
if obj.directives
|
166
|
-
obj.directives.each {
|
166
|
+
obj.directives.each { |v| v.accept self }
|
167
167
|
end
|
168
168
|
if obj.enum_value_definition
|
169
|
-
obj.enum_value_definition.each {
|
169
|
+
obj.enum_value_definition.each { |v| v.accept self }
|
170
170
|
end
|
171
171
|
end
|
172
172
|
def handle_input_object_type_definition obj
|
173
173
|
if obj.directives
|
174
|
-
obj.directives.each {
|
174
|
+
obj.directives.each { |v| v.accept self }
|
175
175
|
end
|
176
176
|
if obj.input_fields_definition
|
177
|
-
obj.input_fields_definition.each {
|
177
|
+
obj.input_fields_definition.each { |v| v.accept self }
|
178
178
|
end
|
179
179
|
end
|
180
180
|
def handle_object_type_extension obj
|
181
181
|
if obj.implements_interfaces
|
182
|
-
obj.implements_interfaces.each {
|
182
|
+
obj.implements_interfaces.each { |v| v.accept self }
|
183
183
|
end
|
184
184
|
if obj.directives
|
185
|
-
obj.directives.each {
|
185
|
+
obj.directives.each { |v| v.accept self }
|
186
186
|
end
|
187
187
|
if obj.fields_definition
|
188
|
-
obj.fields_definition.each {
|
188
|
+
obj.fields_definition.each { |v| v.accept self }
|
189
189
|
end
|
190
190
|
end
|
191
191
|
def handle_executable_directive_location obj
|
@@ -194,25 +194,25 @@ module TinyGQL
|
|
194
194
|
end
|
195
195
|
def handle_directive_definition obj
|
196
196
|
if obj.arguments_definition
|
197
|
-
obj.arguments_definition.each {
|
197
|
+
obj.arguments_definition.each { |v| v.accept self }
|
198
198
|
end
|
199
|
-
obj.directive_locations.each {
|
199
|
+
obj.directive_locations.each { |v| v.accept self }
|
200
200
|
end
|
201
201
|
end
|
202
202
|
|
203
203
|
module Fold
|
204
204
|
def handle_document obj, seed
|
205
|
-
obj.definitions.each { seed =
|
205
|
+
obj.definitions.each { |v| seed = v.fold(self, seed) }
|
206
206
|
seed
|
207
207
|
end
|
208
208
|
def handle_operation_definition obj, seed
|
209
209
|
if obj.variable_definitions
|
210
|
-
obj.variable_definitions.each { seed =
|
210
|
+
obj.variable_definitions.each { |v| seed = v.fold(self, seed) }
|
211
211
|
end
|
212
212
|
if obj.directives
|
213
|
-
obj.directives.each { seed =
|
213
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
214
214
|
end
|
215
|
-
obj.selection_set.each { seed =
|
215
|
+
obj.selection_set.each { |v| seed = v.fold(self, seed) }
|
216
216
|
seed
|
217
217
|
end
|
218
218
|
def handle_variable obj, seed
|
@@ -246,13 +246,13 @@ module TinyGQL
|
|
246
246
|
end
|
247
247
|
def handle_field obj, seed
|
248
248
|
if obj.arguments
|
249
|
-
obj.arguments.each { seed =
|
249
|
+
obj.arguments.each { |v| seed = v.fold(self, seed) }
|
250
250
|
end
|
251
251
|
if obj.directives
|
252
|
-
obj.directives.each { seed =
|
252
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
253
253
|
end
|
254
254
|
if obj.selection_set
|
255
|
-
obj.selection_set.each { seed =
|
255
|
+
obj.selection_set.each { |v| seed = v.fold(self, seed) }
|
256
256
|
end
|
257
257
|
seed
|
258
258
|
end
|
@@ -282,11 +282,11 @@ module TinyGQL
|
|
282
282
|
seed
|
283
283
|
end
|
284
284
|
def handle_object_value obj, seed
|
285
|
-
obj.values.each { seed =
|
285
|
+
obj.values.each { |v| seed = v.fold(self, seed) }
|
286
286
|
seed
|
287
287
|
end
|
288
288
|
def handle_directive obj, seed
|
289
|
-
obj.arguments.each { seed =
|
289
|
+
obj.arguments.each { |v| seed = v.fold(self, seed) }
|
290
290
|
seed
|
291
291
|
end
|
292
292
|
def handle_type_condition obj, seed
|
@@ -298,15 +298,15 @@ module TinyGQL
|
|
298
298
|
seed = obj.type_condition.fold self, seed
|
299
299
|
end
|
300
300
|
if obj.directives
|
301
|
-
obj.directives.each { seed =
|
301
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
302
302
|
end
|
303
|
-
obj.selection_set.each { seed =
|
303
|
+
obj.selection_set.each { |v| seed = v.fold(self, seed) }
|
304
304
|
seed
|
305
305
|
end
|
306
306
|
def handle_fragment_spread obj, seed
|
307
307
|
seed = obj.fragment_name.fold self, seed
|
308
308
|
if obj.directives
|
309
|
-
obj.directives.each { seed =
|
309
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
310
310
|
end
|
311
311
|
seed
|
312
312
|
end
|
@@ -314,9 +314,9 @@ module TinyGQL
|
|
314
314
|
seed = obj.fragment_name.fold self, seed
|
315
315
|
seed = obj.type_condition.fold self, seed
|
316
316
|
if obj.directives
|
317
|
-
obj.directives.each { seed =
|
317
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
318
318
|
end
|
319
|
-
obj.selection_set.each { seed =
|
319
|
+
obj.selection_set.each { |v| seed = v.fold(self, seed) }
|
320
320
|
seed
|
321
321
|
end
|
322
322
|
def handle_root_operation_type_definition obj, seed
|
@@ -326,18 +326,18 @@ module TinyGQL
|
|
326
326
|
end
|
327
327
|
def handle_schema_definition obj, seed
|
328
328
|
if obj.directives
|
329
|
-
obj.directives.each { seed =
|
329
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
330
330
|
end
|
331
|
-
obj.root_operation_definitions.each { seed =
|
331
|
+
obj.root_operation_definitions.each { |v| seed = v.fold(self, seed) }
|
332
332
|
seed
|
333
333
|
end
|
334
334
|
def handle_field_definition obj, seed
|
335
335
|
if obj.arguments_definition
|
336
|
-
obj.arguments_definition.each { seed =
|
336
|
+
obj.arguments_definition.each { |v| seed = v.fold(self, seed) }
|
337
337
|
end
|
338
338
|
seed = obj.type.fold self, seed
|
339
339
|
if obj.directives
|
340
|
-
obj.directives.each { seed =
|
340
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
341
341
|
end
|
342
342
|
seed
|
343
343
|
end
|
@@ -347,80 +347,80 @@ module TinyGQL
|
|
347
347
|
seed = obj.default_value.fold self, seed
|
348
348
|
end
|
349
349
|
if obj.directives
|
350
|
-
obj.directives.each { seed =
|
350
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
351
351
|
end
|
352
352
|
seed
|
353
353
|
end
|
354
354
|
def handle_object_type_definition obj, seed
|
355
355
|
if obj.implements_interfaces
|
356
|
-
obj.implements_interfaces.each { seed =
|
356
|
+
obj.implements_interfaces.each { |v| seed = v.fold(self, seed) }
|
357
357
|
end
|
358
358
|
if obj.directives
|
359
|
-
obj.directives.each { seed =
|
359
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
360
360
|
end
|
361
361
|
if obj.fields_definition
|
362
|
-
obj.fields_definition.each { seed =
|
362
|
+
obj.fields_definition.each { |v| seed = v.fold(self, seed) }
|
363
363
|
end
|
364
364
|
seed
|
365
365
|
end
|
366
366
|
def handle_interface_type_definition obj, seed
|
367
367
|
if obj.directives
|
368
|
-
obj.directives.each { seed =
|
368
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
369
369
|
end
|
370
370
|
if obj.fields_definition
|
371
|
-
obj.fields_definition.each { seed =
|
371
|
+
obj.fields_definition.each { |v| seed = v.fold(self, seed) }
|
372
372
|
end
|
373
373
|
seed
|
374
374
|
end
|
375
375
|
def handle_union_type_definition obj, seed
|
376
376
|
if obj.directives
|
377
|
-
obj.directives.each { seed =
|
377
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
378
378
|
end
|
379
379
|
if obj.union_member_types
|
380
|
-
obj.union_member_types.each { seed =
|
380
|
+
obj.union_member_types.each { |v| seed = v.fold(self, seed) }
|
381
381
|
end
|
382
382
|
seed
|
383
383
|
end
|
384
384
|
def handle_scalar_type_definition obj, seed
|
385
385
|
if obj.directives
|
386
|
-
obj.directives.each { seed =
|
386
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
387
387
|
end
|
388
388
|
seed
|
389
389
|
end
|
390
390
|
def handle_enum_value_definition obj, seed
|
391
391
|
seed = obj.enum_value.fold self, seed
|
392
392
|
if obj.directives
|
393
|
-
obj.directives.each { seed =
|
393
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
394
394
|
end
|
395
395
|
seed
|
396
396
|
end
|
397
397
|
def handle_enum_type_definition obj, seed
|
398
398
|
if obj.directives
|
399
|
-
obj.directives.each { seed =
|
399
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
400
400
|
end
|
401
401
|
if obj.enum_value_definition
|
402
|
-
obj.enum_value_definition.each { seed =
|
402
|
+
obj.enum_value_definition.each { |v| seed = v.fold(self, seed) }
|
403
403
|
end
|
404
404
|
seed
|
405
405
|
end
|
406
406
|
def handle_input_object_type_definition obj, seed
|
407
407
|
if obj.directives
|
408
|
-
obj.directives.each { seed =
|
408
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
409
409
|
end
|
410
410
|
if obj.input_fields_definition
|
411
|
-
obj.input_fields_definition.each { seed =
|
411
|
+
obj.input_fields_definition.each { |v| seed = v.fold(self, seed) }
|
412
412
|
end
|
413
413
|
seed
|
414
414
|
end
|
415
415
|
def handle_object_type_extension obj, seed
|
416
416
|
if obj.implements_interfaces
|
417
|
-
obj.implements_interfaces.each { seed =
|
417
|
+
obj.implements_interfaces.each { |v| seed = v.fold(self, seed) }
|
418
418
|
end
|
419
419
|
if obj.directives
|
420
|
-
obj.directives.each { seed =
|
420
|
+
obj.directives.each { |v| seed = v.fold(self, seed) }
|
421
421
|
end
|
422
422
|
if obj.fields_definition
|
423
|
-
obj.fields_definition.each { seed =
|
423
|
+
obj.fields_definition.each { |v| seed = v.fold(self, seed) }
|
424
424
|
end
|
425
425
|
seed
|
426
426
|
end
|
@@ -432,9 +432,9 @@ module TinyGQL
|
|
432
432
|
end
|
433
433
|
def handle_directive_definition obj, seed
|
434
434
|
if obj.arguments_definition
|
435
|
-
obj.arguments_definition.each { seed =
|
435
|
+
obj.arguments_definition.each { |v| seed = v.fold(self, seed) }
|
436
436
|
end
|
437
|
-
obj.directive_locations.each { seed =
|
437
|
+
obj.directive_locations.each { |v| seed = v.fold(self, seed) }
|
438
438
|
seed
|
439
439
|
end
|
440
440
|
end
|
data/lib/tinygql/visitors.rb.erb
CHANGED
@@ -8,7 +8,7 @@ module TinyGQL
|
|
8
8
|
if obj.<%= field.name %>
|
9
9
|
<%- end -%>
|
10
10
|
<%- if field.list? -%>
|
11
|
-
obj.<%= field.name %>.each {
|
11
|
+
obj.<%= field.name %>.each { |v| v.accept self }
|
12
12
|
<%- end -%>
|
13
13
|
<%- if field.node? -%>
|
14
14
|
obj.<%= field.name %>.accept self
|
@@ -29,7 +29,7 @@ module TinyGQL
|
|
29
29
|
if obj.<%= field.name %>
|
30
30
|
<%- end -%>
|
31
31
|
<%- if field.list? -%>
|
32
|
-
obj.<%= field.name %>.each { seed =
|
32
|
+
obj.<%= field.name %>.each { |v| seed = v.fold(self, seed) }
|
33
33
|
<%- end -%>
|
34
34
|
<%- if field.node? -%>
|
35
35
|
seed = obj.<%= field.name %>.fold self, seed
|
data/test/lexer_test.rb
CHANGED
@@ -40,6 +40,18 @@ module TinyGQL
|
|
40
40
|
assert_equal [:IDENTIFIER, "lol"], lexer.next_token
|
41
41
|
end
|
42
42
|
|
43
|
+
def test_int
|
44
|
+
str = "1"
|
45
|
+
lexer = Lexer.new str
|
46
|
+
assert_equal [:INT, "1"], lexer.next_token
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_float
|
50
|
+
str = "1.2"
|
51
|
+
lexer = Lexer.new str
|
52
|
+
assert_equal [:FLOAT, "1.2"], lexer.next_token
|
53
|
+
end
|
54
|
+
|
43
55
|
def test_block_string
|
44
56
|
doc = <<-eos
|
45
57
|
"""
|
data/test/parser_test.rb
CHANGED
@@ -140,5 +140,26 @@ eod
|
|
140
140
|
assert_equal "a", node.aliaz
|
141
141
|
assert_equal 1, node.arguments.length
|
142
142
|
end
|
143
|
+
|
144
|
+
def test_multiple_implements
|
145
|
+
doc = <<-eod
|
146
|
+
type SomeType implements a, b, c {
|
147
|
+
}
|
148
|
+
eod
|
149
|
+
parser = Parser.new doc
|
150
|
+
ast = parser.parse
|
151
|
+
node = ast.find(&:object_type_definition?).first
|
152
|
+
assert_equal ["a", "b", "c"], node.implements_interfaces.map(&:name)
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_multiple_implements_no_end
|
156
|
+
doc = <<-eod
|
157
|
+
type SomeType implements a, b, c
|
158
|
+
eod
|
159
|
+
parser = Parser.new doc
|
160
|
+
ast = parser.parse
|
161
|
+
node = ast.find(&:object_type_definition?).first
|
162
|
+
assert_equal ["a", "b", "c"], node.implements_interfaces.map(&:name)
|
163
|
+
end
|
143
164
|
end
|
144
165
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tinygql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-08-
|
11
|
+
date: 2023-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|