graphql 1.7.6 → 1.8.0
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/generators/graphql/function_generator.rb +1 -1
- data/lib/generators/graphql/install_generator.rb +14 -8
- data/lib/generators/graphql/loader_generator.rb +1 -1
- data/lib/generators/graphql/mutation_generator.rb +6 -1
- data/lib/generators/graphql/templates/function.erb +2 -2
- data/lib/generators/graphql/templates/loader.erb +2 -2
- data/lib/generators/graphql/templates/schema.erb +1 -1
- data/lib/graphql/argument.rb +25 -19
- data/lib/graphql/backtrace/tracer.rb +16 -22
- data/lib/graphql/backtrace.rb +1 -1
- data/lib/graphql/backwards_compatibility.rb +2 -3
- data/lib/graphql/base_type.rb +31 -31
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +14 -0
- data/lib/graphql/compatibility/query_parser_specification.rb +117 -0
- data/lib/graphql/define/assign_object_field.rb +5 -12
- data/lib/graphql/deprecated_dsl.rb +42 -0
- data/lib/graphql/directive.rb +1 -0
- data/lib/graphql/enum_type.rb +3 -1
- data/lib/graphql/execution/execute.rb +21 -13
- data/lib/graphql/execution/instrumentation.rb +82 -0
- data/lib/graphql/execution/lazy/lazy_method_map.rb +1 -1
- data/lib/graphql/execution/lazy/resolve.rb +1 -3
- data/lib/graphql/execution/multiplex.rb +12 -29
- data/lib/graphql/execution.rb +1 -0
- data/lib/graphql/field.rb +21 -4
- data/lib/graphql/function.rb +14 -0
- data/lib/graphql/input_object_type.rb +3 -1
- data/lib/graphql/interface_type.rb +5 -3
- data/lib/graphql/internal_representation/node.rb +26 -14
- data/lib/graphql/internal_representation/visit.rb +3 -6
- data/lib/graphql/introspection/base_object.rb +16 -0
- data/lib/graphql/introspection/directive_location_enum.rb +11 -7
- data/lib/graphql/introspection/directive_type.rb +23 -16
- data/lib/graphql/introspection/dynamic_fields.rb +11 -0
- data/lib/graphql/introspection/entry_points.rb +29 -0
- data/lib/graphql/introspection/enum_value_type.rb +16 -11
- data/lib/graphql/introspection/field_type.rb +21 -12
- data/lib/graphql/introspection/input_value_type.rb +26 -23
- data/lib/graphql/introspection/schema_field.rb +7 -2
- data/lib/graphql/introspection/schema_type.rb +36 -22
- data/lib/graphql/introspection/type_by_name_field.rb +10 -2
- data/lib/graphql/introspection/type_kind_enum.rb +10 -6
- data/lib/graphql/introspection/type_type.rb +85 -23
- data/lib/graphql/introspection/typename_field.rb +1 -0
- data/lib/graphql/introspection.rb +3 -10
- data/lib/graphql/language/block_string.rb +47 -0
- data/lib/graphql/language/document_from_schema_definition.rb +280 -0
- data/lib/graphql/language/generation.rb +3 -182
- data/lib/graphql/language/lexer.rb +144 -69
- data/lib/graphql/language/lexer.rl +15 -4
- data/lib/graphql/language/nodes.rb +141 -78
- data/lib/graphql/language/parser.rb +677 -630
- data/lib/graphql/language/parser.y +18 -12
- data/lib/graphql/language/printer.rb +361 -0
- data/lib/graphql/language/token.rb +10 -3
- data/lib/graphql/language.rb +3 -0
- data/lib/graphql/non_null_type.rb +1 -1
- data/lib/graphql/object_type.rb +1 -6
- data/lib/graphql/query/arguments.rb +63 -32
- data/lib/graphql/query/context.rb +32 -2
- data/lib/graphql/query/literal_input.rb +4 -1
- data/lib/graphql/query/null_context.rb +1 -1
- data/lib/graphql/query/result.rb +1 -1
- data/lib/graphql/query/variables.rb +21 -3
- data/lib/graphql/query.rb +19 -6
- data/lib/graphql/railtie.rb +109 -0
- data/lib/graphql/relay/connection_resolve.rb +3 -0
- data/lib/graphql/relay/connection_type.rb +5 -3
- data/lib/graphql/relay/edge_type.rb +2 -1
- data/lib/graphql/relay/global_id_resolve.rb +5 -1
- data/lib/graphql/relay/mongo_relation_connection.rb +40 -0
- data/lib/graphql/relay/mutation/instrumentation.rb +1 -1
- data/lib/graphql/relay/mutation/resolve.rb +5 -1
- data/lib/graphql/relay/relation_connection.rb +14 -19
- data/lib/graphql/relay/type_extensions.rb +30 -0
- data/lib/graphql/relay.rb +2 -0
- data/lib/graphql/scalar_type.rb +14 -2
- data/lib/graphql/schema/argument.rb +92 -0
- data/lib/graphql/schema/build_from_definition.rb +64 -18
- data/lib/graphql/schema/enum.rb +85 -0
- data/lib/graphql/schema/enum_value.rb +74 -0
- data/lib/graphql/schema/field.rb +372 -0
- data/lib/graphql/schema/finder.rb +153 -0
- data/lib/graphql/schema/input_object.rb +87 -0
- data/lib/graphql/schema/interface.rb +105 -0
- data/lib/graphql/schema/introspection_system.rb +93 -0
- data/lib/graphql/schema/late_bound_type.rb +32 -0
- data/lib/graphql/schema/list.rb +32 -0
- data/lib/graphql/schema/loader.rb +2 -2
- data/lib/graphql/schema/member/accepts_definition.rb +152 -0
- data/lib/graphql/schema/member/base_dsl_methods.rb +100 -0
- data/lib/graphql/schema/member/build_type.rb +137 -0
- data/lib/graphql/schema/member/cached_graphql_definition.rb +26 -0
- data/lib/graphql/schema/member/graphql_type_names.rb +21 -0
- data/lib/graphql/schema/member/has_arguments.rb +50 -0
- data/lib/graphql/schema/member/has_fields.rb +130 -0
- data/lib/graphql/schema/member/instrumentation.rb +115 -0
- data/lib/graphql/schema/member/type_system_helpers.rb +34 -0
- data/lib/graphql/schema/member.rb +28 -0
- data/lib/graphql/schema/middleware_chain.rb +5 -1
- data/lib/graphql/schema/mutation.rb +138 -0
- data/lib/graphql/schema/non_null.rb +38 -0
- data/lib/graphql/schema/object.rb +81 -0
- data/lib/graphql/schema/printer.rb +33 -266
- data/lib/graphql/schema/relay_classic_mutation.rb +87 -0
- data/lib/graphql/schema/rescue_middleware.rb +8 -7
- data/lib/graphql/schema/resolver.rb +122 -0
- data/lib/graphql/schema/scalar.rb +35 -0
- data/lib/graphql/schema/traversal.rb +102 -22
- data/lib/graphql/schema/union.rb +36 -0
- data/lib/graphql/schema/validation.rb +3 -2
- data/lib/graphql/schema.rb +381 -12
- data/lib/graphql/static_validation/definition_dependencies.rb +1 -1
- data/lib/graphql/static_validation/literal_validator.rb +16 -4
- data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +6 -6
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +5 -1
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +15 -8
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +11 -1
- data/lib/graphql/static_validation/validation_context.rb +1 -1
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +7 -5
- data/lib/graphql/subscriptions/instrumentation.rb +5 -1
- data/lib/graphql/subscriptions/serialize.rb +2 -0
- data/lib/graphql/subscriptions.rb +90 -16
- data/lib/graphql/tracing/data_dog_tracing.rb +49 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +26 -0
- data/lib/graphql/tracing/platform_tracing.rb +20 -7
- data/lib/graphql/tracing/scout_tracing.rb +2 -2
- data/lib/graphql/tracing.rb +1 -0
- data/lib/graphql/unresolved_type_error.rb +3 -2
- data/lib/graphql/upgrader/member.rb +894 -0
- data/lib/graphql/upgrader/schema.rb +37 -0
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +5 -25
- data/readme.md +2 -2
- data/spec/dummy/app/channels/graphql_channel.rb +23 -2
- data/spec/dummy/log/development.log +239 -0
- data/spec/dummy/log/test.log +410 -0
- data/spec/dummy/test/system/action_cable_subscription_test.rb +4 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-x/-xYZjAnuuzgR79fcznLTQtSdh6AARxu8FcQ_J6p7L3U.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/13/13HiV12xyoQvT-1L39ZzLwMZxjyaGMiENmfw7f-QTIc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3W/3Wtf5pCWdqq0AB-iB0Y9uUNrTkruRxIEf1XFn_BETU0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5i/5iguGafb4hOn8262Kn8Q37ogNN9MxxQKGKNzHAzUcvI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8m/8mj2T6yy847Mc2Z7k3Xzh8O91hhVJt3NrPe8ASNDlIA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DT/DTQyMpr4ABZYQetsdRJ5A7S4jf1r3ie4FGOR7GZBNSs.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Dq/DqJ5_yJPrP5iLlOQyTQsjAVI5FE5LCVDkED0f7GgsSo.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/F8/F8MUNRzORGFgr329fNM0xLaoWCXdv3BIalT7dsvLfjs.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KB/KB07ZaKNC5uXJ7TjLi-WqnY6g7dq8wWp_8N3HNjBNxg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Rw/RwDuCV-XpnCtjNkvhpJfBuxXMk0b5AD3L9eR6M-wcy0.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UL/ULdjhhb0bRuqmaG7XSZlFYzGYCXTDnqZuJBTWRlzqgw.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Up/UpPNgh0yYoUsyMDh5zWqe_U6qJIyTC6-dxMMAs1vvlM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Wg/Wguh-szFGTI1gaL6npYwPekMXflugRei7F_mOyRucXg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/X-/X-khLYMA9mqFRPg3zAi86mREDxpKl4bdKYp3uF6WHos.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bi/BIkdhfxsezxM4q-HZ4oCNTq97WEJTigcq0tpX2cDvbY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ff/FfxmA4CMHQZT7exx0G7NS1Wpcnny0vzp-Jhc2H36bp8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gE/gEiiG4GZNy_djEjK2pHm_NgA-gyhLZhdQvo0Yt96GqE.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gn/gnA9ZSqpjccNL2m8pe_jBvY6SinXlCzXDWyop83Od8s.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lO/lOAan3cMwCE_Hli6gsDML88xFNfn0nxPmvrSkW7eEOw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/m1/M1pv8MJEPLXGLvS8QxVh3DSO9cI4mRt5FHFWdrvUj6o.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/m7/m77qH7ZqH0_0SmwJbiKGDd-aLau1Dav847DC6ge46zY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/sj/sjRjnjRB37lH2vrgtkdJ8Cz84__IJ978IuKTM7HcztI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/um/um1JrirR4hJhK-1rE-HywlyCi5ibgxHVrReiujZBWJM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/v4/v4fwVytD7ITcE0_GDbslZEYud8a5Okm85fV1o7SDl6g.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/v_/v_0PAQt0iipQjFP5zjgkkk9Stnpf4VzvnMv67d1Keuw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wd/wdT9U4MKxe1PyqNjVuCKMpCl3dxGCIRJIlwUTfh2DQU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xI/xIaxut_fEIhKBDqljTNwYaADK9kj3gG0ESrfHs-5_og.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/y0/y0SJOqIx2fn1SKqOkAihsQow0trRJrSIyAswufVuoA8.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zg/zgpzeaX-KZErHyGJ1aBH3ZusweNXMneVZule88XsIJI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zy/zYFltDy-8VC-uKq2BVEiJJyYXNFvVzAKuMlR3ZIYZsk.cache +0 -0
- data/spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png +0 -0
- data/spec/fixtures/upgrader/account.original.rb +19 -0
- data/spec/fixtures/upgrader/account.transformed.rb +20 -0
- data/spec/fixtures/upgrader/blame_range.original.rb +43 -0
- data/spec/fixtures/upgrader/blame_range.transformed.rb +30 -0
- data/spec/fixtures/upgrader/date_time.original.rb +24 -0
- data/spec/fixtures/upgrader/date_time.transformed.rb +23 -0
- data/spec/fixtures/upgrader/delete_project.original.rb +28 -0
- data/spec/fixtures/upgrader/delete_project.transformed.rb +27 -0
- data/spec/fixtures/upgrader/gist_order_field.original.rb +14 -0
- data/spec/fixtures/upgrader/gist_order_field.transformed.rb +13 -0
- data/spec/fixtures/upgrader/increment_count.original.rb +59 -0
- data/spec/fixtures/upgrader/increment_count.transformed.rb +50 -0
- data/spec/fixtures/upgrader/photo.original.rb +10 -0
- data/spec/fixtures/upgrader/photo.transformed.rb +12 -0
- data/spec/fixtures/upgrader/release_order.original.rb +15 -0
- data/spec/fixtures/upgrader/release_order.transformed.rb +14 -0
- data/spec/fixtures/upgrader/starrable.original.rb +49 -0
- data/spec/fixtures/upgrader/starrable.transformed.rb +46 -0
- data/spec/fixtures/upgrader/subscribable.original.rb +55 -0
- data/spec/fixtures/upgrader/subscribable.transformed.rb +51 -0
- data/spec/fixtures/upgrader/type_x.original.rb +65 -0
- data/spec/fixtures/upgrader/type_x.transformed.rb +56 -0
- data/spec/generators/graphql/function_generator_spec.rb +26 -0
- data/spec/generators/graphql/install_generator_spec.rb +1 -1
- data/spec/generators/graphql/loader_generator_spec.rb +24 -0
- 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/argument_spec.rb +21 -0
- data/spec/graphql/backtrace_spec.rb +10 -0
- data/spec/graphql/base_type_spec.rb +42 -0
- data/spec/graphql/boolean_type_spec.rb +3 -3
- data/spec/graphql/directive_spec.rb +3 -1
- data/spec/graphql/enum_type_spec.rb +18 -5
- data/spec/graphql/execution/execute_spec.rb +4 -4
- data/spec/graphql/execution/instrumentation_spec.rb +165 -0
- data/spec/graphql/execution/multiplex_spec.rb +2 -2
- data/spec/graphql/execution_error_spec.rb +18 -0
- 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 +15 -2
- data/spec/graphql/int_type_spec.rb +2 -2
- data/spec/graphql/interface_type_spec.rb +12 -0
- data/spec/graphql/internal_representation/rewrite_spec.rb +2 -2
- data/spec/graphql/introspection/schema_type_spec.rb +2 -0
- data/spec/graphql/language/block_string_spec.rb +70 -0
- data/spec/graphql/language/document_from_schema_definition_spec.rb +770 -0
- data/spec/graphql/language/generation_spec.rb +21 -186
- data/spec/graphql/language/lexer_spec.rb +21 -1
- data/spec/graphql/language/nodes_spec.rb +21 -12
- data/spec/graphql/language/parser_spec.rb +1 -1
- data/spec/graphql/language/printer_spec.rb +203 -0
- data/spec/graphql/object_type_spec.rb +22 -0
- data/spec/graphql/query/arguments_spec.rb +25 -15
- data/spec/graphql/query/context_spec.rb +18 -0
- data/spec/graphql/query/executor_spec.rb +2 -1
- data/spec/graphql/query/serial_execution/value_resolution_spec.rb +2 -8
- data/spec/graphql/query/variables_spec.rb +42 -1
- data/spec/graphql/query_spec.rb +31 -5
- data/spec/graphql/rake_task_spec.rb +3 -1
- 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/mongo_relation_connection_spec.rb +474 -0
- data/spec/graphql/relay/mutation_spec.rb +9 -7
- data/spec/graphql/relay/range_add_spec.rb +5 -1
- data/spec/graphql/relay/relation_connection_spec.rb +65 -1
- data/spec/graphql/schema/argument_spec.rb +87 -0
- data/spec/graphql/schema/build_from_definition_spec.rb +89 -5
- data/spec/graphql/schema/enum_spec.rb +74 -0
- data/spec/graphql/schema/field_spec.rb +225 -0
- data/spec/graphql/schema/finder_spec.rb +135 -0
- data/spec/graphql/schema/input_object_spec.rb +111 -0
- data/spec/graphql/schema/instrumentation_spec.rb +40 -0
- data/spec/graphql/schema/interface_spec.rb +185 -0
- data/spec/graphql/schema/introspection_system_spec.rb +39 -0
- data/spec/graphql/schema/member/accepts_definition_spec.rb +111 -0
- data/spec/graphql/schema/member/build_type_spec.rb +17 -0
- data/spec/graphql/schema/member/has_fields_spec.rb +129 -0
- data/spec/graphql/schema/member/type_system_helpers_spec.rb +63 -0
- data/spec/graphql/schema/mutation_spec.rb +148 -0
- data/spec/graphql/schema/object_spec.rb +175 -0
- data/spec/graphql/schema/printer_spec.rb +111 -15
- data/spec/graphql/schema/relay_classic_mutation_spec.rb +38 -0
- data/spec/graphql/schema/rescue_middleware_spec.rb +11 -0
- data/spec/graphql/schema/resolver_spec.rb +131 -0
- data/spec/graphql/schema/scalar_spec.rb +95 -0
- data/spec/graphql/schema/traversal_spec.rb +31 -0
- data/spec/graphql/schema/union_spec.rb +65 -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 +55 -12
- data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +10 -2
- 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 +273 -184
- data/spec/graphql/tracing/active_support_notifications_tracing_spec.rb +1 -1
- data/spec/graphql/tracing/new_relic_tracing_spec.rb +47 -0
- data/spec/graphql/tracing/platform_tracing_spec.rb +60 -1
- data/spec/graphql/union_type_spec.rb +1 -1
- data/spec/graphql/upgrader/member_spec.rb +516 -0
- data/spec/graphql/upgrader/schema_spec.rb +82 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/support/dummy/schema.rb +53 -24
- data/spec/support/jazz.rb +544 -0
- data/spec/support/lazy_helpers.rb +21 -23
- data/spec/support/new_relic.rb +24 -0
- data/spec/support/star_trek/data.rb +109 -0
- data/spec/support/star_trek/schema.rb +388 -0
- data/spec/support/star_wars/data.rb +6 -7
- data/spec/support/star_wars/schema.rb +127 -171
- metadata +233 -11
- data/lib/graphql/introspection/arguments_field.rb +0 -7
- data/lib/graphql/introspection/enum_values_field.rb +0 -18
- data/lib/graphql/introspection/fields_field.rb +0 -13
- data/lib/graphql/introspection/input_fields_field.rb +0 -12
- data/lib/graphql/introspection/interfaces_field.rb +0 -11
- data/lib/graphql/introspection/of_type_field.rb +0 -6
- data/lib/graphql/introspection/possible_types_field.rb +0 -11
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Unions
|
5
|
+
Account = GraphQL::UnionType.define do
|
6
|
+
name "Account"
|
7
|
+
description "Users and organizations."
|
8
|
+
visibility :internal
|
9
|
+
|
10
|
+
possible_types [
|
11
|
+
Objects::User,
|
12
|
+
Objects::Organization,
|
13
|
+
Objects::Bot
|
14
|
+
]
|
15
|
+
|
16
|
+
resolve_type ->(obj, ctx) { :stand_in }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Unions
|
5
|
+
class Account < Platform::Unions::Base
|
6
|
+
description "Users and organizations."
|
7
|
+
visibility :internal
|
8
|
+
|
9
|
+
possible_types(
|
10
|
+
Objects::User,
|
11
|
+
Objects::Organization,
|
12
|
+
Objects::Bot,
|
13
|
+
)
|
14
|
+
|
15
|
+
def self.resolve_type(obj, ctx)
|
16
|
+
:stand_in
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Objects
|
5
|
+
BlameRange = GraphQL::ObjectType.define do
|
6
|
+
name "BlameRange"
|
7
|
+
description "Represents a range of information from a Git blame."
|
8
|
+
|
9
|
+
scopeless_tokens_as_minimum
|
10
|
+
|
11
|
+
|
12
|
+
interfaces [
|
13
|
+
Interfaces::A,
|
14
|
+
Interfaces::B,
|
15
|
+
]
|
16
|
+
|
17
|
+
field :startingLine, !types.Int do
|
18
|
+
description "The starting line for the range"
|
19
|
+
|
20
|
+
resolve ->(range, args, context) {
|
21
|
+
range.lines.first[:lineno]
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
field :endingLine, !types.Int do
|
26
|
+
description "The ending line for the range"
|
27
|
+
|
28
|
+
resolve ->(range, args, context) {
|
29
|
+
range.lines.first[:lineno] + (range.lines.length - 1)
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
field :commit, -> { !Objects::Commit } do
|
34
|
+
description "Identifies the line author"
|
35
|
+
end
|
36
|
+
|
37
|
+
field :age, !types.Int do
|
38
|
+
description "Identifies the recency of the change, from 1 (new) to 10 (old). This is calculated as a 2-quantile and determines the length of distance between the median age of all the changes in the file and the recency of the current range's change."
|
39
|
+
property :scale
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Objects
|
5
|
+
class BlameRange < Platform::Objects::Base
|
6
|
+
description "Represents a range of information from a Git blame."
|
7
|
+
|
8
|
+
scopeless_tokens_as_minimum
|
9
|
+
|
10
|
+
implements Interfaces::A
|
11
|
+
implements Interfaces::B
|
12
|
+
|
13
|
+
field :starting_line, Integer, description: "The starting line for the range", null: false
|
14
|
+
|
15
|
+
def starting_line
|
16
|
+
@object.lines.first[:lineno]
|
17
|
+
end
|
18
|
+
|
19
|
+
field :ending_line, Integer, description: "The ending line for the range", null: false
|
20
|
+
|
21
|
+
def ending_line
|
22
|
+
@object.lines.first[:lineno] + (@object.lines.length - 1)
|
23
|
+
end
|
24
|
+
|
25
|
+
field :commit, Objects::Commit, description: "Identifies the line author", null: false
|
26
|
+
|
27
|
+
field :age, Integer, method: :scale, description: "Identifies the recency of the change, from 1 (new) to 10 (old). This is calculated as a 2-quantile and determines the length of distance between the median age of all the changes in the file and the recency of the current range's change.", null: false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Scalars
|
5
|
+
DateTime = GraphQL::ScalarType.define do
|
6
|
+
name "DateTime"
|
7
|
+
description "An ISO-8601 encoded UTC date string."
|
8
|
+
|
9
|
+
# rubocop:disable Layout/SpaceInLambdaLiteral
|
10
|
+
coerce_input -> (value, context) do
|
11
|
+
begin
|
12
|
+
Time.iso8601(value)
|
13
|
+
rescue ArgumentError, ::TypeError
|
14
|
+
end
|
15
|
+
end
|
16
|
+
# rubocop:enable Layout/SpaceInLambdaLiteral
|
17
|
+
|
18
|
+
coerce_result ->(value, context) do
|
19
|
+
return nil unless value
|
20
|
+
value.utc.iso8601
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Scalars
|
5
|
+
class DateTime < Platform::Scalars::Base
|
6
|
+
description "An ISO-8601 encoded UTC date string."
|
7
|
+
|
8
|
+
# rubocop:disable Layout/SpaceInLambdaLiteral
|
9
|
+
def self.coerce_input(value, context)
|
10
|
+
begin
|
11
|
+
Time.iso8601(value)
|
12
|
+
rescue ArgumentError, ::TypeError
|
13
|
+
end
|
14
|
+
end
|
15
|
+
# rubocop:enable Layout/SpaceInLambdaLiteral
|
16
|
+
|
17
|
+
def self.coerce_result(value, context)
|
18
|
+
return nil unless value
|
19
|
+
value.utc.iso8601
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Mutations
|
5
|
+
DeleteProject = GraphQL::Relay::Mutation.define do
|
6
|
+
name "DeleteProject"
|
7
|
+
description "Deletes a project."
|
8
|
+
|
9
|
+
minimum_accepted_scopes ["public_repo"]
|
10
|
+
|
11
|
+
input_field :projectId, !types.ID, "The Project ID to update."
|
12
|
+
return_field :owner, !Interfaces::ProjectOwner, "The repository or organization the project was removed from."
|
13
|
+
|
14
|
+
resolve ->(root_obj, inputs, context) do
|
15
|
+
project = Platform::Helpers::NodeIdentification.typed_object_from_id(
|
16
|
+
[Objects::Project], inputs[:projectId], context
|
17
|
+
)
|
18
|
+
|
19
|
+
context[:permission].can_modify?("DeleteProject", project).sync
|
20
|
+
context[:abilities].authorize_content(:project, :destroy, owner: project.owner)
|
21
|
+
|
22
|
+
project.enqueue_delete(actor: context[:viewer])
|
23
|
+
|
24
|
+
{ owner: project.owner }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Mutations
|
5
|
+
class DeleteProject < Mutations::BaseMutation
|
6
|
+
description "Deletes a project."
|
7
|
+
|
8
|
+
minimum_accepted_scopes ["public_repo"]
|
9
|
+
|
10
|
+
argument :project_id, ID, "The Project ID to update.", required: true
|
11
|
+
field :owner, Interfaces::ProjectOwner, "The repository or organization the project was removed from.", null: false
|
12
|
+
|
13
|
+
def resolve(**inputs)
|
14
|
+
project = Platform::Helpers::NodeIdentification.typed_object_from_id(
|
15
|
+
[Objects::Project], inputs[:project_id], @context
|
16
|
+
)
|
17
|
+
|
18
|
+
@context[:permission].can_modify?("DeleteProject", project).sync
|
19
|
+
@context[:abilities].authorize_content(:project, :destroy, owner: project.owner)
|
20
|
+
|
21
|
+
project.enqueue_delete(actor: @context[:viewer])
|
22
|
+
|
23
|
+
{ owner: project.owner }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Enums
|
5
|
+
GistOrderField = GraphQL::EnumType.define do
|
6
|
+
name "GistOrderField"
|
7
|
+
description "Properties by which gist connections can be ordered."
|
8
|
+
|
9
|
+
value "CREATED_AT", "Order gists by creation time", value: "created_at"
|
10
|
+
value "UPDATED_AT", "Order gists by update time", value: "updated_at"
|
11
|
+
value "PUSHED_AT", "Order gists by push time", value: "pushed_at"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Enums
|
5
|
+
class GistOrderField < Platform::Enums::Base
|
6
|
+
description "Properties by which gist connections can be ordered."
|
7
|
+
|
8
|
+
value "CREATED_AT", "Order gists by creation time", value: "created_at"
|
9
|
+
value "UPDATED_AT", "Order gists by update time", value: "updated_at"
|
10
|
+
value "PUSHED_AT", "Order gists by push time", value: "pushed_at"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Mutations
|
5
|
+
IncrementThing = GraphQL::Relay::Mutation.define do
|
6
|
+
name "IncrementThing"
|
7
|
+
description "increments the thing by 1."
|
8
|
+
visibility :internal
|
9
|
+
minimum_accepted_scopes ["repo"]
|
10
|
+
|
11
|
+
input_field(:thingId,
|
12
|
+
!types.ID,
|
13
|
+
"Thing ID to log.",
|
14
|
+
option: :setting)
|
15
|
+
|
16
|
+
return_field(
|
17
|
+
:thingId,
|
18
|
+
!types.ID,
|
19
|
+
"Thing ID to log."
|
20
|
+
)
|
21
|
+
|
22
|
+
resolve ->(root_obj, inputs, context) do
|
23
|
+
if some_early_check
|
24
|
+
return { thingId: "000" }
|
25
|
+
end
|
26
|
+
|
27
|
+
# These shouldn't be modified:
|
28
|
+
{ abcDef: 1 }
|
29
|
+
some_method do { xyzAbc: 1 } end
|
30
|
+
|
31
|
+
thing = Platform::Helpers::NodeIdentification.typed_object_from_id(Objects::Thing, inputs[:thingId], context)
|
32
|
+
raise Errors::Validation.new("Thing not found.") unless thing
|
33
|
+
|
34
|
+
ThingActivity.track(thing.id, Time.now.change(min: 0, sec: 0))
|
35
|
+
|
36
|
+
|
37
|
+
if random_condition
|
38
|
+
{ thingId: thing.global_relay_id }
|
39
|
+
elsif other_random_thing
|
40
|
+
{ :thingId => "abc" }
|
41
|
+
elsif something_else
|
42
|
+
method_with_block {
|
43
|
+
{ thingId: "pqr" }
|
44
|
+
}
|
45
|
+
elsif yet_another_thing
|
46
|
+
begin
|
47
|
+
{ thingId: "987" }
|
48
|
+
rescue
|
49
|
+
{ thingId: "789" }
|
50
|
+
end
|
51
|
+
else
|
52
|
+
return {
|
53
|
+
thingId: "xyz"
|
54
|
+
}
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Mutations
|
5
|
+
class IncrementThing < Mutations::BaseMutation
|
6
|
+
description "increments the thing by 1."
|
7
|
+
visibility :internal
|
8
|
+
minimum_accepted_scopes ["repo"]
|
9
|
+
|
10
|
+
argument :thing_id, ID, "Thing ID to log.", option: :setting, required: true
|
11
|
+
|
12
|
+
field :thing_id, ID, "Thing ID to log.", null: false
|
13
|
+
|
14
|
+
def resolve(**inputs)
|
15
|
+
if some_early_check
|
16
|
+
return { thing_id: "000" }
|
17
|
+
end
|
18
|
+
|
19
|
+
# These shouldn't be modified:
|
20
|
+
{ abcDef: 1 }
|
21
|
+
some_method do { xyzAbc: 1 } end
|
22
|
+
|
23
|
+
thing = Platform::Helpers::NodeIdentification.typed_object_from_id(Objects::Thing, inputs[:thing_id], @context)
|
24
|
+
raise Errors::Validation.new("Thing not found.") unless thing
|
25
|
+
|
26
|
+
ThingActivity.track(thing.id, Time.now.change(min: 0, sec: 0))
|
27
|
+
|
28
|
+
if random_condition
|
29
|
+
{ thing_id: thing.global_relay_id }
|
30
|
+
elsif other_random_thing
|
31
|
+
{ :thing_id => "abc" }
|
32
|
+
elsif something_else
|
33
|
+
method_with_block {
|
34
|
+
{ thing_id: "pqr" }
|
35
|
+
}
|
36
|
+
elsif yet_another_thing
|
37
|
+
begin
|
38
|
+
{ thing_id: "987" }
|
39
|
+
rescue
|
40
|
+
{ thing_id: "789" }
|
41
|
+
end
|
42
|
+
else
|
43
|
+
return {
|
44
|
+
thing_id: "xyz"
|
45
|
+
}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Inputs
|
5
|
+
ReleaseOrder = GraphQL::InputObjectType.define do
|
6
|
+
name "ReleaseOrder"
|
7
|
+
description "Ways in which lists of releases can be ordered upon return."
|
8
|
+
|
9
|
+
input_field :field, types[!Enums::ReleaseOrderField], <<-MD
|
10
|
+
The field in which to order releases by.
|
11
|
+
MD
|
12
|
+
input_field :direction, !Enums::OrderDirection, "The direction in which to order releases by the specified field."
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Inputs
|
5
|
+
class ReleaseOrder < Platform::Inputs::Base
|
6
|
+
description "Ways in which lists of releases can be ordered upon return."
|
7
|
+
|
8
|
+
argument :field, [Enums::ReleaseOrderField], <<-MD, required: false
|
9
|
+
The field in which to order releases by.
|
10
|
+
MD
|
11
|
+
argument :direction, Enums::OrderDirection, "The direction in which to order releases by the specified field.", required: true
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Interfaces
|
5
|
+
Starrable = GraphQL::InterfaceType.define do
|
6
|
+
name "Starrable"
|
7
|
+
description "Things that can be starred."
|
8
|
+
|
9
|
+
global_id_field :id
|
10
|
+
|
11
|
+
field :viewerHasStarred, !types.Boolean do
|
12
|
+
argument :preceedsConnectionMethod, types.Boolean
|
13
|
+
description "Returns a boolean indicating whether the viewing user has starred this starrable."
|
14
|
+
|
15
|
+
resolve ->(object, arguments, context) do
|
16
|
+
if context[:viewer]
|
17
|
+
->(test_inner_proc) do
|
18
|
+
context[:viewer].starred?(object)
|
19
|
+
end
|
20
|
+
else
|
21
|
+
false
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
connection :stargazers, -> { !Connections::Stargazer } do
|
27
|
+
description "A list of users who have starred this starrable."
|
28
|
+
|
29
|
+
argument :orderBy, Inputs::StarOrder, "Order for connection"
|
30
|
+
|
31
|
+
resolve ->(object, arguments, context) do
|
32
|
+
scope = case object
|
33
|
+
when Repository
|
34
|
+
object.stars
|
35
|
+
when Gist
|
36
|
+
GistStar.where(gist_id: object.id)
|
37
|
+
end
|
38
|
+
|
39
|
+
table = scope.table_name
|
40
|
+
if order_by = arguments["orderBy"]
|
41
|
+
scope = scope.order("#{table}.#{order_by["field"]} #{order_by["direction"]}")
|
42
|
+
end
|
43
|
+
|
44
|
+
scope
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Interfaces
|
5
|
+
module Starrable
|
6
|
+
include Platform::Interfaces::Base
|
7
|
+
description "Things that can be starred."
|
8
|
+
|
9
|
+
global_id_field :id
|
10
|
+
|
11
|
+
field :viewer_has_starred, Boolean, description: "Returns a boolean indicating whether the viewing user has starred this starrable.", null: false do
|
12
|
+
argument :preceeds_connection_method, Boolean, required: false
|
13
|
+
end
|
14
|
+
|
15
|
+
def viewer_has_starred(**arguments)
|
16
|
+
if @context[:viewer]
|
17
|
+
->(test_inner_proc) do
|
18
|
+
@context[:viewer].starred?(@object)
|
19
|
+
end
|
20
|
+
else
|
21
|
+
false
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
field :stargazers, Connections::Stargazer, description: "A list of users who have starred this starrable.", null: false, connection: true do
|
26
|
+
argument :order_by, Inputs::StarOrder, "Order for connection", required: false
|
27
|
+
end
|
28
|
+
|
29
|
+
def stargazers(**arguments)
|
30
|
+
scope = case @object
|
31
|
+
when Repository
|
32
|
+
@object.stars
|
33
|
+
when Gist
|
34
|
+
GistStar.where(gist_id: @object.id)
|
35
|
+
end
|
36
|
+
|
37
|
+
table = scope.table_name
|
38
|
+
if order_by = arguments[:order_by]
|
39
|
+
scope = scope.order("#{table}.#{order_by["field"]} #{order_by["direction"]}")
|
40
|
+
end
|
41
|
+
|
42
|
+
scope
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Interfaces
|
5
|
+
Subscribable = GraphQL::InterfaceType.define do
|
6
|
+
name "Subscribable"
|
7
|
+
description "Entities that can be subscribed to for web and email notifications."
|
8
|
+
|
9
|
+
field :id, !GraphQL::ID_TYPE, property: :global_relay_id
|
10
|
+
|
11
|
+
field :viewerSubscription, -> { !Enums::SubscriptionState } do
|
12
|
+
description "Identifies if the viewer is watching, not watching, or ignoring the subscribable entity."
|
13
|
+
|
14
|
+
resolve ->(subscribable, arguments, context) do
|
15
|
+
if context[:viewer].nil?
|
16
|
+
return "unsubscribed"
|
17
|
+
end
|
18
|
+
|
19
|
+
subscription_status_response = subscribable.async_subscription_status(context[:viewer]).sync
|
20
|
+
|
21
|
+
if subscription_status_response.failed?
|
22
|
+
error = Platform::Errors::ServiceUnavailable.new("Subscriptions are currently unavailable. Please try again later.")
|
23
|
+
error.ast_node = context.irep_node.ast_node
|
24
|
+
error.path = context.path
|
25
|
+
context.errors << error
|
26
|
+
return "unavailable"
|
27
|
+
end
|
28
|
+
|
29
|
+
subscription = subscription_status_response.value
|
30
|
+
if subscription.included?
|
31
|
+
"unsubscribed"
|
32
|
+
elsif subscription.subscribed?
|
33
|
+
"subscribed"
|
34
|
+
elsif subscription.ignored?
|
35
|
+
"ignored"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
field :viewerCanSubscribe, !types.Boolean do
|
41
|
+
description "Check if the viewer is able to change their subscription status for the repository."
|
42
|
+
|
43
|
+
resolve ->(subscribable, arguments, context) do
|
44
|
+
return false if context[:viewer].nil?
|
45
|
+
|
46
|
+
subscribable.async_subscription_status(context[:viewer]).then(&:success?)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
connection :issues, function: Platform::Functions::Issues.new, description: "A list of issues associated with the milestone."
|
51
|
+
connection :files, -> { !Connections.define(PackageFile) }, description: "List of files associated with this registry package version"
|
52
|
+
field :enabled, !types.Boolean, "Whether enabled for this project", property: :enabled?
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Platform
|
4
|
+
module Interfaces
|
5
|
+
module Subscribable
|
6
|
+
include Platform::Interfaces::Base
|
7
|
+
description "Entities that can be subscribed to for web and email notifications."
|
8
|
+
|
9
|
+
field :id, GraphQL::ID_TYPE, method: :global_relay_id, null: false
|
10
|
+
|
11
|
+
field :viewer_subscription, Enums::SubscriptionState, description: "Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.", null: false
|
12
|
+
|
13
|
+
def viewer_subscription
|
14
|
+
if @context[:viewer].nil?
|
15
|
+
return "unsubscribed"
|
16
|
+
end
|
17
|
+
|
18
|
+
subscription_status_response = @object.async_subscription_status(@context[:viewer]).sync
|
19
|
+
|
20
|
+
if subscription_status_response.failed?
|
21
|
+
error = Platform::Errors::ServiceUnavailable.new("Subscriptions are currently unavailable. Please try again later.")
|
22
|
+
error.ast_node = @context.irep_node.ast_node
|
23
|
+
error.path = @context.path
|
24
|
+
@context.errors << error
|
25
|
+
return "unavailable"
|
26
|
+
end
|
27
|
+
|
28
|
+
subscription = subscription_status_response.value
|
29
|
+
if subscription.included?
|
30
|
+
"unsubscribed"
|
31
|
+
elsif subscription.subscribed?
|
32
|
+
"subscribed"
|
33
|
+
elsif subscription.ignored?
|
34
|
+
"ignored"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
field :viewer_can_subscribe, Boolean, description: "Check if the viewer is able to change their subscription status for the repository.", null: false
|
39
|
+
|
40
|
+
def viewer_can_subscribe
|
41
|
+
return false if @context[:viewer].nil?
|
42
|
+
|
43
|
+
@object.async_subscription_status(@context[:viewer]).then(&:success?)
|
44
|
+
end
|
45
|
+
|
46
|
+
field :issues, function: Platform::Functions::Issues.new, description: "A list of issues associated with the milestone.", connection: true
|
47
|
+
field :files, Connections.define(PackageFile), description: "List of files associated with this registry package version", null: false, connection: true
|
48
|
+
field :enabled, Boolean, "Whether enabled for this project", method: :enabled?, null: false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|