graphql 1.7.14 → 1.8.0.pre1
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 +5 -5
- data/lib/generators/graphql/function_generator.rb +1 -1
- data/lib/generators/graphql/loader_generator.rb +1 -1
- data/lib/generators/graphql/mutation_generator.rb +1 -6
- data/lib/generators/graphql/templates/function.erb +2 -2
- data/lib/generators/graphql/templates/loader.erb +2 -2
- data/lib/graphql.rb +2 -0
- data/lib/graphql/argument.rb +0 -1
- data/lib/graphql/backwards_compatibility.rb +2 -3
- data/lib/graphql/base_type.rb +18 -16
- data/lib/graphql/compatibility/query_parser_specification.rb +0 -117
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -14
- data/lib/graphql/define/assign_object_field.rb +5 -12
- data/lib/graphql/deprecated_dsl.rb +28 -0
- data/lib/graphql/directive.rb +0 -1
- data/lib/graphql/enum_type.rb +1 -3
- data/lib/graphql/execution.rb +0 -1
- data/lib/graphql/execution/multiplex.rb +29 -12
- data/lib/graphql/field.rb +5 -20
- data/lib/graphql/function.rb +12 -0
- data/lib/graphql/input_object_type.rb +1 -3
- data/lib/graphql/internal_representation/node.rb +14 -26
- data/lib/graphql/internal_representation/visit.rb +6 -3
- data/lib/graphql/introspection/arguments_field.rb +0 -1
- data/lib/graphql/introspection/enum_values_field.rb +0 -1
- data/lib/graphql/introspection/fields_field.rb +0 -1
- data/lib/graphql/introspection/input_fields_field.rb +0 -1
- data/lib/graphql/introspection/interfaces_field.rb +0 -1
- data/lib/graphql/introspection/of_type_field.rb +0 -1
- data/lib/graphql/introspection/possible_types_field.rb +0 -1
- data/lib/graphql/introspection/schema_field.rb +0 -1
- data/lib/graphql/introspection/type_by_name_field.rb +0 -1
- data/lib/graphql/introspection/typename_field.rb +0 -1
- data/lib/graphql/language.rb +0 -3
- data/lib/graphql/language/generation.rb +182 -3
- data/lib/graphql/language/lexer.rb +69 -144
- data/lib/graphql/language/lexer.rl +4 -15
- data/lib/graphql/language/nodes.rb +76 -136
- data/lib/graphql/language/parser.rb +621 -668
- data/lib/graphql/language/parser.y +11 -17
- data/lib/graphql/language/token.rb +3 -10
- data/lib/graphql/object_type.rb +6 -1
- data/lib/graphql/query.rb +13 -8
- data/lib/graphql/query/arguments.rb +33 -48
- data/lib/graphql/query/context.rb +1 -0
- data/lib/graphql/query/literal_input.rb +1 -4
- data/lib/graphql/relay/connection_resolve.rb +3 -0
- data/lib/graphql/relay/global_id_resolve.rb +5 -1
- data/lib/graphql/relay/relation_connection.rb +19 -14
- data/lib/graphql/schema.rb +219 -12
- data/lib/graphql/schema/argument.rb +33 -0
- data/lib/graphql/schema/build_from_definition.rb +18 -64
- data/lib/graphql/schema/enum.rb +76 -0
- data/lib/graphql/schema/field.rb +127 -0
- data/lib/graphql/schema/field/dynamic_resolve.rb +63 -0
- data/lib/graphql/schema/field/unwrapped_resolve.rb +20 -0
- data/lib/graphql/schema/input_object.rb +61 -0
- data/lib/graphql/schema/interface.rb +32 -0
- data/lib/graphql/schema/loader.rb +2 -2
- data/lib/graphql/schema/member.rb +97 -0
- data/lib/graphql/schema/member/build_type.rb +106 -0
- data/lib/graphql/schema/member/has_fields.rb +56 -0
- data/lib/graphql/schema/member/instrumentation.rb +113 -0
- data/lib/graphql/schema/member/list_type_proxy.rb +21 -0
- data/lib/graphql/schema/member/non_null_type_proxy.rb +21 -0
- data/lib/graphql/schema/object.rb +65 -0
- data/lib/graphql/schema/printer.rb +266 -33
- data/lib/graphql/schema/scalar.rb +25 -0
- data/lib/graphql/schema/traversal.rb +26 -17
- data/lib/graphql/schema/union.rb +48 -0
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +1 -5
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +8 -15
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +1 -11
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +5 -7
- data/lib/graphql/tracing.rb +0 -1
- data/lib/graphql/tracing/platform_tracing.rb +7 -20
- data/lib/graphql/tracing/scout_tracing.rb +2 -2
- data/lib/graphql/unresolved_type_error.rb +2 -3
- data/lib/graphql/version.rb +1 -1
- data/readme.md +1 -1
- data/spec/dummy/app/channels/graphql_channel.rb +1 -22
- data/spec/dummy/log/development.log +0 -239
- data/spec/dummy/log/test.log +0 -204
- data/spec/dummy/test/system/action_cable_subscription_test.rb +0 -4
- data/spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png +0 -0
- data/spec/generators/graphql/function_generator_spec.rb +0 -26
- data/spec/generators/graphql/loader_generator_spec.rb +0 -24
- data/spec/graphql/analysis/max_query_complexity_spec.rb +3 -3
- data/spec/graphql/analysis/max_query_depth_spec.rb +3 -3
- data/spec/graphql/backtrace_spec.rb +0 -10
- data/spec/graphql/base_type_spec.rb +5 -19
- data/spec/graphql/boolean_type_spec.rb +3 -3
- data/spec/graphql/directive_spec.rb +1 -3
- data/spec/graphql/enum_type_spec.rb +5 -18
- data/spec/graphql/execution/execute_spec.rb +1 -1
- data/spec/graphql/execution/multiplex_spec.rb +2 -2
- data/spec/graphql/float_type_spec.rb +2 -2
- data/spec/graphql/id_type_spec.rb +1 -1
- data/spec/graphql/input_object_type_spec.rb +2 -15
- data/spec/graphql/int_type_spec.rb +2 -2
- data/spec/graphql/internal_representation/rewrite_spec.rb +2 -2
- data/spec/graphql/introspection/schema_type_spec.rb +0 -1
- data/spec/graphql/language/generation_spec.rb +186 -21
- data/spec/graphql/language/lexer_spec.rb +1 -21
- data/spec/graphql/language/nodes_spec.rb +12 -21
- data/spec/graphql/language/parser_spec.rb +1 -1
- data/spec/graphql/query/arguments_spec.rb +15 -37
- data/spec/graphql/query/serial_execution/value_resolution_spec.rb +2 -2
- data/spec/graphql/query/variables_spec.rb +1 -1
- data/spec/graphql/query_spec.rb +5 -31
- data/spec/graphql/rake_task_spec.rb +1 -3
- data/spec/graphql/relay/base_connection_spec.rb +1 -1
- data/spec/graphql/relay/connection_instrumentation_spec.rb +2 -2
- data/spec/graphql/relay/connection_resolve_spec.rb +1 -1
- data/spec/graphql/relay/connection_type_spec.rb +1 -1
- data/spec/graphql/relay/mutation_spec.rb +3 -3
- data/spec/graphql/relay/relation_connection_spec.rb +1 -65
- data/spec/graphql/schema/build_from_definition_spec.rb +4 -86
- data/spec/graphql/schema/enum_spec.rb +60 -0
- data/spec/graphql/schema/field_spec.rb +14 -0
- data/spec/graphql/schema/input_object_spec.rb +43 -0
- data/spec/graphql/schema/interface_spec.rb +98 -0
- data/spec/graphql/schema/object_spec.rb +119 -0
- data/spec/graphql/schema/printer_spec.rb +15 -92
- data/spec/graphql/schema/scalar_spec.rb +40 -0
- data/spec/graphql/schema/union_spec.rb +35 -0
- data/spec/graphql/schema/validation_spec.rb +1 -1
- data/spec/graphql/schema/warden_spec.rb +11 -11
- data/spec/graphql/schema_spec.rb +25 -23
- data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +2 -10
- data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +2 -2
- data/spec/graphql/string_type_spec.rb +3 -3
- data/spec/graphql/subscriptions_spec.rb +1 -1
- data/spec/graphql/tracing/platform_tracing_spec.rb +1 -60
- data/spec/support/dummy/schema.rb +25 -39
- data/spec/support/jazz.rb +334 -0
- data/spec/support/lazy_helpers.rb +21 -23
- data/spec/support/star_wars/data.rb +7 -6
- data/spec/support/star_wars/schema.rb +109 -142
- metadata +39 -33
- data/lib/graphql/execution/instrumentation.rb +0 -82
- data/lib/graphql/language/block_string.rb +0 -47
- data/lib/graphql/language/document_from_schema_definition.rb +0 -277
- data/lib/graphql/language/printer.rb +0 -351
- data/lib/graphql/tracing/data_dog_tracing.rb +0 -49
- data/spec/graphql/execution/instrumentation_spec.rb +0 -165
- data/spec/graphql/language/block_string_spec.rb +0 -70
- data/spec/graphql/language/document_from_schema_definition_spec.rb +0 -770
- data/spec/graphql/language/printer_spec.rb +0 -203
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: graphql
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.8.0.pre1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Robert Mosolgo
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2017-11-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: benchmark-ips
|
|
@@ -136,20 +136,6 @@ dependencies:
|
|
|
136
136
|
- - "~>"
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
138
|
version: 3.0.0
|
|
139
|
-
- !ruby/object:Gem::Dependency
|
|
140
|
-
name: memory_profiler
|
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
|
142
|
-
requirements:
|
|
143
|
-
- - ">="
|
|
144
|
-
- !ruby/object:Gem::Version
|
|
145
|
-
version: '0'
|
|
146
|
-
type: :development
|
|
147
|
-
prerelease: false
|
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
-
requirements:
|
|
150
|
-
- - ">="
|
|
151
|
-
- !ruby/object:Gem::Version
|
|
152
|
-
version: '0'
|
|
153
139
|
- !ruby/object:Gem::Dependency
|
|
154
140
|
name: minitest
|
|
155
141
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -376,6 +362,7 @@ files:
|
|
|
376
362
|
- lib/graphql/define/no_definition_error.rb
|
|
377
363
|
- lib/graphql/define/non_null_with_bang.rb
|
|
378
364
|
- lib/graphql/define/type_definer.rb
|
|
365
|
+
- lib/graphql/deprecated_dsl.rb
|
|
379
366
|
- lib/graphql/directive.rb
|
|
380
367
|
- lib/graphql/directive/deprecated_directive.rb
|
|
381
368
|
- lib/graphql/directive/include_directive.rb
|
|
@@ -385,7 +372,6 @@ files:
|
|
|
385
372
|
- lib/graphql/execution/directive_checks.rb
|
|
386
373
|
- lib/graphql/execution/execute.rb
|
|
387
374
|
- lib/graphql/execution/flatten.rb
|
|
388
|
-
- lib/graphql/execution/instrumentation.rb
|
|
389
375
|
- lib/graphql/execution/lazy.rb
|
|
390
376
|
- lib/graphql/execution/lazy/lazy_method_map.rb
|
|
391
377
|
- lib/graphql/execution/lazy/resolve.rb
|
|
@@ -431,17 +417,14 @@ files:
|
|
|
431
417
|
- lib/graphql/invalid_name_error.rb
|
|
432
418
|
- lib/graphql/invalid_null_error.rb
|
|
433
419
|
- lib/graphql/language.rb
|
|
434
|
-
- lib/graphql/language/block_string.rb
|
|
435
420
|
- lib/graphql/language/comments.rb
|
|
436
421
|
- lib/graphql/language/definition_slice.rb
|
|
437
|
-
- lib/graphql/language/document_from_schema_definition.rb
|
|
438
422
|
- lib/graphql/language/generation.rb
|
|
439
423
|
- lib/graphql/language/lexer.rb
|
|
440
424
|
- lib/graphql/language/lexer.rl
|
|
441
425
|
- lib/graphql/language/nodes.rb
|
|
442
426
|
- lib/graphql/language/parser.rb
|
|
443
427
|
- lib/graphql/language/parser.y
|
|
444
|
-
- lib/graphql/language/printer.rb
|
|
445
428
|
- lib/graphql/language/token.rb
|
|
446
429
|
- lib/graphql/language/visitor.rb
|
|
447
430
|
- lib/graphql/list_type.rb
|
|
@@ -489,6 +472,7 @@ files:
|
|
|
489
472
|
- lib/graphql/runtime_type_error.rb
|
|
490
473
|
- lib/graphql/scalar_type.rb
|
|
491
474
|
- lib/graphql/schema.rb
|
|
475
|
+
- lib/graphql/schema/argument.rb
|
|
492
476
|
- lib/graphql/schema/base_64_encoder.rb
|
|
493
477
|
- lib/graphql/schema/build_from_definition.rb
|
|
494
478
|
- lib/graphql/schema/build_from_definition/resolve_map.rb
|
|
@@ -496,16 +480,31 @@ files:
|
|
|
496
480
|
- lib/graphql/schema/catchall_middleware.rb
|
|
497
481
|
- lib/graphql/schema/default_parse_error.rb
|
|
498
482
|
- lib/graphql/schema/default_type_error.rb
|
|
483
|
+
- lib/graphql/schema/enum.rb
|
|
484
|
+
- lib/graphql/schema/field.rb
|
|
485
|
+
- lib/graphql/schema/field/dynamic_resolve.rb
|
|
486
|
+
- lib/graphql/schema/field/unwrapped_resolve.rb
|
|
487
|
+
- lib/graphql/schema/input_object.rb
|
|
488
|
+
- lib/graphql/schema/interface.rb
|
|
499
489
|
- lib/graphql/schema/invalid_type_error.rb
|
|
500
490
|
- lib/graphql/schema/loader.rb
|
|
491
|
+
- lib/graphql/schema/member.rb
|
|
492
|
+
- lib/graphql/schema/member/build_type.rb
|
|
493
|
+
- lib/graphql/schema/member/has_fields.rb
|
|
494
|
+
- lib/graphql/schema/member/instrumentation.rb
|
|
495
|
+
- lib/graphql/schema/member/list_type_proxy.rb
|
|
496
|
+
- lib/graphql/schema/member/non_null_type_proxy.rb
|
|
501
497
|
- lib/graphql/schema/middleware_chain.rb
|
|
502
498
|
- lib/graphql/schema/null_mask.rb
|
|
499
|
+
- lib/graphql/schema/object.rb
|
|
503
500
|
- lib/graphql/schema/possible_types.rb
|
|
504
501
|
- lib/graphql/schema/printer.rb
|
|
505
502
|
- lib/graphql/schema/rescue_middleware.rb
|
|
503
|
+
- lib/graphql/schema/scalar.rb
|
|
506
504
|
- lib/graphql/schema/timeout_middleware.rb
|
|
507
505
|
- lib/graphql/schema/traversal.rb
|
|
508
506
|
- lib/graphql/schema/type_expression.rb
|
|
507
|
+
- lib/graphql/schema/union.rb
|
|
509
508
|
- lib/graphql/schema/unique_within_type.rb
|
|
510
509
|
- lib/graphql/schema/validation.rb
|
|
511
510
|
- lib/graphql/schema/warden.rb
|
|
@@ -553,7 +552,6 @@ files:
|
|
|
553
552
|
- lib/graphql/tracing.rb
|
|
554
553
|
- lib/graphql/tracing/active_support_notifications_tracing.rb
|
|
555
554
|
- lib/graphql/tracing/appsignal_tracing.rb
|
|
556
|
-
- lib/graphql/tracing/data_dog_tracing.rb
|
|
557
555
|
- lib/graphql/tracing/new_relic_tracing.rb
|
|
558
556
|
- lib/graphql/tracing/platform_tracing.rb
|
|
559
557
|
- lib/graphql/tracing/scout_tracing.rb
|
|
@@ -893,7 +891,6 @@ files:
|
|
|
893
891
|
- spec/graphql/directive_spec.rb
|
|
894
892
|
- spec/graphql/enum_type_spec.rb
|
|
895
893
|
- spec/graphql/execution/execute_spec.rb
|
|
896
|
-
- spec/graphql/execution/instrumentation_spec.rb
|
|
897
894
|
- spec/graphql/execution/lazy/lazy_method_map_spec.rb
|
|
898
895
|
- spec/graphql/execution/lazy_spec.rb
|
|
899
896
|
- spec/graphql/execution/multiplex_spec.rb
|
|
@@ -914,15 +911,12 @@ files:
|
|
|
914
911
|
- spec/graphql/introspection/schema_type_spec.rb
|
|
915
912
|
- spec/graphql/introspection/type_by_name_field_spec.rb
|
|
916
913
|
- spec/graphql/introspection/type_type_spec.rb
|
|
917
|
-
- spec/graphql/language/block_string_spec.rb
|
|
918
914
|
- spec/graphql/language/definition_slice_spec.rb
|
|
919
|
-
- spec/graphql/language/document_from_schema_definition_spec.rb
|
|
920
915
|
- spec/graphql/language/equality_spec.rb
|
|
921
916
|
- spec/graphql/language/generation_spec.rb
|
|
922
917
|
- spec/graphql/language/lexer_spec.rb
|
|
923
918
|
- spec/graphql/language/nodes_spec.rb
|
|
924
919
|
- spec/graphql/language/parser_spec.rb
|
|
925
|
-
- spec/graphql/language/printer_spec.rb
|
|
926
920
|
- spec/graphql/language/visitor_spec.rb
|
|
927
921
|
- spec/graphql/list_type_spec.rb
|
|
928
922
|
- spec/graphql/non_null_type_spec.rb
|
|
@@ -950,13 +944,20 @@ files:
|
|
|
950
944
|
- spec/graphql/scalar_type_spec.rb
|
|
951
945
|
- spec/graphql/schema/build_from_definition_spec.rb
|
|
952
946
|
- spec/graphql/schema/catchall_middleware_spec.rb
|
|
947
|
+
- spec/graphql/schema/enum_spec.rb
|
|
948
|
+
- spec/graphql/schema/field_spec.rb
|
|
949
|
+
- spec/graphql/schema/input_object_spec.rb
|
|
950
|
+
- spec/graphql/schema/interface_spec.rb
|
|
953
951
|
- spec/graphql/schema/loader_spec.rb
|
|
954
952
|
- spec/graphql/schema/middleware_chain_spec.rb
|
|
953
|
+
- spec/graphql/schema/object_spec.rb
|
|
955
954
|
- spec/graphql/schema/printer_spec.rb
|
|
956
955
|
- spec/graphql/schema/rescue_middleware_spec.rb
|
|
956
|
+
- spec/graphql/schema/scalar_spec.rb
|
|
957
957
|
- spec/graphql/schema/timeout_middleware_spec.rb
|
|
958
958
|
- spec/graphql/schema/traversal_spec.rb
|
|
959
959
|
- spec/graphql/schema/type_expression_spec.rb
|
|
960
|
+
- spec/graphql/schema/union_spec.rb
|
|
960
961
|
- spec/graphql/schema/unique_within_type_spec.rb
|
|
961
962
|
- spec/graphql/schema/validation_spec.rb
|
|
962
963
|
- spec/graphql/schema/warden_spec.rb
|
|
@@ -1001,6 +1002,7 @@ files:
|
|
|
1001
1002
|
- spec/support/base_generator_test.rb
|
|
1002
1003
|
- spec/support/dummy/data.rb
|
|
1003
1004
|
- spec/support/dummy/schema.rb
|
|
1005
|
+
- spec/support/jazz.rb
|
|
1004
1006
|
- spec/support/lazy_helpers.rb
|
|
1005
1007
|
- spec/support/magic_cards/schema.graphql
|
|
1006
1008
|
- spec/support/minimum_input_object.rb
|
|
@@ -1022,15 +1024,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
1022
1024
|
requirements:
|
|
1023
1025
|
- - ">="
|
|
1024
1026
|
- !ruby/object:Gem::Version
|
|
1025
|
-
version: 2.
|
|
1027
|
+
version: 2.2.0
|
|
1026
1028
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1027
1029
|
requirements:
|
|
1028
|
-
- - "
|
|
1030
|
+
- - ">"
|
|
1029
1031
|
- !ruby/object:Gem::Version
|
|
1030
|
-
version:
|
|
1032
|
+
version: 1.3.1
|
|
1031
1033
|
requirements: []
|
|
1032
1034
|
rubyforge_project:
|
|
1033
|
-
rubygems_version: 2.
|
|
1035
|
+
rubygems_version: 2.6.11
|
|
1034
1036
|
signing_key:
|
|
1035
1037
|
specification_version: 4
|
|
1036
1038
|
summary: A GraphQL language and runtime for Ruby
|
|
@@ -1365,7 +1367,6 @@ test_files:
|
|
|
1365
1367
|
- spec/graphql/directive_spec.rb
|
|
1366
1368
|
- spec/graphql/enum_type_spec.rb
|
|
1367
1369
|
- spec/graphql/execution/execute_spec.rb
|
|
1368
|
-
- spec/graphql/execution/instrumentation_spec.rb
|
|
1369
1370
|
- spec/graphql/execution/lazy/lazy_method_map_spec.rb
|
|
1370
1371
|
- spec/graphql/execution/lazy_spec.rb
|
|
1371
1372
|
- spec/graphql/execution/multiplex_spec.rb
|
|
@@ -1386,15 +1387,12 @@ test_files:
|
|
|
1386
1387
|
- spec/graphql/introspection/schema_type_spec.rb
|
|
1387
1388
|
- spec/graphql/introspection/type_by_name_field_spec.rb
|
|
1388
1389
|
- spec/graphql/introspection/type_type_spec.rb
|
|
1389
|
-
- spec/graphql/language/block_string_spec.rb
|
|
1390
1390
|
- spec/graphql/language/definition_slice_spec.rb
|
|
1391
|
-
- spec/graphql/language/document_from_schema_definition_spec.rb
|
|
1392
1391
|
- spec/graphql/language/equality_spec.rb
|
|
1393
1392
|
- spec/graphql/language/generation_spec.rb
|
|
1394
1393
|
- spec/graphql/language/lexer_spec.rb
|
|
1395
1394
|
- spec/graphql/language/nodes_spec.rb
|
|
1396
1395
|
- spec/graphql/language/parser_spec.rb
|
|
1397
|
-
- spec/graphql/language/printer_spec.rb
|
|
1398
1396
|
- spec/graphql/language/visitor_spec.rb
|
|
1399
1397
|
- spec/graphql/list_type_spec.rb
|
|
1400
1398
|
- spec/graphql/non_null_type_spec.rb
|
|
@@ -1422,13 +1420,20 @@ test_files:
|
|
|
1422
1420
|
- spec/graphql/scalar_type_spec.rb
|
|
1423
1421
|
- spec/graphql/schema/build_from_definition_spec.rb
|
|
1424
1422
|
- spec/graphql/schema/catchall_middleware_spec.rb
|
|
1423
|
+
- spec/graphql/schema/enum_spec.rb
|
|
1424
|
+
- spec/graphql/schema/field_spec.rb
|
|
1425
|
+
- spec/graphql/schema/input_object_spec.rb
|
|
1426
|
+
- spec/graphql/schema/interface_spec.rb
|
|
1425
1427
|
- spec/graphql/schema/loader_spec.rb
|
|
1426
1428
|
- spec/graphql/schema/middleware_chain_spec.rb
|
|
1429
|
+
- spec/graphql/schema/object_spec.rb
|
|
1427
1430
|
- spec/graphql/schema/printer_spec.rb
|
|
1428
1431
|
- spec/graphql/schema/rescue_middleware_spec.rb
|
|
1432
|
+
- spec/graphql/schema/scalar_spec.rb
|
|
1429
1433
|
- spec/graphql/schema/timeout_middleware_spec.rb
|
|
1430
1434
|
- spec/graphql/schema/traversal_spec.rb
|
|
1431
1435
|
- spec/graphql/schema/type_expression_spec.rb
|
|
1436
|
+
- spec/graphql/schema/union_spec.rb
|
|
1432
1437
|
- spec/graphql/schema/unique_within_type_spec.rb
|
|
1433
1438
|
- spec/graphql/schema/validation_spec.rb
|
|
1434
1439
|
- spec/graphql/schema/warden_spec.rb
|
|
@@ -1473,6 +1478,7 @@ test_files:
|
|
|
1473
1478
|
- spec/support/base_generator_test.rb
|
|
1474
1479
|
- spec/support/dummy/data.rb
|
|
1475
1480
|
- spec/support/dummy/schema.rb
|
|
1481
|
+
- spec/support/jazz.rb
|
|
1476
1482
|
- spec/support/lazy_helpers.rb
|
|
1477
1483
|
- spec/support/magic_cards/schema.graphql
|
|
1478
1484
|
- spec/support/minimum_input_object.rb
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module GraphQL
|
|
3
|
-
module Execution
|
|
4
|
-
module Instrumentation
|
|
5
|
-
# This function implements the instrumentation policy:
|
|
6
|
-
#
|
|
7
|
-
# - Instrumenters are a stack; the first `before_query` will have the last `after_query`
|
|
8
|
-
# - If a `before_` hook returned without an error, its corresponding `after_` hook will run.
|
|
9
|
-
# - If the `before_` hook did _not_ run, the `after_` hook will not be called.
|
|
10
|
-
#
|
|
11
|
-
# When errors are raised from `after_` hooks:
|
|
12
|
-
# - Subsequent `after_` hooks _are_ called
|
|
13
|
-
# - The first raised error is captured; later errors are ignored
|
|
14
|
-
# - If an error was capture, it's re-raised after all hooks are finished
|
|
15
|
-
#
|
|
16
|
-
# Partial runs of instrumentation are possible:
|
|
17
|
-
# - If a `before_multiplex` hook raises an error, no `before_query` hooks will run
|
|
18
|
-
# - If a `before_query` hook raises an error, subsequent `before_query` hooks will not run (on any query)
|
|
19
|
-
def self.apply_instrumenters(multiplex)
|
|
20
|
-
schema = multiplex.schema
|
|
21
|
-
queries = multiplex.queries
|
|
22
|
-
query_instrumenters = schema.instrumenters[:query]
|
|
23
|
-
multiplex_instrumenters = schema.instrumenters[:multiplex]
|
|
24
|
-
|
|
25
|
-
# First, run multiplex instrumentation, then query instrumentation for each query
|
|
26
|
-
call_hooks(multiplex_instrumenters, multiplex, :before_multiplex, :after_multiplex) do
|
|
27
|
-
each_query_call_hooks(query_instrumenters, queries) do
|
|
28
|
-
# Let them be executed
|
|
29
|
-
yield
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
class << self
|
|
35
|
-
private
|
|
36
|
-
# Call the before_ hooks of each query,
|
|
37
|
-
# Then yield if no errors.
|
|
38
|
-
# `call_hooks` takes care of appropriate cleanup.
|
|
39
|
-
def each_query_call_hooks(instrumenters, queries, i = 0)
|
|
40
|
-
if i >= queries.length
|
|
41
|
-
yield
|
|
42
|
-
else
|
|
43
|
-
query = queries[i]
|
|
44
|
-
call_hooks(instrumenters, query, :before_query, :after_query) {
|
|
45
|
-
each_query_call_hooks(instrumenters, queries, i + 1) {
|
|
46
|
-
yield
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Call each before hook, and if they all succeed, yield.
|
|
53
|
-
# If they don't all succeed, call after_ for each one that succeeded.
|
|
54
|
-
def call_hooks(instrumenters, object, before_hook_name, after_hook_name, i = 0)
|
|
55
|
-
if i >= instrumenters.length
|
|
56
|
-
# We've reached the end of the instrumenters, so start exiting the call stack.
|
|
57
|
-
# (This will eventually call the originally-passed block.)
|
|
58
|
-
yield
|
|
59
|
-
else
|
|
60
|
-
# Get the next instrumenter and call the before_hook.
|
|
61
|
-
instrumenter = instrumenters[i]
|
|
62
|
-
instrumenter.public_send(before_hook_name, object)
|
|
63
|
-
# At this point, the before_hook did _not_ raise an error.
|
|
64
|
-
# (If it did raise an error, we wouldn't reach this point.)
|
|
65
|
-
# So we should guarantee that we run the after_hook.
|
|
66
|
-
begin
|
|
67
|
-
# Call the next instrumenter on the list,
|
|
68
|
-
# basically passing along the original block
|
|
69
|
-
call_hooks(instrumenters, object, before_hook_name, after_hook_name, i + 1) {
|
|
70
|
-
yield
|
|
71
|
-
}
|
|
72
|
-
ensure
|
|
73
|
-
# Regardless of how the next instrumenter in the list behaves,
|
|
74
|
-
# call the after_hook of this instrumenter
|
|
75
|
-
instrumenter.public_send(after_hook_name, object)
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module GraphQL
|
|
3
|
-
module Language
|
|
4
|
-
module BlockString
|
|
5
|
-
# Remove leading and trailing whitespace from a block string.
|
|
6
|
-
# See "Block Strings" in https://github.com/facebook/graphql/blob/master/spec/Section%202%20--%20Language.md
|
|
7
|
-
def self.trim_whitespace(str)
|
|
8
|
-
lines = str.split("\n")
|
|
9
|
-
common_indent = nil
|
|
10
|
-
|
|
11
|
-
# find the common whitespace
|
|
12
|
-
lines.each_with_index do |line, idx|
|
|
13
|
-
if idx == 0
|
|
14
|
-
next
|
|
15
|
-
end
|
|
16
|
-
line_length = line.size
|
|
17
|
-
line_indent = line[/\A */].size
|
|
18
|
-
if line_indent < line_length && (common_indent.nil? || line_indent < common_indent)
|
|
19
|
-
common_indent = line_indent
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Remove the common whitespace
|
|
24
|
-
if common_indent
|
|
25
|
-
lines.each_with_index do |line, idx|
|
|
26
|
-
if idx == 0
|
|
27
|
-
next
|
|
28
|
-
else
|
|
29
|
-
line[0, common_indent] = ""
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# Remove leading & trailing blank lines
|
|
35
|
-
while lines.first.empty?
|
|
36
|
-
lines.shift
|
|
37
|
-
end
|
|
38
|
-
while lines.last.empty?
|
|
39
|
-
lines.pop
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# Rebuild the string
|
|
43
|
-
lines.join("\n")
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module GraphQL
|
|
3
|
-
module Language
|
|
4
|
-
# @api private
|
|
5
|
-
#
|
|
6
|
-
# {GraphQL::Language::DocumentFromSchemaDefinition} is used to convert a {GraphQL::Schema} object
|
|
7
|
-
# To a {GraphQL::Language::Document} AST node.
|
|
8
|
-
#
|
|
9
|
-
# @param context [Hash]
|
|
10
|
-
# @param only [<#call(member, ctx)>]
|
|
11
|
-
# @param except [<#call(member, ctx)>]
|
|
12
|
-
# @param include_introspection_types [Boolean] Whether or not to include introspection types in the AST
|
|
13
|
-
# @param include_built_in_scalars [Boolean] Whether or not to include built in scalars in the AST
|
|
14
|
-
# @param include_built_in_directives [Boolean] Whether or not to include built in diirectives in the AST
|
|
15
|
-
class DocumentFromSchemaDefinition
|
|
16
|
-
def initialize(
|
|
17
|
-
schema, context: nil, only: nil, except: nil, include_introspection_types: false,
|
|
18
|
-
include_built_in_directives: false, include_built_in_scalars: false, always_include_schema: false
|
|
19
|
-
)
|
|
20
|
-
@schema = schema
|
|
21
|
-
@always_include_schema = always_include_schema
|
|
22
|
-
@include_introspection_types = include_introspection_types
|
|
23
|
-
@include_built_in_scalars = include_built_in_scalars
|
|
24
|
-
@include_built_in_directives = include_built_in_directives
|
|
25
|
-
|
|
26
|
-
@warden = GraphQL::Schema::Warden.new(
|
|
27
|
-
GraphQL::Filter.new(only: only, except: except),
|
|
28
|
-
schema: @schema,
|
|
29
|
-
context: context,
|
|
30
|
-
)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def document
|
|
34
|
-
GraphQL::Language::Nodes::Document.new(
|
|
35
|
-
definitions: build_definition_nodes
|
|
36
|
-
)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def build_schema_node
|
|
40
|
-
GraphQL::Language::Nodes::SchemaDefinition.new(
|
|
41
|
-
query: warden.root_type_for_operation("query"),
|
|
42
|
-
mutation: warden.root_type_for_operation("mutation"),
|
|
43
|
-
subscription: warden.root_type_for_operation("subscription")
|
|
44
|
-
)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def build_object_type_node(object_type)
|
|
48
|
-
GraphQL::Language::Nodes::ObjectTypeDefinition.new(
|
|
49
|
-
name: object_type.name,
|
|
50
|
-
interfaces: warden.interfaces(object_type).sort_by(&:name).map { |iface| build_type_name_node(iface) },
|
|
51
|
-
fields: build_field_nodes(warden.fields(object_type)),
|
|
52
|
-
description: object_type.description,
|
|
53
|
-
)
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def build_field_node(field)
|
|
57
|
-
field_node = GraphQL::Language::Nodes::FieldDefinition.new(
|
|
58
|
-
name: field.name,
|
|
59
|
-
arguments: build_argument_nodes(warden.arguments(field)),
|
|
60
|
-
type: build_type_name_node(field.type),
|
|
61
|
-
description: field.description,
|
|
62
|
-
)
|
|
63
|
-
|
|
64
|
-
if field.deprecation_reason
|
|
65
|
-
field_node.directives << GraphQL::Language::Nodes::Directive.new(
|
|
66
|
-
name: GraphQL::Directive::DeprecatedDirective.name,
|
|
67
|
-
arguments: [GraphQL::Language::Nodes::Argument.new(name: "reason", value: field.deprecation_reason)]
|
|
68
|
-
)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
field_node
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def build_union_type_node(union_type)
|
|
75
|
-
GraphQL::Language::Nodes::UnionTypeDefinition.new(
|
|
76
|
-
name: union_type.name,
|
|
77
|
-
description: union_type.description,
|
|
78
|
-
types: warden.possible_types(union_type).sort_by(&:name).map { |type| build_type_name_node(type) }
|
|
79
|
-
)
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
def build_interface_type_node(interface_type)
|
|
83
|
-
GraphQL::Language::Nodes::InterfaceTypeDefinition.new(
|
|
84
|
-
name: interface_type.name,
|
|
85
|
-
description: interface_type.description,
|
|
86
|
-
fields: build_field_nodes(warden.fields(interface_type))
|
|
87
|
-
)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def build_enum_type_node(enum_type)
|
|
91
|
-
GraphQL::Language::Nodes::EnumTypeDefinition.new(
|
|
92
|
-
name: enum_type.name,
|
|
93
|
-
values: warden.enum_values(enum_type).sort_by(&:name).map do |enum_value|
|
|
94
|
-
build_enum_value_node(enum_value)
|
|
95
|
-
end,
|
|
96
|
-
description: enum_type.description,
|
|
97
|
-
)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def build_enum_value_node(enum_value)
|
|
101
|
-
enum_value_node = GraphQL::Language::Nodes::EnumValueDefinition.new(
|
|
102
|
-
name: enum_value.name,
|
|
103
|
-
description: enum_value.description,
|
|
104
|
-
)
|
|
105
|
-
|
|
106
|
-
if enum_value.deprecation_reason
|
|
107
|
-
enum_value_node.directives << GraphQL::Language::Nodes::Directive.new(
|
|
108
|
-
name: GraphQL::Directive::DeprecatedDirective.name,
|
|
109
|
-
arguments: [GraphQL::Language::Nodes::Argument.new(name: "reason", value: enum_value.deprecation_reason)]
|
|
110
|
-
)
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
enum_value_node
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def build_scalar_type_node(scalar_type)
|
|
117
|
-
GraphQL::Language::Nodes::ScalarTypeDefinition.new(
|
|
118
|
-
name: scalar_type.name,
|
|
119
|
-
description: scalar_type.description,
|
|
120
|
-
)
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
def build_argument_node(argument)
|
|
124
|
-
argument_node = GraphQL::Language::Nodes::InputValueDefinition.new(
|
|
125
|
-
name: argument.name,
|
|
126
|
-
description: argument.description,
|
|
127
|
-
type: build_type_name_node(argument.type),
|
|
128
|
-
)
|
|
129
|
-
|
|
130
|
-
if argument.default_value?
|
|
131
|
-
argument_node.default_value = build_default_value(argument.default_value, argument.type)
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
argument_node
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
def build_input_object_node(input_object)
|
|
138
|
-
GraphQL::Language::Nodes::InputObjectTypeDefinition.new(
|
|
139
|
-
name: input_object.name,
|
|
140
|
-
fields: build_argument_nodes(warden.arguments(input_object)),
|
|
141
|
-
description: input_object.description,
|
|
142
|
-
)
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
def build_directive_node(directive)
|
|
146
|
-
GraphQL::Language::Nodes::DirectiveDefinition.new(
|
|
147
|
-
name: directive.name,
|
|
148
|
-
arguments: build_argument_nodes(warden.arguments(directive)),
|
|
149
|
-
locations: directive.locations.map(&:to_s),
|
|
150
|
-
description: directive.description,
|
|
151
|
-
)
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
def build_type_name_node(type)
|
|
155
|
-
case type
|
|
156
|
-
when GraphQL::ListType
|
|
157
|
-
GraphQL::Language::Nodes::ListType.new(
|
|
158
|
-
of_type: build_type_name_node(type.of_type)
|
|
159
|
-
)
|
|
160
|
-
when GraphQL::NonNullType
|
|
161
|
-
GraphQL::Language::Nodes::NonNullType.new(
|
|
162
|
-
of_type: build_type_name_node(type.of_type)
|
|
163
|
-
)
|
|
164
|
-
else
|
|
165
|
-
GraphQL::Language::Nodes::TypeName.new(name: type.name)
|
|
166
|
-
end
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
def build_default_value(default_value, type)
|
|
170
|
-
if default_value.nil?
|
|
171
|
-
return GraphQL::Language::Nodes::NullValue.new(name: "null")
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
case type
|
|
175
|
-
when GraphQL::ScalarType
|
|
176
|
-
type.coerce_isolated_result(default_value)
|
|
177
|
-
when EnumType
|
|
178
|
-
GraphQL::Language::Nodes::Enum.new(name: type.coerce_isolated_result(default_value))
|
|
179
|
-
when InputObjectType
|
|
180
|
-
GraphQL::Language::Nodes::InputObject.new(
|
|
181
|
-
arguments: default_value.to_h.map do |arg_name, arg_value|
|
|
182
|
-
arg_type = type.input_fields.fetch(arg_name.to_s).type
|
|
183
|
-
GraphQL::Language::Nodes::Argument.new(
|
|
184
|
-
name: arg_name,
|
|
185
|
-
value: build_default_value(arg_value, arg_type)
|
|
186
|
-
)
|
|
187
|
-
end
|
|
188
|
-
)
|
|
189
|
-
when NonNullType
|
|
190
|
-
build_default_value(default_value, type.of_type)
|
|
191
|
-
when ListType
|
|
192
|
-
default_value.to_a.map { |v| build_default_value(v, type.of_type) }
|
|
193
|
-
else
|
|
194
|
-
raise NotImplementedError, "Unexpected default value type #{type.inspect}"
|
|
195
|
-
end
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
def build_type_definition_node(type)
|
|
199
|
-
case type
|
|
200
|
-
when GraphQL::ObjectType
|
|
201
|
-
build_object_type_node(type)
|
|
202
|
-
when GraphQL::UnionType
|
|
203
|
-
build_union_type_node(type)
|
|
204
|
-
when GraphQL::InterfaceType
|
|
205
|
-
build_interface_type_node(type)
|
|
206
|
-
when GraphQL::ScalarType
|
|
207
|
-
build_scalar_type_node(type)
|
|
208
|
-
when GraphQL::EnumType
|
|
209
|
-
build_enum_type_node(type)
|
|
210
|
-
when GraphQL::InputObjectType
|
|
211
|
-
build_input_object_node(type)
|
|
212
|
-
else
|
|
213
|
-
raise TypeError
|
|
214
|
-
end
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
def build_argument_nodes(arguments)
|
|
218
|
-
arguments
|
|
219
|
-
.map { |arg| build_argument_node(arg) }
|
|
220
|
-
.sort_by(&:name)
|
|
221
|
-
end
|
|
222
|
-
|
|
223
|
-
def build_directive_nodes(directives)
|
|
224
|
-
if !include_built_in_directives
|
|
225
|
-
directives = directives.reject { |directive| directive.default_directive? }
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
directives
|
|
229
|
-
.map { |directive| build_directive_node(directive) }
|
|
230
|
-
.sort_by(&:name)
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
def build_definition_nodes
|
|
234
|
-
definitions = []
|
|
235
|
-
definitions << build_schema_node if include_schema_node?
|
|
236
|
-
definitions += build_directive_nodes(warden.directives)
|
|
237
|
-
definitions += build_type_definition_nodes(warden.types)
|
|
238
|
-
definitions
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
def build_type_definition_nodes(types)
|
|
242
|
-
if !include_introspection_types
|
|
243
|
-
types = types.reject { |type| type.introspection? }
|
|
244
|
-
end
|
|
245
|
-
|
|
246
|
-
if !include_built_in_scalars
|
|
247
|
-
types = types.reject { |type| type.default_scalar? }
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
types
|
|
251
|
-
.map { |type| build_type_definition_node(type) }
|
|
252
|
-
.sort_by(&:name)
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
def build_field_nodes(fields)
|
|
256
|
-
fields
|
|
257
|
-
.map { |field| build_field_node(field) }
|
|
258
|
-
.sort_by(&:name)
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
private
|
|
262
|
-
|
|
263
|
-
def include_schema_node?
|
|
264
|
-
always_include_schema || !schema_respects_root_name_conventions?(schema)
|
|
265
|
-
end
|
|
266
|
-
|
|
267
|
-
def schema_respects_root_name_conventions?(schema)
|
|
268
|
-
(schema.query.nil? || schema.query.name == 'Query') &&
|
|
269
|
-
(schema.mutation.nil? || schema.mutation.name == 'Mutation') &&
|
|
270
|
-
(schema.subscription.nil? || schema.subscription.name == 'Subscription')
|
|
271
|
-
end
|
|
272
|
-
|
|
273
|
-
attr_reader :schema, :warden, :always_include_schema,
|
|
274
|
-
:include_introspection_types, :include_built_in_directives, :include_built_in_scalars
|
|
275
|
-
end
|
|
276
|
-
end
|
|
277
|
-
end
|