tinygql 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/tinygql/nodes.rb +135 -15
- data/lib/tinygql/nodes.yml +34 -4
- data/lib/tinygql/parser.rb +53 -8
- data/lib/tinygql/version.rb +1 -1
- data/lib/tinygql/visitors.rb +261 -304
- data/lib/tinygql/visitors.rb.erb +8 -20
- data/test/parser_test.rb +51 -0
- data/test/schema-extensions.graphql +48 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef7a07443c070f78f1ad6324890611e1ea70298c7d67eac591911c208b42aa0f
|
4
|
+
data.tar.gz: 3311b13953c075059a737b46f82f50aa3fd2428d844499c64354a285aa2774cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 814659e285e05236a4861931cf548eabab4abeaccdbc5b959adc12e3a3e6f6b9a67ea5626117ae44f46a9316c8d3210adafbf269730aec23b8c9d5ac0a538832
|
7
|
+
data.tar.gz: 3603440c4c6aa2aed7c361439299b8218b2f01a2c5ea96ed100da5028ac6fe391d62322a4431124861db7de50c60c69fd50d3da92178c12ef04dd58fbe63e2d3
|
data/lib/tinygql/nodes.rb
CHANGED
@@ -42,6 +42,11 @@ module TinyGQL
|
|
42
42
|
def executable_directive_location?; false; end
|
43
43
|
def type_system_directive_location?; false; end
|
44
44
|
def directive_definition?; false; end
|
45
|
+
def scalar_type_extension?; false; end
|
46
|
+
def interface_type_extension?; false; end
|
47
|
+
def union_type_extension?; false; end
|
48
|
+
def enum_type_extension?; false; end
|
49
|
+
def input_object_type_extension?; false; end
|
45
50
|
def each(&blk)
|
46
51
|
yield self
|
47
52
|
children.each { |v| v.each(&blk) }
|
@@ -422,7 +427,7 @@ module TinyGQL
|
|
422
427
|
def directive?; true; end
|
423
428
|
|
424
429
|
def children
|
425
|
-
ary = []; ary.concat(arguments); ary
|
430
|
+
ary = []; ary.concat(arguments) if arguments; ary
|
426
431
|
end
|
427
432
|
end
|
428
433
|
class TypeCondition < Node
|
@@ -488,7 +493,7 @@ module TinyGQL
|
|
488
493
|
def fragment_spread?; true; end
|
489
494
|
|
490
495
|
def children
|
491
|
-
ary = []; ary
|
496
|
+
ary = []; ary.concat(directives) if directives; ary
|
492
497
|
end
|
493
498
|
end
|
494
499
|
class FragmentDefinition < Node
|
@@ -512,7 +517,7 @@ module TinyGQL
|
|
512
517
|
def fragment_definition?; true; end
|
513
518
|
|
514
519
|
def children
|
515
|
-
ary = []; ary <<
|
520
|
+
ary = []; ary << type_condition; ary.concat(directives) if directives; ary.concat(selection_set); ary
|
516
521
|
end
|
517
522
|
end
|
518
523
|
class RootOperationTypeDefinition < Node
|
@@ -534,7 +539,7 @@ module TinyGQL
|
|
534
539
|
def root_operation_type_definition?; true; end
|
535
540
|
|
536
541
|
def children
|
537
|
-
ary = []; ary <<
|
542
|
+
ary = []; ary << named_type; ary
|
538
543
|
end
|
539
544
|
end
|
540
545
|
class SchemaDefinition < Node
|
@@ -557,7 +562,7 @@ module TinyGQL
|
|
557
562
|
def schema_definition?; true; end
|
558
563
|
|
559
564
|
def children
|
560
|
-
ary = []; ary.concat(directives) if directives; ary.concat(root_operation_definitions); ary
|
565
|
+
ary = []; ary << description if description; ary.concat(directives) if directives; ary.concat(root_operation_definitions); ary
|
561
566
|
end
|
562
567
|
end
|
563
568
|
class FieldDefinition < Node
|
@@ -582,7 +587,7 @@ module TinyGQL
|
|
582
587
|
def field_definition?; true; end
|
583
588
|
|
584
589
|
def children
|
585
|
-
ary = []; ary.concat(arguments_definition) if arguments_definition; ary << type; ary.concat(directives) if directives; ary
|
590
|
+
ary = []; ary << description if description; ary.concat(arguments_definition) if arguments_definition; ary << type; ary.concat(directives) if directives; ary
|
586
591
|
end
|
587
592
|
end
|
588
593
|
class InputValueDefinition < Node
|
@@ -607,7 +612,7 @@ module TinyGQL
|
|
607
612
|
def input_value_definition?; true; end
|
608
613
|
|
609
614
|
def children
|
610
|
-
ary = []; ary << type; ary << default_value if default_value; ary.concat(directives) if directives; ary
|
615
|
+
ary = []; ary << description if description; ary << type; ary << default_value if default_value; ary.concat(directives) if directives; ary
|
611
616
|
end
|
612
617
|
end
|
613
618
|
class ObjectTypeDefinition < Node
|
@@ -632,7 +637,7 @@ module TinyGQL
|
|
632
637
|
def object_type_definition?; true; end
|
633
638
|
|
634
639
|
def children
|
635
|
-
ary = []; ary.concat(implements_interfaces) if implements_interfaces; ary.concat(directives) if directives; ary.concat(fields_definition) if fields_definition; ary
|
640
|
+
ary = []; ary << description if description; ary.concat(implements_interfaces) if implements_interfaces; ary.concat(directives) if directives; ary.concat(fields_definition) if fields_definition; ary
|
636
641
|
end
|
637
642
|
end
|
638
643
|
class InterfaceTypeDefinition < Node
|
@@ -656,7 +661,7 @@ module TinyGQL
|
|
656
661
|
def interface_type_definition?; true; end
|
657
662
|
|
658
663
|
def children
|
659
|
-
ary = []; ary.concat(directives) if directives; ary.concat(fields_definition) if fields_definition; ary
|
664
|
+
ary = []; ary << description if description; ary.concat(directives) if directives; ary.concat(fields_definition) if fields_definition; ary
|
660
665
|
end
|
661
666
|
end
|
662
667
|
class UnionTypeDefinition < Node
|
@@ -680,7 +685,7 @@ module TinyGQL
|
|
680
685
|
def union_type_definition?; true; end
|
681
686
|
|
682
687
|
def children
|
683
|
-
ary = []; ary.concat(directives) if directives; ary.concat(union_member_types) if union_member_types; ary
|
688
|
+
ary = []; ary << description if description; ary.concat(directives) if directives; ary.concat(union_member_types) if union_member_types; ary
|
684
689
|
end
|
685
690
|
end
|
686
691
|
class ScalarTypeDefinition < Node
|
@@ -703,7 +708,7 @@ module TinyGQL
|
|
703
708
|
def scalar_type_definition?; true; end
|
704
709
|
|
705
710
|
def children
|
706
|
-
ary = []; ary.concat(directives) if directives; ary
|
711
|
+
ary = []; ary << description if description; ary.concat(directives) if directives; ary
|
707
712
|
end
|
708
713
|
end
|
709
714
|
class EnumValueDefinition < Node
|
@@ -726,7 +731,7 @@ module TinyGQL
|
|
726
731
|
def enum_value_definition?; true; end
|
727
732
|
|
728
733
|
def children
|
729
|
-
ary = []; ary << enum_value; ary.concat(directives) if directives; ary
|
734
|
+
ary = []; ary << description if description; ary << enum_value; ary.concat(directives) if directives; ary
|
730
735
|
end
|
731
736
|
end
|
732
737
|
class EnumTypeDefinition < Node
|
@@ -750,7 +755,7 @@ module TinyGQL
|
|
750
755
|
def enum_type_definition?; true; end
|
751
756
|
|
752
757
|
def children
|
753
|
-
ary = []; ary.concat(directives) if directives; ary.concat(enum_value_definition) if enum_value_definition; ary
|
758
|
+
ary = []; ary << description if description; ary.concat(directives) if directives; ary.concat(enum_value_definition) if enum_value_definition; ary
|
754
759
|
end
|
755
760
|
end
|
756
761
|
class InputObjectTypeDefinition < Node
|
@@ -774,7 +779,7 @@ module TinyGQL
|
|
774
779
|
def input_object_type_definition?; true; end
|
775
780
|
|
776
781
|
def children
|
777
|
-
ary = []; ary.concat(directives) if directives; ary.concat(input_fields_definition) if input_fields_definition; ary
|
782
|
+
ary = []; ary << description if description; ary.concat(directives) if directives; ary.concat(input_fields_definition) if input_fields_definition; ary
|
778
783
|
end
|
779
784
|
end
|
780
785
|
class ObjectTypeExtension < Node
|
@@ -864,7 +869,122 @@ module TinyGQL
|
|
864
869
|
def directive_definition?; true; end
|
865
870
|
|
866
871
|
def children
|
867
|
-
ary = []; ary.concat(arguments_definition) if arguments_definition; ary.concat(directive_locations); ary
|
872
|
+
ary = []; ary << description if description; ary.concat(arguments_definition) if arguments_definition; ary.concat(directive_locations); ary
|
873
|
+
end
|
874
|
+
end
|
875
|
+
class ScalarTypeExtension < Node
|
876
|
+
attr_reader :name, :directives
|
877
|
+
|
878
|
+
def initialize name, directives
|
879
|
+
@name = name
|
880
|
+
@directives = directives
|
881
|
+
end
|
882
|
+
|
883
|
+
def accept viz
|
884
|
+
viz.handle_scalar_type_extension self
|
885
|
+
end
|
886
|
+
|
887
|
+
def fold viz, seed
|
888
|
+
viz.handle_scalar_type_extension self, seed
|
889
|
+
end
|
890
|
+
|
891
|
+
def scalar_type_extension?; true; end
|
892
|
+
|
893
|
+
def children
|
894
|
+
ary = []; ary.concat(directives) if directives; ary
|
895
|
+
end
|
896
|
+
end
|
897
|
+
class InterfaceTypeExtension < Node
|
898
|
+
attr_reader :name, :implements_interfaces, :directives, :fields_definition
|
899
|
+
|
900
|
+
def initialize name, implements_interfaces, directives, fields_definition
|
901
|
+
@name = name
|
902
|
+
@implements_interfaces = implements_interfaces
|
903
|
+
@directives = directives
|
904
|
+
@fields_definition = fields_definition
|
905
|
+
end
|
906
|
+
|
907
|
+
def accept viz
|
908
|
+
viz.handle_interface_type_extension self
|
909
|
+
end
|
910
|
+
|
911
|
+
def fold viz, seed
|
912
|
+
viz.handle_interface_type_extension self, seed
|
913
|
+
end
|
914
|
+
|
915
|
+
def interface_type_extension?; true; end
|
916
|
+
|
917
|
+
def children
|
918
|
+
ary = []; ary.concat(implements_interfaces) if implements_interfaces; ary.concat(directives) if directives; ary.concat(fields_definition) if fields_definition; ary
|
919
|
+
end
|
920
|
+
end
|
921
|
+
class UnionTypeExtension < Node
|
922
|
+
attr_reader :name, :directives, :union_member_types
|
923
|
+
|
924
|
+
def initialize name, directives, union_member_types
|
925
|
+
@name = name
|
926
|
+
@directives = directives
|
927
|
+
@union_member_types = union_member_types
|
928
|
+
end
|
929
|
+
|
930
|
+
def accept viz
|
931
|
+
viz.handle_union_type_extension self
|
932
|
+
end
|
933
|
+
|
934
|
+
def fold viz, seed
|
935
|
+
viz.handle_union_type_extension self, seed
|
936
|
+
end
|
937
|
+
|
938
|
+
def union_type_extension?; true; end
|
939
|
+
|
940
|
+
def children
|
941
|
+
ary = []; ary.concat(directives) if directives; ary.concat(union_member_types) if union_member_types; ary
|
942
|
+
end
|
943
|
+
end
|
944
|
+
class EnumTypeExtension < Node
|
945
|
+
attr_reader :name, :directives, :enum_value_definition
|
946
|
+
|
947
|
+
def initialize name, directives, enum_value_definition
|
948
|
+
@name = name
|
949
|
+
@directives = directives
|
950
|
+
@enum_value_definition = enum_value_definition
|
951
|
+
end
|
952
|
+
|
953
|
+
def accept viz
|
954
|
+
viz.handle_enum_type_extension self
|
955
|
+
end
|
956
|
+
|
957
|
+
def fold viz, seed
|
958
|
+
viz.handle_enum_type_extension self, seed
|
959
|
+
end
|
960
|
+
|
961
|
+
def enum_type_extension?; true; end
|
962
|
+
|
963
|
+
def children
|
964
|
+
ary = []; ary.concat(directives) if directives; ary.concat(enum_value_definition) if enum_value_definition; ary
|
965
|
+
end
|
966
|
+
end
|
967
|
+
class InputObjectTypeExtension < Node
|
968
|
+
attr_reader :name, :directives, :input_fields_definition
|
969
|
+
|
970
|
+
def initialize name, directives, input_fields_definition
|
971
|
+
@name = name
|
972
|
+
@directives = directives
|
973
|
+
@input_fields_definition = input_fields_definition
|
974
|
+
end
|
975
|
+
|
976
|
+
def accept viz
|
977
|
+
viz.handle_input_object_type_extension self
|
978
|
+
end
|
979
|
+
|
980
|
+
def fold viz, seed
|
981
|
+
viz.handle_input_object_type_extension self, seed
|
982
|
+
end
|
983
|
+
|
984
|
+
def input_object_type_extension?; true; end
|
985
|
+
|
986
|
+
def children
|
987
|
+
ary = []; ary.concat(directives) if directives; ary.concat(input_fields_definition) if input_fields_definition; ary
|
868
988
|
end
|
869
989
|
end
|
870
990
|
end
|
data/lib/tinygql/nodes.yml
CHANGED
@@ -84,7 +84,7 @@ nodes:
|
|
84
84
|
- name: Directive
|
85
85
|
fields:
|
86
86
|
- name: literal
|
87
|
-
- arguments
|
87
|
+
- arguments?: list
|
88
88
|
|
89
89
|
- name: TypeCondition
|
90
90
|
fields:
|
@@ -98,19 +98,19 @@ nodes:
|
|
98
98
|
|
99
99
|
- name: FragmentSpread
|
100
100
|
fields:
|
101
|
-
- fragment_name
|
101
|
+
- fragment_name: literal
|
102
102
|
- directives?: list
|
103
103
|
|
104
104
|
- name: FragmentDefinition
|
105
105
|
fields:
|
106
|
-
- fragment_name
|
106
|
+
- fragment_name: literal
|
107
107
|
- type_condition
|
108
108
|
- directives?: list
|
109
109
|
- selection_set: list
|
110
110
|
|
111
111
|
- name: RootOperationTypeDefinition
|
112
112
|
fields:
|
113
|
-
- operation_type
|
113
|
+
- operation_type: literal
|
114
114
|
- named_type
|
115
115
|
|
116
116
|
- name: SchemaDefinition
|
@@ -204,3 +204,33 @@ nodes:
|
|
204
204
|
- name: literal
|
205
205
|
- arguments_definition?: list
|
206
206
|
- directive_locations: list
|
207
|
+
|
208
|
+
- name: ScalarTypeExtension
|
209
|
+
fields:
|
210
|
+
- name: literal
|
211
|
+
- directives?: list
|
212
|
+
|
213
|
+
- name: InterfaceTypeExtension
|
214
|
+
fields:
|
215
|
+
- name: literal
|
216
|
+
- implements_interfaces?: list
|
217
|
+
- directives?: list
|
218
|
+
- fields_definition?: list
|
219
|
+
|
220
|
+
- name: UnionTypeExtension
|
221
|
+
fields:
|
222
|
+
- name: literal
|
223
|
+
- directives?: list
|
224
|
+
- union_member_types?: list
|
225
|
+
|
226
|
+
- name: EnumTypeExtension
|
227
|
+
fields:
|
228
|
+
- name: literal
|
229
|
+
- directives?: list
|
230
|
+
- enum_value_definition?: list
|
231
|
+
|
232
|
+
- name: InputObjectTypeExtension
|
233
|
+
fields:
|
234
|
+
- name: literal
|
235
|
+
- directives?: list
|
236
|
+
- input_fields_definition?: list
|
data/lib/tinygql/parser.rb
CHANGED
@@ -53,12 +53,57 @@ module TinyGQL
|
|
53
53
|
def type_system_extension
|
54
54
|
expect_token :EXTEND
|
55
55
|
case token_name
|
56
|
+
when :SCALAR then scalar_type_extension
|
56
57
|
when :TYPE then object_type_extension
|
58
|
+
when :INTERFACE then interface_type_extension
|
59
|
+
when :UNION then union_type_extension
|
60
|
+
when :ENUM then enum_type_extension
|
61
|
+
when :INPUT then input_object_type_extension
|
57
62
|
else
|
58
|
-
expect_token :
|
63
|
+
expect_token :SCALAR
|
59
64
|
end
|
60
65
|
end
|
61
66
|
|
67
|
+
def input_object_type_extension
|
68
|
+
expect_token :INPUT
|
69
|
+
name = self.name
|
70
|
+
directives = if at?(:DIR_SIGN); self.directives; end
|
71
|
+
input_fields_definition = if at?(:LCURLY); self.input_fields_definition; end
|
72
|
+
Nodes::InputObjectTypeExtension.new(name, directives, input_fields_definition)
|
73
|
+
end
|
74
|
+
|
75
|
+
def enum_type_extension
|
76
|
+
expect_token :ENUM
|
77
|
+
name = self.name
|
78
|
+
directives = if at?(:DIR_SIGN); self.directives; end
|
79
|
+
enum_values_definition = if at?(:LCURLY); self.enum_values_definition; end
|
80
|
+
Nodes::EnumTypeExtension.new(name, directives, enum_values_definition)
|
81
|
+
end
|
82
|
+
|
83
|
+
def union_type_extension
|
84
|
+
expect_token :UNION
|
85
|
+
name = self.name
|
86
|
+
directives = if at?(:DIR_SIGN); self.directives; end
|
87
|
+
union_member_types = if at?(:EQUALS); self.union_member_types; end
|
88
|
+
Nodes::UnionTypeExtension.new(name, directives, union_member_types)
|
89
|
+
end
|
90
|
+
|
91
|
+
def interface_type_extension
|
92
|
+
expect_token :INTERFACE
|
93
|
+
name = self.name
|
94
|
+
implements_interfaces = if at?(:IMPLEMENTS); self.implements_interfaces; end
|
95
|
+
directives = if at?(:DIR_SIGN); self.directives; end
|
96
|
+
fields_definition = if at?(:LCURLY); self.fields_definition; end
|
97
|
+
Nodes::InterfaceTypeExtension.new(name, implements_interfaces, directives, fields_definition)
|
98
|
+
end
|
99
|
+
|
100
|
+
def scalar_type_extension
|
101
|
+
expect_token :SCALAR
|
102
|
+
name = self.name
|
103
|
+
directives = if at?(:DIR_SIGN); self.directives; end
|
104
|
+
Nodes::ScalarTypeExtension.new(name, directives)
|
105
|
+
end
|
106
|
+
|
62
107
|
def object_type_extension
|
63
108
|
expect_token :TYPE
|
64
109
|
name = self.name
|
@@ -128,7 +173,7 @@ module TinyGQL
|
|
128
173
|
when :ENUM then enum_type_definition(desc)
|
129
174
|
when :INPUT then input_object_type_definition(desc)
|
130
175
|
else
|
131
|
-
expect_token :
|
176
|
+
expect_token :TYPE
|
132
177
|
end
|
133
178
|
end
|
134
179
|
|
@@ -300,7 +345,7 @@ module TinyGQL
|
|
300
345
|
|
301
346
|
def fragment_definition
|
302
347
|
expect_token :FRAGMENT
|
303
|
-
expect_token(:
|
348
|
+
expect_token(:IDENTIFIER) if at?(:ON)
|
304
349
|
name = self.name
|
305
350
|
tc = self.type_condition
|
306
351
|
directives = if at?(:DIR_SIGN)
|
@@ -353,15 +398,15 @@ module TinyGQL
|
|
353
398
|
when :ON, :DIR_SIGN, :LCURLY then inline_fragment
|
354
399
|
when :IDENTIFIER then fragment_spread
|
355
400
|
else
|
356
|
-
expect_token :
|
401
|
+
expect_token :IDENTIFIER
|
357
402
|
end
|
358
403
|
end
|
359
404
|
|
360
405
|
def fragment_spread
|
361
406
|
name = self.name
|
362
|
-
directives = if at?(:DIR_SIGN)
|
363
|
-
|
364
|
-
|
407
|
+
directives = if at?(:DIR_SIGN); self.directives; end
|
408
|
+
|
409
|
+
expect_token(:IDENTIFIER) if at?(:ON)
|
365
410
|
|
366
411
|
Nodes::FragmentSpread.new(name, directives)
|
367
412
|
end
|
@@ -477,7 +522,7 @@ module TinyGQL
|
|
477
522
|
when :LCURLY then object_value
|
478
523
|
when :VAR_SIGN then variable
|
479
524
|
else
|
480
|
-
expect_token :
|
525
|
+
expect_token :INT
|
481
526
|
end
|
482
527
|
end
|
483
528
|
|
data/lib/tinygql/version.rb
CHANGED