tinygql 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,16 +2,16 @@ module TinyGQL
2
2
  module Visitors
3
3
  module Visitor
4
4
  def handle_document obj
5
- obj.definitions.each { _1.accept self }
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 { _1.accept self }
9
+ obj.variable_definitions.each { |v| v.accept self }
10
10
  end
11
11
  if obj.directives
12
- obj.directives.each { _1.accept self }
12
+ obj.directives.each { |v| v.accept self }
13
13
  end
14
- obj.selection_set.each { _1.accept self }
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 { _1.accept self }
40
+ obj.arguments.each { |v| v.accept self }
41
41
  end
42
42
  if obj.directives
43
- obj.directives.each { _1.accept self }
43
+ obj.directives.each { |v| v.accept self }
44
44
  end
45
45
  if obj.selection_set
46
- obj.selection_set.each { _1.accept self }
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 { _1.accept self }
67
+ obj.values.each { |v| v.accept self }
68
68
  end
69
69
  def handle_directive obj
70
- obj.arguments.each { _1.accept self }
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,115 +77,145 @@ module TinyGQL
77
77
  obj.type_condition.accept self
78
78
  end
79
79
  if obj.directives
80
- obj.directives.each { _1.accept self }
80
+ obj.directives.each { |v| v.accept self }
81
81
  end
82
- obj.selection_set.each { _1.accept self }
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 { _1.accept self }
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 { _1.accept self }
94
+ obj.directives.each { |v| v.accept self }
95
95
  end
96
- obj.selection_set.each { _1.accept self }
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
100
100
  obj.named_type.accept self
101
101
  end
102
102
  def handle_schema_definition obj
103
+ if obj.description
104
+ obj.description.accept self
105
+ end
103
106
  if obj.directives
104
- obj.directives.each { _1.accept self }
107
+ obj.directives.each { |v| v.accept self }
105
108
  end
106
- obj.root_operation_definitions.each { _1.accept self }
109
+ obj.root_operation_definitions.each { |v| v.accept self }
107
110
  end
108
111
  def handle_field_definition obj
112
+ if obj.description
113
+ obj.description.accept self
114
+ end
109
115
  if obj.arguments_definition
110
- obj.arguments_definition.each { _1.accept self }
116
+ obj.arguments_definition.each { |v| v.accept self }
111
117
  end
112
118
  obj.type.accept self
113
119
  if obj.directives
114
- obj.directives.each { _1.accept self }
120
+ obj.directives.each { |v| v.accept self }
115
121
  end
116
122
  end
117
123
  def handle_input_value_definition obj
124
+ if obj.description
125
+ obj.description.accept self
126
+ end
118
127
  obj.type.accept self
119
128
  if obj.default_value
120
129
  obj.default_value.accept self
121
130
  end
122
131
  if obj.directives
123
- obj.directives.each { _1.accept self }
132
+ obj.directives.each { |v| v.accept self }
124
133
  end
125
134
  end
126
135
  def handle_object_type_definition obj
136
+ if obj.description
137
+ obj.description.accept self
138
+ end
127
139
  if obj.implements_interfaces
128
- obj.implements_interfaces.each { _1.accept self }
140
+ obj.implements_interfaces.each { |v| v.accept self }
129
141
  end
130
142
  if obj.directives
131
- obj.directives.each { _1.accept self }
143
+ obj.directives.each { |v| v.accept self }
132
144
  end
133
145
  if obj.fields_definition
134
- obj.fields_definition.each { _1.accept self }
146
+ obj.fields_definition.each { |v| v.accept self }
135
147
  end
136
148
  end
137
149
  def handle_interface_type_definition obj
150
+ if obj.description
151
+ obj.description.accept self
152
+ end
138
153
  if obj.directives
139
- obj.directives.each { _1.accept self }
154
+ obj.directives.each { |v| v.accept self }
140
155
  end
141
156
  if obj.fields_definition
142
- obj.fields_definition.each { _1.accept self }
157
+ obj.fields_definition.each { |v| v.accept self }
143
158
  end
144
159
  end
145
160
  def handle_union_type_definition obj
161
+ if obj.description
162
+ obj.description.accept self
163
+ end
146
164
  if obj.directives
147
- obj.directives.each { _1.accept self }
165
+ obj.directives.each { |v| v.accept self }
148
166
  end
149
167
  if obj.union_member_types
150
- obj.union_member_types.each { _1.accept self }
168
+ obj.union_member_types.each { |v| v.accept self }
151
169
  end
152
170
  end
153
171
  def handle_scalar_type_definition obj
172
+ if obj.description
173
+ obj.description.accept self
174
+ end
154
175
  if obj.directives
155
- obj.directives.each { _1.accept self }
176
+ obj.directives.each { |v| v.accept self }
156
177
  end
157
178
  end
158
179
  def handle_enum_value_definition obj
180
+ if obj.description
181
+ obj.description.accept self
182
+ end
159
183
  obj.enum_value.accept self
160
184
  if obj.directives
161
- obj.directives.each { _1.accept self }
185
+ obj.directives.each { |v| v.accept self }
162
186
  end
163
187
  end
164
188
  def handle_enum_type_definition obj
189
+ if obj.description
190
+ obj.description.accept self
191
+ end
165
192
  if obj.directives
166
- obj.directives.each { _1.accept self }
193
+ obj.directives.each { |v| v.accept self }
167
194
  end
168
195
  if obj.enum_value_definition
169
- obj.enum_value_definition.each { _1.accept self }
196
+ obj.enum_value_definition.each { |v| v.accept self }
170
197
  end
171
198
  end
172
199
  def handle_input_object_type_definition obj
200
+ if obj.description
201
+ obj.description.accept self
202
+ end
173
203
  if obj.directives
174
- obj.directives.each { _1.accept self }
204
+ obj.directives.each { |v| v.accept self }
175
205
  end
176
206
  if obj.input_fields_definition
177
- obj.input_fields_definition.each { _1.accept self }
207
+ obj.input_fields_definition.each { |v| v.accept self }
178
208
  end
179
209
  end
180
210
  def handle_object_type_extension obj
181
211
  if obj.implements_interfaces
182
- obj.implements_interfaces.each { _1.accept self }
212
+ obj.implements_interfaces.each { |v| v.accept self }
183
213
  end
184
214
  if obj.directives
185
- obj.directives.each { _1.accept self }
215
+ obj.directives.each { |v| v.accept self }
186
216
  end
187
217
  if obj.fields_definition
188
- obj.fields_definition.each { _1.accept self }
218
+ obj.fields_definition.each { |v| v.accept self }
189
219
  end
190
220
  end
191
221
  def handle_executable_directive_location obj
@@ -193,26 +223,29 @@ module TinyGQL
193
223
  def handle_type_system_directive_location obj
194
224
  end
195
225
  def handle_directive_definition obj
226
+ if obj.description
227
+ obj.description.accept self
228
+ end
196
229
  if obj.arguments_definition
197
- obj.arguments_definition.each { _1.accept self }
230
+ obj.arguments_definition.each { |v| v.accept self }
198
231
  end
199
- obj.directive_locations.each { _1.accept self }
232
+ obj.directive_locations.each { |v| v.accept self }
200
233
  end
201
234
  end
202
235
 
203
236
  module Fold
204
237
  def handle_document obj, seed
205
- obj.definitions.each { seed = _1.fold(self, seed) }
238
+ obj.definitions.each { |v| seed = v.fold(self, seed) }
206
239
  seed
207
240
  end
208
241
  def handle_operation_definition obj, seed
209
242
  if obj.variable_definitions
210
- obj.variable_definitions.each { seed = _1.fold(self, seed) }
243
+ obj.variable_definitions.each { |v| seed = v.fold(self, seed) }
211
244
  end
212
245
  if obj.directives
213
- obj.directives.each { seed = _1.fold(self, seed) }
246
+ obj.directives.each { |v| seed = v.fold(self, seed) }
214
247
  end
215
- obj.selection_set.each { seed = _1.fold(self, seed) }
248
+ obj.selection_set.each { |v| seed = v.fold(self, seed) }
216
249
  seed
217
250
  end
218
251
  def handle_variable obj, seed
@@ -246,13 +279,13 @@ module TinyGQL
246
279
  end
247
280
  def handle_field obj, seed
248
281
  if obj.arguments
249
- obj.arguments.each { seed = _1.fold(self, seed) }
282
+ obj.arguments.each { |v| seed = v.fold(self, seed) }
250
283
  end
251
284
  if obj.directives
252
- obj.directives.each { seed = _1.fold(self, seed) }
285
+ obj.directives.each { |v| seed = v.fold(self, seed) }
253
286
  end
254
287
  if obj.selection_set
255
- obj.selection_set.each { seed = _1.fold(self, seed) }
288
+ obj.selection_set.each { |v| seed = v.fold(self, seed) }
256
289
  end
257
290
  seed
258
291
  end
@@ -282,11 +315,11 @@ module TinyGQL
282
315
  seed
283
316
  end
284
317
  def handle_object_value obj, seed
285
- obj.values.each { seed = _1.fold(self, seed) }
318
+ obj.values.each { |v| seed = v.fold(self, seed) }
286
319
  seed
287
320
  end
288
321
  def handle_directive obj, seed
289
- obj.arguments.each { seed = _1.fold(self, seed) }
322
+ obj.arguments.each { |v| seed = v.fold(self, seed) }
290
323
  seed
291
324
  end
292
325
  def handle_type_condition obj, seed
@@ -298,15 +331,15 @@ module TinyGQL
298
331
  seed = obj.type_condition.fold self, seed
299
332
  end
300
333
  if obj.directives
301
- obj.directives.each { seed = _1.fold(self, seed) }
334
+ obj.directives.each { |v| seed = v.fold(self, seed) }
302
335
  end
303
- obj.selection_set.each { seed = _1.fold(self, seed) }
336
+ obj.selection_set.each { |v| seed = v.fold(self, seed) }
304
337
  seed
305
338
  end
306
339
  def handle_fragment_spread obj, seed
307
340
  seed = obj.fragment_name.fold self, seed
308
341
  if obj.directives
309
- obj.directives.each { seed = _1.fold(self, seed) }
342
+ obj.directives.each { |v| seed = v.fold(self, seed) }
310
343
  end
311
344
  seed
312
345
  end
@@ -314,9 +347,9 @@ module TinyGQL
314
347
  seed = obj.fragment_name.fold self, seed
315
348
  seed = obj.type_condition.fold self, seed
316
349
  if obj.directives
317
- obj.directives.each { seed = _1.fold(self, seed) }
350
+ obj.directives.each { |v| seed = v.fold(self, seed) }
318
351
  end
319
- obj.selection_set.each { seed = _1.fold(self, seed) }
352
+ obj.selection_set.each { |v| seed = v.fold(self, seed) }
320
353
  seed
321
354
  end
322
355
  def handle_root_operation_type_definition obj, seed
@@ -325,102 +358,132 @@ module TinyGQL
325
358
  seed
326
359
  end
327
360
  def handle_schema_definition obj, seed
361
+ if obj.description
362
+ seed = obj.description.fold self, seed
363
+ end
328
364
  if obj.directives
329
- obj.directives.each { seed = _1.fold(self, seed) }
365
+ obj.directives.each { |v| seed = v.fold(self, seed) }
330
366
  end
331
- obj.root_operation_definitions.each { seed = _1.fold(self, seed) }
367
+ obj.root_operation_definitions.each { |v| seed = v.fold(self, seed) }
332
368
  seed
333
369
  end
334
370
  def handle_field_definition obj, seed
371
+ if obj.description
372
+ seed = obj.description.fold self, seed
373
+ end
335
374
  if obj.arguments_definition
336
- obj.arguments_definition.each { seed = _1.fold(self, seed) }
375
+ obj.arguments_definition.each { |v| seed = v.fold(self, seed) }
337
376
  end
338
377
  seed = obj.type.fold self, seed
339
378
  if obj.directives
340
- obj.directives.each { seed = _1.fold(self, seed) }
379
+ obj.directives.each { |v| seed = v.fold(self, seed) }
341
380
  end
342
381
  seed
343
382
  end
344
383
  def handle_input_value_definition obj, seed
384
+ if obj.description
385
+ seed = obj.description.fold self, seed
386
+ end
345
387
  seed = obj.type.fold self, seed
346
388
  if obj.default_value
347
389
  seed = obj.default_value.fold self, seed
348
390
  end
349
391
  if obj.directives
350
- obj.directives.each { seed = _1.fold(self, seed) }
392
+ obj.directives.each { |v| seed = v.fold(self, seed) }
351
393
  end
352
394
  seed
353
395
  end
354
396
  def handle_object_type_definition obj, seed
397
+ if obj.description
398
+ seed = obj.description.fold self, seed
399
+ end
355
400
  if obj.implements_interfaces
356
- obj.implements_interfaces.each { seed = _1.fold(self, seed) }
401
+ obj.implements_interfaces.each { |v| seed = v.fold(self, seed) }
357
402
  end
358
403
  if obj.directives
359
- obj.directives.each { seed = _1.fold(self, seed) }
404
+ obj.directives.each { |v| seed = v.fold(self, seed) }
360
405
  end
361
406
  if obj.fields_definition
362
- obj.fields_definition.each { seed = _1.fold(self, seed) }
407
+ obj.fields_definition.each { |v| seed = v.fold(self, seed) }
363
408
  end
364
409
  seed
365
410
  end
366
411
  def handle_interface_type_definition obj, seed
412
+ if obj.description
413
+ seed = obj.description.fold self, seed
414
+ end
367
415
  if obj.directives
368
- obj.directives.each { seed = _1.fold(self, seed) }
416
+ obj.directives.each { |v| seed = v.fold(self, seed) }
369
417
  end
370
418
  if obj.fields_definition
371
- obj.fields_definition.each { seed = _1.fold(self, seed) }
419
+ obj.fields_definition.each { |v| seed = v.fold(self, seed) }
372
420
  end
373
421
  seed
374
422
  end
375
423
  def handle_union_type_definition obj, seed
424
+ if obj.description
425
+ seed = obj.description.fold self, seed
426
+ end
376
427
  if obj.directives
377
- obj.directives.each { seed = _1.fold(self, seed) }
428
+ obj.directives.each { |v| seed = v.fold(self, seed) }
378
429
  end
379
430
  if obj.union_member_types
380
- obj.union_member_types.each { seed = _1.fold(self, seed) }
431
+ obj.union_member_types.each { |v| seed = v.fold(self, seed) }
381
432
  end
382
433
  seed
383
434
  end
384
435
  def handle_scalar_type_definition obj, seed
436
+ if obj.description
437
+ seed = obj.description.fold self, seed
438
+ end
385
439
  if obj.directives
386
- obj.directives.each { seed = _1.fold(self, seed) }
440
+ obj.directives.each { |v| seed = v.fold(self, seed) }
387
441
  end
388
442
  seed
389
443
  end
390
444
  def handle_enum_value_definition obj, seed
445
+ if obj.description
446
+ seed = obj.description.fold self, seed
447
+ end
391
448
  seed = obj.enum_value.fold self, seed
392
449
  if obj.directives
393
- obj.directives.each { seed = _1.fold(self, seed) }
450
+ obj.directives.each { |v| seed = v.fold(self, seed) }
394
451
  end
395
452
  seed
396
453
  end
397
454
  def handle_enum_type_definition obj, seed
455
+ if obj.description
456
+ seed = obj.description.fold self, seed
457
+ end
398
458
  if obj.directives
399
- obj.directives.each { seed = _1.fold(self, seed) }
459
+ obj.directives.each { |v| seed = v.fold(self, seed) }
400
460
  end
401
461
  if obj.enum_value_definition
402
- obj.enum_value_definition.each { seed = _1.fold(self, seed) }
462
+ obj.enum_value_definition.each { |v| seed = v.fold(self, seed) }
403
463
  end
404
464
  seed
405
465
  end
406
466
  def handle_input_object_type_definition obj, seed
467
+ if obj.description
468
+ seed = obj.description.fold self, seed
469
+ end
407
470
  if obj.directives
408
- obj.directives.each { seed = _1.fold(self, seed) }
471
+ obj.directives.each { |v| seed = v.fold(self, seed) }
409
472
  end
410
473
  if obj.input_fields_definition
411
- obj.input_fields_definition.each { seed = _1.fold(self, seed) }
474
+ obj.input_fields_definition.each { |v| seed = v.fold(self, seed) }
412
475
  end
413
476
  seed
414
477
  end
415
478
  def handle_object_type_extension obj, seed
416
479
  if obj.implements_interfaces
417
- obj.implements_interfaces.each { seed = _1.fold(self, seed) }
480
+ obj.implements_interfaces.each { |v| seed = v.fold(self, seed) }
418
481
  end
419
482
  if obj.directives
420
- obj.directives.each { seed = _1.fold(self, seed) }
483
+ obj.directives.each { |v| seed = v.fold(self, seed) }
421
484
  end
422
485
  if obj.fields_definition
423
- obj.fields_definition.each { seed = _1.fold(self, seed) }
486
+ obj.fields_definition.each { |v| seed = v.fold(self, seed) }
424
487
  end
425
488
  seed
426
489
  end
@@ -431,10 +494,13 @@ module TinyGQL
431
494
  seed
432
495
  end
433
496
  def handle_directive_definition obj, seed
497
+ if obj.description
498
+ seed = obj.description.fold self, seed
499
+ end
434
500
  if obj.arguments_definition
435
- obj.arguments_definition.each { seed = _1.fold(self, seed) }
501
+ obj.arguments_definition.each { |v| seed = v.fold(self, seed) }
436
502
  end
437
- obj.directive_locations.each { seed = _1.fold(self, seed) }
503
+ obj.directive_locations.each { |v| seed = v.fold(self, seed) }
438
504
  seed
439
505
  end
440
506
  end
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
@@ -161,5 +161,31 @@ eod
161
161
  node = ast.find(&:object_type_definition?).first
162
162
  assert_equal ["a", "b", "c"], node.implements_interfaces.map(&:name)
163
163
  end
164
+
165
+ def test_schemas_have_descriptions
166
+ doc = <<-eod
167
+ "foo bar"
168
+ schema {
169
+ query: QueryType
170
+ mutation: MutationType
171
+ }
172
+ eod
173
+ ast = TinyGQL::Parser.parse doc
174
+ node = ast.find(&:schema_definition?)
175
+ assert node
176
+ assert_equal "foo bar", node.description.value
177
+ end
178
+
179
+ def test_directives_have_descriptions
180
+ doc = <<-eod
181
+ """neat!"""
182
+ directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
183
+ eod
184
+ ast = TinyGQL::Parser.parse doc
185
+ node = ast.find(&:directive_definition?)
186
+ assert node
187
+ assert_equal "neat!", node.description.value
188
+ assert_equal ["FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT"], node.directive_locations.map(&:name)
189
+ end
164
190
  end
165
191
  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.1
4
+ version: 0.1.3
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 00:00:00.000000000 Z
11
+ date: 2023-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -51,7 +51,9 @@ files:
51
51
  - LICENSE
52
52
  - README.md
53
53
  - Rakefile
54
+ - benchmark/fixtures/negotiate.gql
54
55
  - bin/bench.rb
56
+ - bin/profile.rb
55
57
  - lib/tinygql.rb
56
58
  - lib/tinygql/lexer.rb
57
59
  - lib/tinygql/nodes.rb