rails-graphql 0.2.1 → 1.0.0.rc1
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/ext/console.rb +18 -0
- data/ext/extconf.h +3 -0
- data/ext/extconf.rb +1 -54
- data/ext/gql_parser.c +631 -0
- data/ext/gql_parser.h +21 -0
- data/ext/shared.c +477 -0
- data/ext/shared.h +177 -0
- data/lib/generators/graphql/channel_generator.rb +27 -0
- data/lib/generators/graphql/controller_generator.rb +9 -4
- data/lib/generators/graphql/install_generator.rb +49 -0
- data/lib/generators/graphql/schema_generator.rb +9 -4
- data/lib/generators/graphql/templates/channel.erb +7 -0
- data/lib/generators/graphql/templates/config.rb +97 -0
- data/lib/generators/graphql/templates/controller.erb +2 -0
- data/lib/generators/graphql/templates/schema.erb +5 -3
- data/lib/gql_parser.so +0 -0
- data/lib/rails/graphql/adapters/mysql_adapter.rb +59 -0
- data/lib/rails/graphql/adapters/pg_adapter.rb +25 -22
- data/lib/rails/graphql/adapters/sqlite_adapter.rb +17 -14
- data/lib/rails/graphql/alternative/field_set.rb +48 -0
- data/lib/rails/graphql/alternative/mutation.rb +17 -0
- data/lib/rails/graphql/alternative/query.rb +98 -0
- data/lib/rails/graphql/alternative/subscription.rb +18 -0
- data/lib/rails/graphql/alternative.rb +20 -0
- data/lib/rails/graphql/argument.rb +25 -26
- data/lib/rails/graphql/callback.rb +30 -14
- data/lib/rails/graphql/collectors/hash_collector.rb +26 -7
- data/lib/rails/graphql/collectors/idented_collector.rb +10 -7
- data/lib/rails/graphql/collectors/json_collector.rb +43 -17
- data/lib/rails/graphql/collectors.rb +4 -4
- data/lib/rails/graphql/config.rb +154 -23
- data/lib/rails/graphql/directive/cached_directive.rb +33 -0
- data/lib/rails/graphql/directive/deprecated_directive.rb +10 -10
- data/lib/rails/graphql/directive/include_directive.rb +4 -4
- data/lib/rails/graphql/directive/skip_directive.rb +4 -4
- data/lib/rails/graphql/directive/specified_by_directive.rb +24 -0
- data/lib/rails/graphql/directive.rb +134 -73
- data/lib/rails/graphql/errors.rb +33 -4
- data/lib/rails/graphql/event.rb +21 -9
- data/lib/rails/graphql/field/authorized_field.rb +17 -6
- data/lib/rails/graphql/field/input_field.rb +8 -12
- data/lib/rails/graphql/field/mutation_field.rb +43 -9
- data/lib/rails/graphql/field/output_field.rb +112 -12
- data/lib/rails/graphql/field/proxied_field.rb +35 -26
- data/lib/rails/graphql/field/resolved_field.rb +27 -25
- data/lib/rails/graphql/field/scoped_config.rb +10 -4
- data/lib/rails/graphql/field/subscription_field.rb +123 -0
- data/lib/rails/graphql/field/typed_field.rb +69 -24
- data/lib/rails/graphql/field.rb +89 -74
- data/lib/rails/graphql/global_id.rb +89 -0
- data/lib/rails/graphql/helpers/attribute_delegator.rb +5 -5
- data/lib/rails/graphql/helpers/inherited_collection/array.rb +51 -0
- data/lib/rails/graphql/helpers/inherited_collection/base.rb +45 -0
- data/lib/rails/graphql/helpers/inherited_collection/hash.rb +88 -0
- data/lib/rails/graphql/helpers/inherited_collection.rb +25 -76
- data/lib/rails/graphql/helpers/instantiable.rb +15 -0
- data/lib/rails/graphql/helpers/leaf_from_ar.rb +7 -7
- data/lib/rails/graphql/helpers/registerable.rb +44 -62
- data/lib/rails/graphql/helpers/unregisterable.rb +16 -0
- data/lib/rails/graphql/helpers/with_arguments.rb +33 -28
- data/lib/rails/graphql/helpers/with_assignment.rb +6 -6
- data/lib/rails/graphql/helpers/with_callbacks.rb +28 -11
- data/lib/rails/graphql/helpers/with_description.rb +73 -0
- data/lib/rails/graphql/helpers/with_directives.rb +58 -30
- data/lib/rails/graphql/helpers/with_events.rb +22 -23
- data/lib/rails/graphql/helpers/with_fields.rb +86 -26
- data/lib/rails/graphql/helpers/with_global_id.rb +22 -0
- data/lib/rails/graphql/helpers/with_name.rb +44 -0
- data/lib/rails/graphql/helpers/with_namespace.rb +7 -4
- data/lib/rails/graphql/helpers/with_owner.rb +8 -7
- data/lib/rails/graphql/helpers/with_schema_fields.rb +162 -56
- data/lib/rails/graphql/helpers/with_validator.rb +9 -9
- data/lib/rails/graphql/helpers.rb +10 -3
- data/lib/rails/graphql/introspection.rb +43 -36
- data/lib/rails/graphql/railtie.rb +89 -33
- data/lib/rails/graphql/railties/app/base_channel.rb +10 -0
- data/lib/rails/graphql/railties/app/base_controller.rb +12 -0
- data/lib/rails/graphql/railties/app/views/_cable.js.erb +56 -0
- data/lib/rails/graphql/railties/app/views/_fetch.js.erb +20 -0
- data/lib/rails/graphql/railties/app/views/graphiql.html.erb +101 -0
- data/lib/rails/graphql/railties/base_generator.rb +5 -17
- data/lib/rails/graphql/railties/channel.rb +157 -0
- data/lib/rails/graphql/railties/controller.rb +91 -25
- data/lib/rails/graphql/railties/controller_runtime.rb +5 -5
- data/lib/rails/graphql/railties/log_subscriber.rb +81 -14
- data/lib/rails/graphql/request/arguments.rb +26 -50
- data/lib/rails/graphql/request/backtrace.rb +212 -0
- data/lib/rails/graphql/request/component/field.rb +98 -70
- data/lib/rails/graphql/request/component/fragment.rb +80 -26
- data/lib/rails/graphql/request/component/operation/subscription.rb +162 -4
- data/lib/rails/graphql/request/component/operation.rb +73 -34
- data/lib/rails/graphql/request/component/spread.rb +79 -27
- data/lib/rails/graphql/request/component/typename.rb +28 -13
- data/lib/rails/graphql/request/component.rb +77 -36
- data/lib/rails/graphql/request/context.rb +19 -9
- data/lib/rails/graphql/request/errors.rb +16 -6
- data/lib/rails/graphql/request/event.rb +23 -8
- data/lib/rails/graphql/request/helpers/directives.rb +69 -27
- data/lib/rails/graphql/request/helpers/selection_set.rb +57 -25
- data/lib/rails/graphql/request/helpers/value_writers.rb +24 -19
- data/lib/rails/graphql/request/prepared_data.rb +100 -0
- data/lib/rails/graphql/request/steps/authorizable.rb +24 -14
- data/lib/rails/graphql/request/steps/organizable.rb +111 -49
- data/lib/rails/graphql/request/steps/{prepareable.rb → preparable.rb} +21 -8
- data/lib/rails/graphql/request/steps/{resolveable.rb → resolvable.rb} +16 -7
- data/lib/rails/graphql/request/strategy/cached_strategy.rb +64 -0
- data/lib/rails/graphql/request/strategy/dynamic_instance.rb +6 -6
- data/lib/rails/graphql/request/strategy/multi_query_strategy.rb +6 -13
- data/lib/rails/graphql/request/strategy/sequenced_strategy.rb +9 -9
- data/lib/rails/graphql/request/strategy.rb +147 -77
- data/lib/rails/graphql/request/subscription.rb +82 -0
- data/lib/rails/graphql/request.rb +353 -104
- data/lib/rails/graphql/schema.rb +251 -106
- data/lib/rails/graphql/shortcuts.rb +33 -8
- data/lib/rails/graphql/source/active_record/builders.rb +64 -51
- data/lib/rails/graphql/source/active_record_source.rb +158 -82
- data/lib/rails/graphql/source/base.rb +83 -0
- data/lib/rails/graphql/source/builder.rb +115 -0
- data/lib/rails/graphql/source/scoped_arguments.rb +39 -21
- data/lib/rails/graphql/source.rb +90 -228
- data/lib/rails/graphql/subscription/provider/action_cable.rb +113 -0
- data/lib/rails/graphql/subscription/provider/base.rb +192 -0
- data/lib/rails/graphql/subscription/provider.rb +18 -0
- data/lib/rails/graphql/subscription/store/base.rb +141 -0
- data/lib/rails/graphql/subscription/store/memory.rb +136 -0
- data/lib/rails/graphql/subscription/store.rb +19 -0
- data/lib/rails/graphql/subscription.rb +17 -0
- data/lib/rails/graphql/to_gql.rb +29 -32
- data/lib/rails/graphql/type/creator.rb +196 -0
- data/lib/rails/graphql/type/enum/directive_location_enum.rb +11 -11
- data/lib/rails/graphql/type/enum/type_kind_enum.rb +3 -3
- data/lib/rails/graphql/type/enum.rb +44 -50
- data/lib/rails/graphql/type/input.rb +92 -25
- data/lib/rails/graphql/type/interface.rb +29 -28
- data/lib/rails/graphql/type/object/directive_object.rb +10 -9
- data/lib/rails/graphql/type/object/enum_value_object.rb +3 -3
- data/lib/rails/graphql/type/object/field_object.rb +24 -6
- data/lib/rails/graphql/type/object/input_value_object.rb +6 -7
- data/lib/rails/graphql/type/object/schema_object.rb +5 -8
- data/lib/rails/graphql/type/object/type_object.rb +62 -25
- data/lib/rails/graphql/type/object.rb +34 -26
- data/lib/rails/graphql/type/scalar/any_scalar.rb +30 -0
- data/lib/rails/graphql/type/scalar/bigint_scalar.rb +5 -5
- data/lib/rails/graphql/type/scalar/binary_scalar.rb +5 -3
- data/lib/rails/graphql/type/scalar/boolean_scalar.rb +8 -8
- data/lib/rails/graphql/type/scalar/date_scalar.rb +5 -3
- data/lib/rails/graphql/type/scalar/date_time_scalar.rb +5 -3
- data/lib/rails/graphql/type/scalar/decimal_scalar.rb +5 -3
- data/lib/rails/graphql/type/scalar/float_scalar.rb +5 -5
- data/lib/rails/graphql/type/scalar/id_scalar.rb +6 -5
- data/lib/rails/graphql/type/scalar/int_scalar.rb +6 -5
- data/lib/rails/graphql/type/scalar/json_scalar.rb +41 -0
- data/lib/rails/graphql/type/scalar/string_scalar.rb +18 -4
- data/lib/rails/graphql/type/scalar/time_scalar.rb +8 -6
- data/lib/rails/graphql/type/scalar.rb +26 -23
- data/lib/rails/graphql/type/union.rb +21 -18
- data/lib/rails/graphql/type.rb +43 -26
- data/lib/rails/graphql/type_map.rb +268 -165
- data/lib/rails/graphql/uri.rb +167 -0
- data/lib/rails/graphql/version.rb +19 -3
- data/lib/rails/graphql.rake +3 -0
- data/lib/rails/graphql.rb +91 -56
- data/lib/rails-graphql.rb +1 -1
- data/test/assets/en.yml +29 -0
- data/test/assets/introspection-mem.txt +1 -1
- data/test/assets/introspection.gql +2 -0
- data/test/assets/mem.gql +86 -99
- data/test/assets/mysql.gql +406 -0
- data/test/assets/sqlite.gql +96 -73
- data/test/assets/translate.gql +346 -0
- data/test/config.rb +19 -8
- data/test/graphql/schema_test.rb +14 -50
- data/test/graphql/source_test.rb +8 -85
- data/test/graphql/type/enum_test.rb +207 -203
- data/test/graphql/type/input_test.rb +14 -9
- data/test/graphql/type/interface_test.rb +12 -9
- data/test/graphql/type/object_test.rb +8 -2
- data/test/graphql/type/scalar/any_scalar_test.rb +38 -0
- data/test/graphql/type/scalar/boolean_scalar_test.rb +6 -3
- data/test/graphql/type/scalar/json_scalar_test.rb +23 -0
- data/test/graphql/type_map_test.rb +63 -81
- data/test/graphql/type_test.rb +0 -19
- data/test/graphql_test.rb +1 -1
- data/test/integration/{authorization/authorization_test.rb → authorization_test.rb} +40 -14
- data/test/integration/config.rb +36 -3
- data/test/integration/customization_test.rb +39 -0
- data/test/integration/global_id_test.rb +99 -0
- data/test/integration/memory/star_wars_introspection_test.rb +24 -16
- data/test/integration/memory/star_wars_query_test.rb +54 -3
- data/test/integration/memory/star_wars_validation_test.rb +3 -3
- data/test/integration/mysql/star_wars_introspection_test.rb +25 -0
- data/test/integration/persisted_query_test.rb +87 -0
- data/test/integration/resolver_precedence_test.rb +154 -0
- data/test/integration/schemas/memory.rb +24 -10
- data/test/integration/schemas/mysql.rb +62 -0
- data/test/integration/schemas/sqlite.rb +21 -12
- data/test/integration/sqlite/star_wars_global_id_test.rb +89 -0
- data/test/integration/sqlite/star_wars_introspection_test.rb +10 -0
- data/test/integration/sqlite/star_wars_query_test.rb +14 -1
- data/test/integration/translate_test.rb +73 -0
- data/test/test_ext.rb +16 -13
- metadata +125 -161
- data/ext/depend +0 -3
- data/ext/graphqlparser/Ast.cpp +0 -346
- data/ext/graphqlparser/Ast.h +0 -1214
- data/ext/graphqlparser/AstNode.h +0 -36
- data/ext/graphqlparser/AstVisitor.h +0 -137
- data/ext/graphqlparser/GraphQLParser.cpp +0 -76
- data/ext/graphqlparser/GraphQLParser.h +0 -55
- data/ext/graphqlparser/JsonVisitor.cpp +0 -161
- data/ext/graphqlparser/JsonVisitor.cpp.inc +0 -456
- data/ext/graphqlparser/JsonVisitor.h +0 -121
- data/ext/graphqlparser/JsonVisitor.h.inc +0 -110
- data/ext/graphqlparser/VERSION +0 -1
- data/ext/graphqlparser/c/GraphQLAst.cpp +0 -324
- data/ext/graphqlparser/c/GraphQLAst.h +0 -180
- data/ext/graphqlparser/c/GraphQLAstForEachConcreteType.h +0 -44
- data/ext/graphqlparser/c/GraphQLAstNode.cpp +0 -25
- data/ext/graphqlparser/c/GraphQLAstNode.h +0 -33
- data/ext/graphqlparser/c/GraphQLAstToJSON.cpp +0 -21
- data/ext/graphqlparser/c/GraphQLAstToJSON.h +0 -24
- data/ext/graphqlparser/c/GraphQLAstVisitor.cpp +0 -55
- data/ext/graphqlparser/c/GraphQLAstVisitor.h +0 -53
- data/ext/graphqlparser/c/GraphQLParser.cpp +0 -35
- data/ext/graphqlparser/c/GraphQLParser.h +0 -54
- data/ext/graphqlparser/dump_json_ast.cpp +0 -48
- data/ext/graphqlparser/lexer.lpp +0 -324
- data/ext/graphqlparser/parser.ypp +0 -693
- data/ext/graphqlparser/parsergen/lexer.cpp +0 -2633
- data/ext/graphqlparser/parsergen/lexer.h +0 -528
- data/ext/graphqlparser/parsergen/location.hh +0 -189
- data/ext/graphqlparser/parsergen/parser.tab.cpp +0 -3300
- data/ext/graphqlparser/parsergen/parser.tab.hpp +0 -646
- data/ext/graphqlparser/parsergen/position.hh +0 -179
- data/ext/graphqlparser/parsergen/stack.hh +0 -156
- data/ext/graphqlparser/syntaxdefs.h +0 -19
- data/ext/libgraphqlparser/AstNode.h +0 -36
- data/ext/libgraphqlparser/CMakeLists.txt +0 -148
- data/ext/libgraphqlparser/CONTRIBUTING.md +0 -23
- data/ext/libgraphqlparser/GraphQLParser.cpp +0 -76
- data/ext/libgraphqlparser/GraphQLParser.h +0 -55
- data/ext/libgraphqlparser/JsonVisitor.cpp +0 -161
- data/ext/libgraphqlparser/JsonVisitor.h +0 -121
- data/ext/libgraphqlparser/LICENSE +0 -22
- data/ext/libgraphqlparser/README.clang-tidy +0 -7
- data/ext/libgraphqlparser/README.md +0 -84
- data/ext/libgraphqlparser/ast/ast.ast +0 -203
- data/ext/libgraphqlparser/ast/ast.py +0 -61
- data/ext/libgraphqlparser/ast/c.py +0 -100
- data/ext/libgraphqlparser/ast/c.pyc +0 -0
- data/ext/libgraphqlparser/ast/c_impl.py +0 -61
- data/ext/libgraphqlparser/ast/c_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/c_visitor_impl.py +0 -39
- data/ext/libgraphqlparser/ast/c_visitor_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/casing.py +0 -26
- data/ext/libgraphqlparser/ast/casing.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx.py +0 -197
- data/ext/libgraphqlparser/ast/cxx.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_impl.py +0 -61
- data/ext/libgraphqlparser/ast/cxx_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_json_visitor_header.py +0 -42
- data/ext/libgraphqlparser/ast/cxx_json_visitor_header.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.py +0 -80
- data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_visitor.py +0 -64
- data/ext/libgraphqlparser/ast/cxx_visitor.pyc +0 -0
- data/ext/libgraphqlparser/ast/js.py +0 -65
- data/ext/libgraphqlparser/ast/license.py +0 -10
- data/ext/libgraphqlparser/ast/license.pyc +0 -0
- data/ext/libgraphqlparser/c/GraphQLAstNode.cpp +0 -25
- data/ext/libgraphqlparser/c/GraphQLAstNode.h +0 -33
- data/ext/libgraphqlparser/c/GraphQLAstToJSON.cpp +0 -21
- data/ext/libgraphqlparser/c/GraphQLAstToJSON.h +0 -24
- data/ext/libgraphqlparser/c/GraphQLAstVisitor.cpp +0 -55
- data/ext/libgraphqlparser/c/GraphQLAstVisitor.h +0 -53
- data/ext/libgraphqlparser/c/GraphQLParser.cpp +0 -35
- data/ext/libgraphqlparser/c/GraphQLParser.h +0 -54
- data/ext/libgraphqlparser/clang-tidy-all.sh +0 -3
- data/ext/libgraphqlparser/cmake/version.cmake +0 -16
- data/ext/libgraphqlparser/dump_json_ast.cpp +0 -48
- data/ext/libgraphqlparser/go/README.md +0 -20
- data/ext/libgraphqlparser/go/callbacks.go +0 -18
- data/ext/libgraphqlparser/go/gotest.go +0 -64
- data/ext/libgraphqlparser/lexer.lpp +0 -324
- data/ext/libgraphqlparser/libgraphqlparser.pc.in +0 -11
- data/ext/libgraphqlparser/parser.ypp +0 -693
- data/ext/libgraphqlparser/parsergen/lexer.cpp +0 -2633
- data/ext/libgraphqlparser/parsergen/lexer.h +0 -528
- data/ext/libgraphqlparser/parsergen/location.hh +0 -189
- data/ext/libgraphqlparser/parsergen/parser.tab.cpp +0 -3300
- data/ext/libgraphqlparser/parsergen/parser.tab.hpp +0 -646
- data/ext/libgraphqlparser/parsergen/position.hh +0 -179
- data/ext/libgraphqlparser/parsergen/stack.hh +0 -156
- data/ext/libgraphqlparser/python/CMakeLists.txt +0 -14
- data/ext/libgraphqlparser/python/README.md +0 -5
- data/ext/libgraphqlparser/python/example.py +0 -31
- data/ext/libgraphqlparser/syntaxdefs.h +0 -19
- data/ext/libgraphqlparser/test/BuildCAPI.c +0 -5
- data/ext/libgraphqlparser/test/CMakeLists.txt +0 -25
- data/ext/libgraphqlparser/test/JsonVisitorTests.cpp +0 -28
- data/ext/libgraphqlparser/test/ParserTests.cpp +0 -352
- data/ext/libgraphqlparser/test/kitchen-sink.graphql +0 -59
- data/ext/libgraphqlparser/test/kitchen-sink.json +0 -1
- data/ext/libgraphqlparser/test/schema-kitchen-sink.graphql +0 -78
- data/ext/libgraphqlparser/test/schema-kitchen-sink.json +0 -1
- data/ext/libgraphqlparser/test/valgrind.supp +0 -33
- data/ext/version.cpp +0 -21
- data/lib/graphqlparser.so +0 -0
- data/lib/rails/graphql/native/functions.rb +0 -38
- data/lib/rails/graphql/native/location.rb +0 -41
- data/lib/rails/graphql/native/pointers.rb +0 -23
- data/lib/rails/graphql/native/visitor.rb +0 -349
- data/lib/rails/graphql/native.rb +0 -56
- data/test/integration/schemas/authorization.rb +0 -12
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators/base'
|
4
|
+
|
5
|
+
module GraphQL
|
6
|
+
module Generators
|
7
|
+
class InstallGenerator < Rails::Generators::Base # :nodoc:
|
8
|
+
include Rails::GraphQL::BaseGenerator
|
9
|
+
|
10
|
+
desc 'Add an initial setup to your application'
|
11
|
+
|
12
|
+
argument :schema, type: :string, optional: true,
|
13
|
+
default: "#{APP_MODULE_NAME}Schema",
|
14
|
+
desc: 'A name for the schema'
|
15
|
+
|
16
|
+
class_option :skip_routes, type: :boolean,
|
17
|
+
default: false,
|
18
|
+
desc: 'Add some initial routes'
|
19
|
+
|
20
|
+
class_option :skip_keeps, type: :boolean,
|
21
|
+
default: false,
|
22
|
+
desc: 'Skip .keep files'
|
23
|
+
|
24
|
+
def create_config_file
|
25
|
+
template 'config.rb', 'config/initializers/graphql.rb'
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_schema
|
29
|
+
invoke 'graphql:schema'
|
30
|
+
end
|
31
|
+
|
32
|
+
def create_keep_files
|
33
|
+
return if options[:skip_keeps]
|
34
|
+
|
35
|
+
%w[
|
36
|
+
directives fields sources enums inputs interfaces object
|
37
|
+
scalars unions queries mutations subscriptions
|
38
|
+
].each { |folder| create_file("#{options[:directory]}/#{folder}/.keep") }
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_routes
|
42
|
+
return if options[:skip_routes]
|
43
|
+
route('get "/graphql/describe", to: "graphql/base#describe"')
|
44
|
+
route('get "/graphiql", to: "graphql/base#graphiql"')
|
45
|
+
route('post "/graphql", to: "graphql/base#execute"')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -8,15 +8,20 @@ module GraphQL
|
|
8
8
|
include Rails::GraphQL::BaseGenerator
|
9
9
|
|
10
10
|
desc 'Add a new GraphQL schema'
|
11
|
-
|
11
|
+
|
12
|
+
argument :schema, type: :string, optional: true,
|
13
|
+
default: "#{APP_MODULE_NAME}Schema",
|
14
|
+
desc: 'A name for the schema'
|
12
15
|
|
13
16
|
def create_schema_file
|
14
17
|
template 'schema.erb', "#{options[:directory]}/#{schema_name.underscore}.rb"
|
15
18
|
end
|
16
19
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
+
private
|
21
|
+
|
22
|
+
def schema_name
|
23
|
+
@schema_name ||= options.fetch(:schema, "#{APP_MODULE_NAME}Schema")
|
24
|
+
end
|
20
25
|
end
|
21
26
|
end
|
22
27
|
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Rails::GraphQL.configure do |config|
|
4
|
+
# This helps to keep track of when things were cached and registered. Cached
|
5
|
+
# objects with mismatching versions need to be upgraded or simply reloaded.
|
6
|
+
# An excellent way to use this is to set it to the commit hash. TypePap will
|
7
|
+
# always use only the first 8 characters for simplicity.
|
8
|
+
# config.version = nil
|
9
|
+
|
10
|
+
# The instance responsible for caching all the information generated by
|
11
|
+
# requests and all the other components. Manually setting this property
|
12
|
+
# means that the object in it complies with `ActiveSupport::Cache::Store`.
|
13
|
+
# This will map automatically to `Rails.cache` if kept as `nil`. This can
|
14
|
+
# also be set per Schema.
|
15
|
+
# config.cache = nil
|
16
|
+
|
17
|
+
# This is the prefix key of all the cache entries for the GraphQL cached
|
18
|
+
# things.
|
19
|
+
# config.cache_prefix = 'graphql/'
|
20
|
+
|
21
|
+
# This is very similar to `ActiveRecord` verbose logs, which simply show the
|
22
|
+
# path of the file that started a GraphQL request.
|
23
|
+
# config.verbose_logs = true
|
24
|
+
|
25
|
+
# The list of parameters to omit from the logger when running a GraphQL
|
26
|
+
# request. Those values are displayed better in the internal runtime logger
|
27
|
+
# controller.
|
28
|
+
# config.omit_parameters = %w[query operationName operation_name variables graphql]
|
29
|
+
|
30
|
+
# Identical to the one available on a Rails application, but exclusive for
|
31
|
+
# GraphQL operations. The list of parameters to display as filtered in the
|
32
|
+
# logs. When it is nil, it will use the same as the Rails application.
|
33
|
+
# config.filter_parameters = nil
|
34
|
+
|
35
|
+
# The suffix that is added automatically to all the Input type objects. This
|
36
|
+
# prevents situations like `PointInputInput`. If your inputs have a
|
37
|
+
# different suffix, change this value to it.
|
38
|
+
# config.auto_suffix_input_objects = 'Input'
|
39
|
+
|
40
|
+
# Introspection is enabled by default. It is recommended to only use
|
41
|
+
# introspection during development and tests, never in production.
|
42
|
+
# This can also be set per schema level.
|
43
|
+
config.enable_introspection = true
|
44
|
+
|
45
|
+
# Define the names of the schema/operations types. The single "_" is a
|
46
|
+
# suggestion. In an application that has a Subscription object, it will
|
47
|
+
# prevent the conflict. Plus, it is easy to spot that it is something
|
48
|
+
# internal. This can also be set per Schema.
|
49
|
+
# config.schema_type_names = {
|
50
|
+
# query: '_Query',
|
51
|
+
# mutation: '_Mutation',
|
52
|
+
# subscription: '_Subscription',
|
53
|
+
# }
|
54
|
+
|
55
|
+
# For performance purposes, this gem implements a
|
56
|
+
# {JsonCollector}[rdoc-ref:Rails::GraphQL::Collectors::JsonCollector].
|
57
|
+
# You can disable this option if you prefer to use the standard
|
58
|
+
# hash-to-string serialization provided by `ActiveSupport`.
|
59
|
+
# This can also be set per Schema.
|
60
|
+
# config.enable_string_collector = true
|
61
|
+
|
62
|
+
# Set what is de default expected output type of GraphQL requests. String
|
63
|
+
# combined with the previous setting has the best performance. On the
|
64
|
+
# console, it will automatically shift to Hash. This can also be set per
|
65
|
+
# Schema.
|
66
|
+
# config.default_response_format = :string
|
67
|
+
|
68
|
+
# Specifies if the results of operations should be encoded with
|
69
|
+
# +ActiveSupport::JSON#encode+ instead of the default +JSON#generate+.
|
70
|
+
# See also https://github.com/rails/rails/blob/master/activesupport/lib/active_support/json/encoding.rb
|
71
|
+
# config.encode_with_active_support = false
|
72
|
+
|
73
|
+
# Enable the ability of a callback to inject arguments dynamically into the
|
74
|
+
# calling method.
|
75
|
+
# config.callback_inject_arguments = true
|
76
|
+
|
77
|
+
# Enable the ability of a callback to inject named arguments dynamically
|
78
|
+
# into the calling method.
|
79
|
+
# config.callback_inject_named_arguments = true
|
80
|
+
|
81
|
+
# When importing fields from modules or other objects, a warning is
|
82
|
+
# displayed for any given element that was not able to be correctly
|
83
|
+
# imported. You can silence such warnings by changing this option.
|
84
|
+
# config.silence_import_warnings = false
|
85
|
+
|
86
|
+
# Enable the ability to define the description of any object, field, or
|
87
|
+
# argument using I18n. It is recommended for multi-language documentation.
|
88
|
+
config.enable_i18n_descriptions = true
|
89
|
+
|
90
|
+
# The method that should be used to parse literal input values when they are
|
91
|
+
# provided as Hash. `JSON.parse` only supports keys wrapped in quotes. You
|
92
|
+
# can use `Psych.method(:safe_load)` to support keys without quotes, which
|
93
|
+
# behaves closer to YAML. The received value is ensured to be wrapped in
|
94
|
+
# "{}". If that produces unexpected results, you can assign a proc and then
|
95
|
+
# parse the value in any other way.
|
96
|
+
# config.literal_input_parser = JSON.method(:parse)
|
97
|
+
end
|
data/lib/gql_parser.so
ADDED
Binary file
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module GraphQL
|
5
|
+
# Based on:
|
6
|
+
# SELECT DISTINCT data_type FROM information_schema.columns;
|
7
|
+
# And https://www.mysqltutorial.org/mysql-data-types.aspx
|
8
|
+
type_map.register_alias 'mysql:varchar', :string
|
9
|
+
type_map.register_alias 'mysql:bit', :bool
|
10
|
+
type_map.register_alias 'mysql:int', :int
|
11
|
+
type_map.register_alias 'mysql:bigint', :bigint
|
12
|
+
type_map.register_alias 'mysql:json', :json
|
13
|
+
type_map.register_alias 'mysql:date', :date
|
14
|
+
type_map.register_alias 'mysql:timestamp', :date_time
|
15
|
+
type_map.register_alias 'mysql:binary', :binary
|
16
|
+
type_map.register_alias 'mysql:float', :float
|
17
|
+
type_map.register_alias 'mysql:decimal', :decimal
|
18
|
+
type_map.register_alias 'mysql:time', :time
|
19
|
+
|
20
|
+
type_map.register_alias 'mysql:set', 'mysql:varchar'
|
21
|
+
type_map.register_alias 'mysql:text', 'mysql:varchar'
|
22
|
+
type_map.register_alias 'mysql:enum', 'mysql:varchar'
|
23
|
+
type_map.register_alias 'mysql:char', 'mysql:varchar'
|
24
|
+
type_map.register_alias 'mysql:tinytext', 'mysql:text'
|
25
|
+
type_map.register_alias 'mysql:mediumtext', 'mysql:text'
|
26
|
+
type_map.register_alias 'mysql:longtext', 'mysql:text'
|
27
|
+
type_map.register_alias 'mysql:datetime', 'mysql:timestamp'
|
28
|
+
type_map.register_alias 'mysql:varbinary', 'mysql:binary'
|
29
|
+
type_map.register_alias 'mysql:blob', 'mysql:binary'
|
30
|
+
type_map.register_alias 'mysql:tinyblob', 'mysql:blob'
|
31
|
+
type_map.register_alias 'mysql:mediumblob', 'mysql:blob'
|
32
|
+
type_map.register_alias 'mysql:longblob', 'mysql:blob'
|
33
|
+
type_map.register_alias 'mysql:tinyint', 'mysql:int'
|
34
|
+
type_map.register_alias 'mysql:smallint', 'mysql:int'
|
35
|
+
type_map.register_alias 'mysql:mediumint', 'mysql:int'
|
36
|
+
type_map.register_alias 'mysql:double', 'mysql:float'
|
37
|
+
|
38
|
+
module MySQL
|
39
|
+
module SourceMethods
|
40
|
+
protected
|
41
|
+
|
42
|
+
def mysql_attributes
|
43
|
+
model.columns_hash.each_value do |column|
|
44
|
+
next yield(column.name, find_type!(:id)) if id_columns.include?(column.name)
|
45
|
+
|
46
|
+
base_type, size = column.sql_type_metadata.sql_type.split(/(\(\d+\))/)
|
47
|
+
type_name = base_type.end_with?('int') && size == '(1)' ? 'bit' : base_type
|
48
|
+
|
49
|
+
type = find_type!("mysql:#{type_name}", fallback: :string)
|
50
|
+
|
51
|
+
yield(column.name, type, array: (base_type == 'set'))
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
Source::ActiveRecordSource.extend(MySQL::SourceMethods)
|
58
|
+
end
|
59
|
+
end
|
@@ -1,45 +1,48 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module Rails
|
4
|
-
module GraphQL
|
3
|
+
module Rails
|
4
|
+
module GraphQL
|
5
5
|
# Based on:
|
6
6
|
# SELECT t.oid, t.typname, format_type(t.oid, NULL) AS sql_type
|
7
7
|
# FROM pg_type t
|
8
8
|
# WHERE typtype = 'b'
|
9
|
-
# AND typcategory IN ('B', 'D', 'G', 'I', 'N', 'S', 'T', 'V')
|
9
|
+
# AND typcategory IN ('B', 'D', 'G', 'I', 'N', 'S', 'T', 'U', 'V')
|
10
10
|
# AND typowner = 10;
|
11
|
-
type_map.register_alias 'pg:boolean', :boolean
|
12
|
-
type_map.register_alias 'pg:integer', :int
|
13
|
-
type_map.register_alias 'pg:date', :date
|
14
|
-
|
15
|
-
type_map.register_alias 'pg:char', :string
|
16
11
|
type_map.register_alias 'pg:bigint', :bigint
|
17
|
-
type_map.register_alias 'pg:
|
12
|
+
type_map.register_alias 'pg:boolean', :boolean
|
18
13
|
type_map.register_alias 'pg:text', :string
|
19
|
-
type_map.register_alias 'pg:
|
14
|
+
type_map.register_alias 'pg:date', :date
|
15
|
+
type_map.register_alias 'pg:integer', :int
|
16
|
+
type_map.register_alias 'pg:json', :json
|
17
|
+
type_map.register_alias 'pg:numeric', :decimal
|
20
18
|
type_map.register_alias 'pg:real', :float
|
21
|
-
type_map.register_alias 'pg:double precision', :float
|
22
|
-
type_map.register_alias 'pg:money', :decimal
|
23
|
-
type_map.register_alias 'pg:character', :string
|
24
|
-
type_map.register_alias 'pg:character varying', :string
|
25
|
-
type_map.register_alias 'pg:timestamp', :date_time
|
26
|
-
type_map.register_alias 'pg:timestamp without time zone', :date_time
|
27
|
-
type_map.register_alias 'pg:timestamp with time zone', :date_time
|
28
19
|
type_map.register_alias 'pg:time without time zone', :time
|
29
|
-
type_map.register_alias 'pg:
|
30
|
-
|
20
|
+
type_map.register_alias 'pg:timestamp', :date_time
|
21
|
+
|
22
|
+
type_map.register_alias 'pg:char', 'pg:text'
|
23
|
+
type_map.register_alias 'pg:smallint', 'pg:integer'
|
24
|
+
type_map.register_alias 'pg:oid', 'pg:integer'
|
25
|
+
type_map.register_alias 'pg:double precision', 'pg:real'
|
26
|
+
type_map.register_alias 'pg:money', 'pg:numeric'
|
27
|
+
type_map.register_alias 'pg:character', 'pg:text'
|
28
|
+
type_map.register_alias 'pg:character varying', 'pg:text'
|
29
|
+
type_map.register_alias 'pg:timestamp without time zone', 'pg:timestamp'
|
30
|
+
type_map.register_alias 'pg:timestamp with time zone', 'pg:timestamp'
|
31
|
+
type_map.register_alias 'pg:time with time zone', 'pg:time without time zone'
|
32
|
+
type_map.register_alias 'pg:jsonb', 'pg:json'
|
31
33
|
|
32
|
-
module PG
|
34
|
+
module PG
|
33
35
|
module SourceMethods
|
34
36
|
protected
|
35
37
|
|
36
38
|
def pg_attributes
|
37
39
|
model.columns_hash.each_value do |column|
|
40
|
+
next yield(column.name, find_type!(:id)) if id_columns.include?(column.name)
|
41
|
+
|
38
42
|
type_name = column.sql_type_metadata.sql_type
|
39
43
|
type = find_type!('pg:' + type_name.gsub(/(\(|\[).*/, ''), fallback: :string)
|
40
44
|
|
41
|
-
|
42
|
-
yield column.name, type, options
|
45
|
+
yield(column.name, type, array: type_name.include?('[]'))
|
43
46
|
end
|
44
47
|
end
|
45
48
|
end
|
@@ -1,34 +1,37 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module Rails
|
4
|
-
module GraphQL
|
3
|
+
module Rails
|
4
|
+
module GraphQL
|
5
5
|
|
6
6
|
# Based on:
|
7
7
|
# https://github.com/rails/rails/blob/v6.0.0/activerecord/lib/active_record/
|
8
8
|
# connection_adapters/sqlite3_adapter.rb#L64
|
9
|
+
type_map.register_alias 'sqlite:binary', :binary
|
10
|
+
type_map.register_alias 'sqlite:boolean', :boolean
|
11
|
+
type_map.register_alias 'sqlite:date', :date
|
12
|
+
type_map.register_alias 'sqlite:datetime', :date_time
|
13
|
+
type_map.register_alias 'sqlite:decimal', :decimal
|
14
|
+
type_map.register_alias 'sqlite:float', :float
|
15
|
+
type_map.register_alias 'sqlite:integer', :int
|
16
|
+
type_map.register_alias 'sqlite:json', :json
|
9
17
|
type_map.register_alias 'sqlite:primary_key', :id
|
10
18
|
type_map.register_alias 'sqlite:string', :string
|
11
|
-
type_map.register_alias 'sqlite:text', :string
|
12
|
-
type_map.register_alias 'sqlite:integer', :int
|
13
|
-
type_map.register_alias 'sqlite:float', :float
|
14
|
-
type_map.register_alias 'sqlite:decimal', :decimal
|
15
|
-
type_map.register_alias 'sqlite:datetime', :date_time
|
16
19
|
type_map.register_alias 'sqlite:time', :time
|
17
|
-
type_map.register_alias 'sqlite:date', :date
|
18
|
-
type_map.register_alias 'sqlite:binary', :binary
|
19
|
-
type_map.register_alias 'sqlite:boolean', :boolean
|
20
|
-
# TODO: Add support to JSON type
|
21
|
-
# type_map.register_alias 'pg:json', :json
|
22
20
|
|
23
|
-
|
21
|
+
type_map.register_alias 'sqlite:varchar', 'sqlite:string'
|
22
|
+
type_map.register_alias 'sqlite:text', 'sqlite:string'
|
23
|
+
|
24
|
+
module SQLite
|
24
25
|
module SourceMethods
|
25
26
|
protected
|
26
27
|
|
27
28
|
def sqlite_attributes
|
28
29
|
model.columns_hash.each_value do |column|
|
30
|
+
next yield(column.name, find_type!(:id)) if id_columns.include?(column.name)
|
31
|
+
|
29
32
|
type_name = column.sql_type_metadata.sql_type
|
30
33
|
type = find_type!("sqlite:#{type_name}", fallback: :string)
|
31
|
-
yield
|
34
|
+
yield(column.name, type)
|
32
35
|
end
|
33
36
|
end
|
34
37
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module GraphQL
|
5
|
+
module Alternative
|
6
|
+
# = GraphQL Alternative Field Set
|
7
|
+
#
|
8
|
+
# A simple way to store fields that share some logic with each other
|
9
|
+
class FieldSet
|
10
|
+
extend Helpers::WithNamespace
|
11
|
+
extend Helpers::WithFields
|
12
|
+
|
13
|
+
include Helpers::Instantiable
|
14
|
+
|
15
|
+
self.field_type = Field::OutputField
|
16
|
+
self.valid_field_types = Type::Object.valid_field_types
|
17
|
+
|
18
|
+
def self.i18n_scope
|
19
|
+
:query
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.inspect
|
23
|
+
+"#<#{self.class.name} @fields=#{fields.inspect}>"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# = GraphQL Alternative Query Set
|
28
|
+
#
|
29
|
+
# Exact the same as a +FieldSet+
|
30
|
+
QuerySet = FieldSet
|
31
|
+
|
32
|
+
# = GraphQL Alternative Mutation Set
|
33
|
+
#
|
34
|
+
# Same as a +FieldSet+ but for mutation fields
|
35
|
+
MutationSet = Class.new(FieldSet)
|
36
|
+
MutationSet.field_type = Field::MutationField
|
37
|
+
MutationSet.redefine_singleton_method(:i18n_scope) { :mutation }
|
38
|
+
|
39
|
+
|
40
|
+
# = GraphQL Alternative Subscription Set
|
41
|
+
#
|
42
|
+
# Same as a +FieldSet+ but for subscription fields
|
43
|
+
SubscriptionSet = Class.new(FieldSet)
|
44
|
+
SubscriptionSet.field_type = Field::SubscriptionField
|
45
|
+
SubscriptionSet.redefine_singleton_method(:i18n_scope) { :subscription }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module GraphQL
|
5
|
+
# = GraphQL Alternative Mutation
|
6
|
+
#
|
7
|
+
# Same as it's parent class, but for mutations
|
8
|
+
class Alternative::Mutation < Alternative::Query
|
9
|
+
redefine_singleton_method(:type_field_class) { :mutation }
|
10
|
+
self.abstract = true
|
11
|
+
|
12
|
+
class << self
|
13
|
+
delegate :perform, to: :@field, allow_nil: true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module GraphQL
|
5
|
+
# = GraphQL Alternative Query
|
6
|
+
#
|
7
|
+
# This object acts like a field, but is organized as an object for extended
|
8
|
+
# resolvers or really complex fields.
|
9
|
+
class Alternative::Query
|
10
|
+
extend Helpers::WithNamespace
|
11
|
+
include Helpers::Instantiable
|
12
|
+
|
13
|
+
# An abstract class will not have its field imported
|
14
|
+
class_attribute :abstract, instance_accessor: false, default: false
|
15
|
+
self.abstract = true
|
16
|
+
|
17
|
+
class << self
|
18
|
+
delegate :gql_name, :to_sym, :desc, :argument, :ref_argument, :id_argument,
|
19
|
+
:use, :internal?, :disabled?, :enabled?, :disable!, :enable!, :rename!,
|
20
|
+
:authorize, :on, :description=, :description, to: :field
|
21
|
+
|
22
|
+
# Returns the type of the field class
|
23
|
+
def type_field_class
|
24
|
+
:query
|
25
|
+
end
|
26
|
+
|
27
|
+
# Alias does not work because of the override
|
28
|
+
def i18n_scope(*)
|
29
|
+
type_field_class
|
30
|
+
end
|
31
|
+
|
32
|
+
# Stores the underlying field of the object
|
33
|
+
def field
|
34
|
+
return @field if defined?(@field)
|
35
|
+
return define_field unless superclass.instance_variable_defined?(:@field)
|
36
|
+
import_field(superclass.field)
|
37
|
+
end
|
38
|
+
|
39
|
+
def inspect
|
40
|
+
defined?(@field) ? @field.inspect : super
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
|
45
|
+
# Mark the given class to be pending of registration
|
46
|
+
def inherited(subclass)
|
47
|
+
subclass.abstract = false
|
48
|
+
super if defined? super
|
49
|
+
end
|
50
|
+
|
51
|
+
# Create a new field for the class
|
52
|
+
def define_field(field_name = nil, type = :any, **xargs, &block)
|
53
|
+
field_name ||= anonymous? ? '_anonymous' : begin
|
54
|
+
type_module = type_field_class.to_s.classify.pluralize
|
55
|
+
user_name = name.split(+"#{type_module}::")[1]
|
56
|
+
user_name ||= name.delete_prefix('GraphQL::')
|
57
|
+
user_name.tr(':', '')
|
58
|
+
end
|
59
|
+
|
60
|
+
# Save the generated field ensuring the owner
|
61
|
+
@field = field_class.new(field_name, type, **xargs, owner: self, &block)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Import the field from a given source
|
65
|
+
def import_field(other_field, **xargs, &block)
|
66
|
+
@field = other_field.to_proxy(**xargs, owner: self, &block)
|
67
|
+
end
|
68
|
+
|
69
|
+
# Change the return type of the field
|
70
|
+
def returns(type, **xargs)
|
71
|
+
full = xargs.fetch(:full, false)
|
72
|
+
null = full ? false : xargs.fetch(:null, true)
|
73
|
+
array = full ? true : xargs.fetch(:array, false)
|
74
|
+
nullable = full ? false : xargs.fetch(:nullable, true)
|
75
|
+
|
76
|
+
field.send(:assign_type, type)
|
77
|
+
field.instance_variable_set(:@null, null)
|
78
|
+
field.instance_variable_set(:@array, array)
|
79
|
+
field.instance_variable_set(:@nullable, nullable)
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
# Return the class of the underlying field
|
85
|
+
def field_class
|
86
|
+
return @field.class if defined?(@field)
|
87
|
+
list = Helpers::WithSchemaFields::TYPE_FIELD_CLASS
|
88
|
+
GraphQL::Field.const_get(list[type_field_class])
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# = GraphQL Alternative Field
|
94
|
+
#
|
95
|
+
# Just an alias, since query fields are the same as output fields
|
96
|
+
Alternative.const_set(:Field, Alternative::Query)
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module GraphQL
|
5
|
+
# = GraphQL Alternative Subscription
|
6
|
+
#
|
7
|
+
# Same as it's parent class, but for subscription
|
8
|
+
class Alternative::Subscription < Alternative::Query
|
9
|
+
redefine_singleton_method(:type_field_class) { :subscription }
|
10
|
+
self.abstract = true
|
11
|
+
|
12
|
+
class << self
|
13
|
+
delegate :scope, :trigger_for, :trigger, :unsubscribe_from, :unsubscribe,
|
14
|
+
to: :@field, allow_nil: true
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module GraphQL
|
5
|
+
# Several alternatives to declare GraphQL objects
|
6
|
+
module Alternative
|
7
|
+
extend ActiveSupport::Autoload
|
8
|
+
|
9
|
+
autoload :Query
|
10
|
+
autoload :Mutation
|
11
|
+
autoload :Subscription
|
12
|
+
|
13
|
+
autoload_at "#{__dir__}/alternative/field_set" do
|
14
|
+
autoload :FieldSet
|
15
|
+
autoload :MutationSet
|
16
|
+
autoload :SubscriptionSet
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|