graphql_rails 2.3.0 → 3.0.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/.github/workflows/ruby.yml +3 -2
- data/CHANGELOG.md +21 -0
- data/Gemfile.lock +76 -73
- data/docs/README.md +1 -1
- data/docs/components/controller.md +15 -1
- data/docs/components/model.md +130 -6
- data/docs/components/routes.md +20 -10
- data/graphql_rails.gemspec +1 -1
- data/lib/generators/graphql_rails/templates/graphql_controller.erb +1 -1
- data/lib/graphql_rails/attributes/attributable.rb +6 -0
- data/lib/graphql_rails/attributes/attribute.rb +22 -9
- data/lib/graphql_rails/attributes/attribute_configurable.rb +27 -0
- data/lib/graphql_rails/attributes/attribute_name_parser.rb +4 -4
- data/lib/graphql_rails/attributes/input_attribute.rb +7 -1
- data/lib/graphql_rails/attributes/type_parseable.rb +6 -7
- data/lib/graphql_rails/controller/action.rb +4 -4
- data/lib/graphql_rails/controller/action_configuration.rb +1 -1
- data/lib/graphql_rails/controller/build_controller_action_resolver.rb +4 -15
- data/lib/graphql_rails/controller/configuration.rb +7 -2
- data/lib/graphql_rails/controller/handle_controller_error.rb +65 -0
- data/lib/graphql_rails/controller/log_controller_action.rb +1 -0
- data/lib/graphql_rails/controller/request/format_errors.rb +1 -1
- data/lib/graphql_rails/controller/request.rb +3 -2
- data/lib/graphql_rails/controller.rb +9 -6
- data/lib/graphql_rails/decorator/relation_decorator.rb +2 -2
- data/lib/graphql_rails/errors/custom_execution_error.rb +1 -1
- data/lib/graphql_rails/errors/execution_error.rb +1 -1
- data/lib/graphql_rails/model/configuration.rb +15 -2
- data/lib/graphql_rails/model/find_or_build_graphql_input_type.rb +36 -0
- data/lib/graphql_rails/model/find_or_build_graphql_type.rb +47 -13
- data/lib/graphql_rails/model/find_or_build_graphql_type_class.rb +7 -3
- data/lib/graphql_rails/model/input.rb +3 -3
- data/lib/graphql_rails/router/event_route.rb +52 -0
- data/lib/graphql_rails/router/mutation_route.rb +1 -1
- data/lib/graphql_rails/router/query_route.rb +1 -1
- data/lib/graphql_rails/router/resource_routes_builder.rb +0 -8
- data/lib/graphql_rails/router/route.rb +12 -2
- data/lib/graphql_rails/router/schema_builder.rb +15 -10
- data/lib/graphql_rails/router.rb +8 -8
- data/lib/graphql_rails/rspec_controller_helpers.rb +17 -3
- data/lib/graphql_rails/types/hidable_by_group.rb +23 -3
- data/lib/graphql_rails/types/input_object_type.rb +16 -0
- data/lib/graphql_rails/version.rb +1 -1
- metadata +10 -14
- data/lib/graphql_rails/model/build_graphql_input_type.rb +0 -43
- data/lib/graphql_rails/router/subscription_route.rb +0 -22
@@ -9,11 +9,13 @@ module GraphqlRails
|
|
9
9
|
|
10
10
|
include ::GraphqlRails::Service
|
11
11
|
|
12
|
-
def initialize(name:, type_name:, description: nil)
|
12
|
+
def initialize(name:, type_name:, parent_class:, description: nil, implements: [])
|
13
13
|
@name = name
|
14
14
|
@type_name = type_name
|
15
15
|
@description = description
|
16
16
|
@new_class = false
|
17
|
+
@parent_class = parent_class
|
18
|
+
@implements = implements
|
17
19
|
end
|
18
20
|
|
19
21
|
def klass
|
@@ -27,15 +29,17 @@ module GraphqlRails
|
|
27
29
|
private
|
28
30
|
|
29
31
|
attr_accessor :new_class
|
30
|
-
attr_reader :name, :type_name, :description
|
32
|
+
attr_reader :name, :type_name, :description, :parent_class, :implements
|
31
33
|
|
32
34
|
def build_graphql_type_klass
|
33
35
|
graphql_type_name = name
|
34
36
|
graphql_type_description = description
|
37
|
+
interfaces = implements
|
35
38
|
|
36
|
-
graphql_type_klass = Class.new(
|
39
|
+
graphql_type_klass = Class.new(parent_class) do
|
37
40
|
graphql_name(graphql_type_name)
|
38
41
|
description(graphql_type_description)
|
42
|
+
interfaces.each { |interface| implements(interface) }
|
39
43
|
end
|
40
44
|
|
41
45
|
self.new_class = true
|
@@ -6,7 +6,7 @@ module GraphqlRails
|
|
6
6
|
class Input
|
7
7
|
require 'graphql_rails/concerns/chainable_options'
|
8
8
|
require 'graphql_rails/model/configurable'
|
9
|
-
require 'graphql_rails/model/
|
9
|
+
require 'graphql_rails/model/find_or_build_graphql_input_type'
|
10
10
|
|
11
11
|
include Configurable
|
12
12
|
|
@@ -18,8 +18,8 @@ module GraphqlRails
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def graphql_input_type
|
21
|
-
@graphql_input_type ||=
|
22
|
-
name: name, description: description, attributes: attributes
|
21
|
+
@graphql_input_type ||= FindOrBuildGraphqlInputType.call(
|
22
|
+
name: name, description: description, attributes: attributes, type_name: type_name
|
23
23
|
)
|
24
24
|
end
|
25
25
|
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'route'
|
4
|
+
|
5
|
+
module GraphqlRails
|
6
|
+
class Router
|
7
|
+
# stores subscription type graphql action info
|
8
|
+
class EventRoute
|
9
|
+
attr_reader :name, :module_name, :subscription_class, :groups, :scope_names
|
10
|
+
|
11
|
+
def initialize(name, subscription_class: nil, groups: nil, scope_names: [], **options)
|
12
|
+
@name = name.to_s.camelize(:lower)
|
13
|
+
@module_name = options[:module].to_s
|
14
|
+
@groups = groups
|
15
|
+
@subscription_class = subscription_class
|
16
|
+
@scope_names = scope_names
|
17
|
+
end
|
18
|
+
|
19
|
+
def show_in_group?(group_name)
|
20
|
+
return true if groups.nil? || groups.empty?
|
21
|
+
|
22
|
+
groups.include?(group_name&.to_sym)
|
23
|
+
end
|
24
|
+
|
25
|
+
def field_options
|
26
|
+
{ subscription: subscription }
|
27
|
+
end
|
28
|
+
|
29
|
+
def subscription
|
30
|
+
if subscription_class.present?
|
31
|
+
subscription_class.is_a?(String) ? Object.const_get(subscription_class) : subscription_class
|
32
|
+
else
|
33
|
+
klass_name = ['subscriptions/', name.underscore, 'subscription'].join('_').camelize
|
34
|
+
|
35
|
+
Object.const_get(klass_name)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def mutation?
|
40
|
+
false
|
41
|
+
end
|
42
|
+
|
43
|
+
def query?
|
44
|
+
false
|
45
|
+
end
|
46
|
+
|
47
|
+
def event?
|
48
|
+
true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -28,10 +28,6 @@ module GraphqlRails
|
|
28
28
|
routes << build_mutation(*args, **kwargs)
|
29
29
|
end
|
30
30
|
|
31
|
-
def subscription(*args, **kwargs)
|
32
|
-
routes << build_subscription(*args, **kwargs)
|
33
|
-
end
|
34
|
-
|
35
31
|
private
|
36
32
|
|
37
33
|
attr_reader :autogenerated_action_names, :name, :options
|
@@ -66,10 +62,6 @@ module GraphqlRails
|
|
66
62
|
build_route(QueryRoute, *args, **kwargs)
|
67
63
|
end
|
68
64
|
|
69
|
-
def build_subscription(*args, **kwargs)
|
70
|
-
build_route(SubscriptionRoute, *args, **kwargs)
|
71
|
-
end
|
72
|
-
|
73
65
|
# rubocop:disable Metrics/ParameterLists
|
74
66
|
def build_route(builder, action, prefix: action, suffix: false, on: :member, **custom_options)
|
75
67
|
if suffix == true
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative '../controller/build_controller_action_resolver'
|
4
|
+
require 'graphql_rails/controller/action'
|
4
5
|
|
5
6
|
module GraphqlRails
|
6
7
|
class Router
|
@@ -38,7 +39,7 @@ module GraphqlRails
|
|
38
39
|
if function
|
39
40
|
{ function: function }
|
40
41
|
else
|
41
|
-
{ resolver: resolver }
|
42
|
+
{ resolver: resolver, extras: [:lookahead], **resolver_options }
|
42
43
|
end
|
43
44
|
end
|
44
45
|
|
@@ -47,7 +48,16 @@ module GraphqlRails
|
|
47
48
|
attr_reader :function
|
48
49
|
|
49
50
|
def resolver
|
50
|
-
@resolver ||= Controller::BuildControllerActionResolver.call(
|
51
|
+
@resolver ||= Controller::BuildControllerActionResolver.call(action: action)
|
52
|
+
end
|
53
|
+
|
54
|
+
def action
|
55
|
+
@action ||= Controller::Action.new(self).tap(&:return_type)
|
56
|
+
end
|
57
|
+
|
58
|
+
def resolver_options
|
59
|
+
action_config = action.action_config
|
60
|
+
action_config.pagination_options || {}
|
51
61
|
end
|
52
62
|
end
|
53
63
|
end
|
@@ -7,12 +7,12 @@ module GraphqlRails
|
|
7
7
|
require_relative './plain_cursor_encoder'
|
8
8
|
require_relative './build_schema_action_type'
|
9
9
|
|
10
|
-
attr_reader :queries, :mutations, :
|
10
|
+
attr_reader :queries, :mutations, :events, :raw_actions
|
11
11
|
|
12
|
-
def initialize(queries:, mutations:,
|
12
|
+
def initialize(queries:, mutations:, events:, raw_actions:, group: nil)
|
13
13
|
@queries = queries
|
14
14
|
@mutations = mutations
|
15
|
-
@
|
15
|
+
@events = events
|
16
16
|
@raw_actions = raw_actions
|
17
17
|
@group = group
|
18
18
|
end
|
@@ -20,26 +20,31 @@ module GraphqlRails
|
|
20
20
|
def call
|
21
21
|
query_type = build_group_type('Query', queries)
|
22
22
|
mutation_type = build_group_type('Mutation', mutations)
|
23
|
-
subscription_type = build_group_type('Subscription',
|
24
|
-
raw = raw_actions
|
23
|
+
subscription_type = build_group_type('Subscription', events)
|
25
24
|
|
25
|
+
define_schema_class(query_type, mutation_type, subscription_type, raw_actions)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
attr_reader :group
|
31
|
+
|
32
|
+
# rubocop:disable Metrics/MethodLength
|
33
|
+
def define_schema_class(query_type, mutation_type, subscription_type, raw)
|
26
34
|
Class.new(GraphQL::Schema) do
|
27
35
|
connections.add(
|
28
36
|
GraphqlRails::Decorator::RelationDecorator,
|
29
37
|
GraphQL::Pagination::ActiveRecordRelationConnection
|
30
38
|
)
|
31
39
|
cursor_encoder(Router::PlainCursorEncoder)
|
32
|
-
raw.each { |action| send(action[:name], *action[:args], &action[:block]) }
|
40
|
+
raw.each { |action| send(action[:name], *action[:args], **action[:kwargs], &action[:block]) }
|
33
41
|
|
34
42
|
query(query_type) if query_type
|
35
43
|
mutation(mutation_type) if mutation_type
|
36
44
|
subscription(subscription_type) if subscription_type
|
37
45
|
end
|
38
46
|
end
|
39
|
-
|
40
|
-
private
|
41
|
-
|
42
|
-
attr_reader :group
|
47
|
+
# rubocop:enable Metrics/MethodLength
|
43
48
|
|
44
49
|
def build_group_type(type_name, routes)
|
45
50
|
group_name = group
|
data/lib/graphql_rails/router.rb
CHANGED
@@ -5,7 +5,7 @@ require 'active_support/core_ext/string/inflections'
|
|
5
5
|
require 'graphql_rails/router/schema_builder'
|
6
6
|
require 'graphql_rails/router/mutation_route'
|
7
7
|
require 'graphql_rails/router/query_route'
|
8
|
-
require 'graphql_rails/router/
|
8
|
+
require 'graphql_rails/router/event_route'
|
9
9
|
require 'graphql_rails/router/resource_routes_builder'
|
10
10
|
|
11
11
|
module GraphqlRails
|
@@ -63,13 +63,13 @@ module GraphqlRails
|
|
63
63
|
routes << build_route(MutationRoute, name, **options)
|
64
64
|
end
|
65
65
|
|
66
|
-
def
|
67
|
-
routes << build_route(
|
66
|
+
def event(name, **options)
|
67
|
+
routes << build_route(EventRoute, name, **options)
|
68
68
|
end
|
69
69
|
|
70
70
|
RAW_ACTION_NAMES.each do |action_name|
|
71
|
-
define_method(action_name) do |*args, &block|
|
72
|
-
add_raw_action(action_name, *args, &block)
|
71
|
+
define_method(action_name) do |*args, **kwargs, &block|
|
72
|
+
add_raw_action(action_name, *args, **kwargs, &block)
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
@@ -77,7 +77,7 @@ module GraphqlRails
|
|
77
77
|
@graphql_schema[group&.to_sym] ||= SchemaBuilder.new(
|
78
78
|
queries: routes.select(&:query?),
|
79
79
|
mutations: routes.select(&:mutation?),
|
80
|
-
|
80
|
+
events: routes.select(&:event?),
|
81
81
|
raw_actions: raw_graphql_actions,
|
82
82
|
group: group
|
83
83
|
).call
|
@@ -110,8 +110,8 @@ module GraphqlRails
|
|
110
110
|
{ module_name: module_name, group_names: group_names, scope_names: scope_names }
|
111
111
|
end
|
112
112
|
|
113
|
-
def add_raw_action(name, *args, &block)
|
114
|
-
raw_graphql_actions << { name: name, args: args, block: block }
|
113
|
+
def add_raw_action(name, *args, **kwargs, &block)
|
114
|
+
raw_graphql_actions << { name: name, args: args, kwargs: kwargs, block: block }
|
115
115
|
end
|
116
116
|
|
117
117
|
def build_route(route_builder, name, **options)
|
@@ -46,6 +46,14 @@ module GraphqlRails
|
|
46
46
|
!success?
|
47
47
|
end
|
48
48
|
|
49
|
+
def controller
|
50
|
+
request.controller
|
51
|
+
end
|
52
|
+
|
53
|
+
def action_name
|
54
|
+
request.action_name
|
55
|
+
end
|
56
|
+
|
49
57
|
private
|
50
58
|
|
51
59
|
attr_reader :request
|
@@ -94,15 +102,21 @@ module GraphqlRails
|
|
94
102
|
|
95
103
|
# controller request object more suitable for testing
|
96
104
|
class Request < GraphqlRails::Controller::Request
|
97
|
-
|
98
|
-
|
105
|
+
attr_reader :controller, :action_name
|
106
|
+
|
107
|
+
def initialize(params, context, controller: nil, action_name: nil)
|
108
|
+
inputs = params || {}
|
109
|
+
inputs = inputs.merge(lookahead: ::GraphQL::Execution::Lookahead::NullLookahead.new)
|
110
|
+
@controller = controller
|
111
|
+
@action_name = action_name
|
112
|
+
super(nil, inputs, context)
|
99
113
|
end
|
100
114
|
end
|
101
115
|
|
102
116
|
def query(query_name, params: {}, context: {})
|
103
117
|
schema_builder = SingleControllerSchemaBuilder.new(described_class)
|
104
118
|
context_object = FakeContext.new(values: context, schema: schema_builder.call)
|
105
|
-
request = Request.new(params, context_object)
|
119
|
+
request = Request.new(params, context_object, controller: described_class, action_name: query_name)
|
106
120
|
described_class.new(request).call(query_name)
|
107
121
|
|
108
122
|
@response = Response.new(request)
|
@@ -6,10 +6,11 @@ module GraphqlRails
|
|
6
6
|
module Types
|
7
7
|
# Add visibility option based on groups
|
8
8
|
module HidableByGroup
|
9
|
-
def initialize(*args, groups: [], **kwargs, &block)
|
9
|
+
def initialize(*args, groups: [], hidden_in_groups: [], **kwargs, &block)
|
10
10
|
super(*args, **kwargs, &block)
|
11
11
|
|
12
|
-
@
|
12
|
+
@hidden_in_groups = hidden_in_groups.map(&:to_s)
|
13
|
+
@groups = groups.map(&:to_s) - @hidden_in_groups
|
13
14
|
end
|
14
15
|
|
15
16
|
def visible?(context)
|
@@ -22,10 +23,29 @@ module GraphqlRails
|
|
22
23
|
@groups
|
23
24
|
end
|
24
25
|
|
26
|
+
def hidden_in_groups
|
27
|
+
@hidden_in_groups
|
28
|
+
end
|
29
|
+
|
25
30
|
def visible_in_context_group?(context)
|
31
|
+
group = context_graphql_group(context)
|
32
|
+
|
33
|
+
return true if no_visibility_configuration?(group)
|
34
|
+
return groups.include?(group) unless groups.empty?
|
35
|
+
|
36
|
+
!hidden_in_groups.include?(group)
|
37
|
+
end
|
38
|
+
|
39
|
+
def no_visibility_configuration?(group)
|
40
|
+
return true if group.nil?
|
41
|
+
|
42
|
+
groups.empty? && hidden_in_groups.empty?
|
43
|
+
end
|
44
|
+
|
45
|
+
def context_graphql_group(context)
|
26
46
|
group = context[:graphql_group] || context['graphql_group']
|
27
47
|
|
28
|
-
group.nil?
|
48
|
+
group.nil? ? nil : group.to_s
|
29
49
|
end
|
30
50
|
end
|
31
51
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'graphql_rails/types/argument_type'
|
4
|
+
|
5
|
+
module GraphqlRails
|
6
|
+
module Types
|
7
|
+
# Base graphql type class for all GraphqlRails models
|
8
|
+
class InputObjectType < GraphQL::Schema::InputObject
|
9
|
+
argument_class(GraphqlRails::Types::ArgumentType)
|
10
|
+
|
11
|
+
def self.inspect
|
12
|
+
"#{GraphQL::Schema::InputObject}(#{graphql_name})"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,35 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Povilas Jurčys
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: graphql
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.12'
|
20
|
-
- - ">="
|
17
|
+
- - '='
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.
|
19
|
+
version: 2.1.7
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '1.12'
|
30
|
-
- - ">="
|
24
|
+
- - '='
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.
|
26
|
+
version: 2.1.7
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: activesupport
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -190,6 +184,7 @@ files:
|
|
190
184
|
- lib/graphql_rails/controller/build_controller_action_resolver.rb
|
191
185
|
- lib/graphql_rails/controller/build_controller_action_resolver/controller_action_resolver.rb
|
192
186
|
- lib/graphql_rails/controller/configuration.rb
|
187
|
+
- lib/graphql_rails/controller/handle_controller_error.rb
|
193
188
|
- lib/graphql_rails/controller/log_controller_action.rb
|
194
189
|
- lib/graphql_rails/controller/request.rb
|
195
190
|
- lib/graphql_rails/controller/request/format_errors.rb
|
@@ -209,10 +204,10 @@ files:
|
|
209
204
|
- lib/graphql_rails/model/build_connection_type.rb
|
210
205
|
- lib/graphql_rails/model/build_connection_type/count_items.rb
|
211
206
|
- lib/graphql_rails/model/build_enum_type.rb
|
212
|
-
- lib/graphql_rails/model/build_graphql_input_type.rb
|
213
207
|
- lib/graphql_rails/model/call_graphql_model_method.rb
|
214
208
|
- lib/graphql_rails/model/configurable.rb
|
215
209
|
- lib/graphql_rails/model/configuration.rb
|
210
|
+
- lib/graphql_rails/model/find_or_build_graphql_input_type.rb
|
216
211
|
- lib/graphql_rails/model/find_or_build_graphql_type.rb
|
217
212
|
- lib/graphql_rails/model/find_or_build_graphql_type_class.rb
|
218
213
|
- lib/graphql_rails/model/input.rb
|
@@ -220,13 +215,13 @@ files:
|
|
220
215
|
- lib/graphql_rails/railtie.rb
|
221
216
|
- lib/graphql_rails/router.rb
|
222
217
|
- lib/graphql_rails/router/build_schema_action_type.rb
|
218
|
+
- lib/graphql_rails/router/event_route.rb
|
223
219
|
- lib/graphql_rails/router/mutation_route.rb
|
224
220
|
- lib/graphql_rails/router/plain_cursor_encoder.rb
|
225
221
|
- lib/graphql_rails/router/query_route.rb
|
226
222
|
- lib/graphql_rails/router/resource_routes_builder.rb
|
227
223
|
- lib/graphql_rails/router/route.rb
|
228
224
|
- lib/graphql_rails/router/schema_builder.rb
|
229
|
-
- lib/graphql_rails/router/subscription_route.rb
|
230
225
|
- lib/graphql_rails/rspec_controller_helpers.rb
|
231
226
|
- lib/graphql_rails/tasks/dump_graphql_schema.rb
|
232
227
|
- lib/graphql_rails/tasks/dump_graphql_schemas.rb
|
@@ -234,6 +229,7 @@ files:
|
|
234
229
|
- lib/graphql_rails/types/argument_type.rb
|
235
230
|
- lib/graphql_rails/types/field_type.rb
|
236
231
|
- lib/graphql_rails/types/hidable_by_group.rb
|
232
|
+
- lib/graphql_rails/types/input_object_type.rb
|
237
233
|
- lib/graphql_rails/types/object_type.rb
|
238
234
|
- lib/graphql_rails/version.rb
|
239
235
|
homepage: https://github.com/samesystem/graphql_rails
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'graphql_rails/types/argument_type'
|
4
|
-
require 'graphql_rails/concerns/service'
|
5
|
-
|
6
|
-
module GraphqlRails
|
7
|
-
module Model
|
8
|
-
# stores information about model specific config, like attributes and types
|
9
|
-
class BuildGraphqlInputType
|
10
|
-
include ::GraphqlRails::Service
|
11
|
-
|
12
|
-
def initialize(name:, description: nil, attributes:)
|
13
|
-
@name = name
|
14
|
-
@attributes = attributes
|
15
|
-
@description = description
|
16
|
-
end
|
17
|
-
|
18
|
-
def call
|
19
|
-
type_name = name
|
20
|
-
type_description = description
|
21
|
-
type_attributes = attributes
|
22
|
-
|
23
|
-
Class.new(GraphQL::Schema::InputObject) do
|
24
|
-
argument_class(GraphqlRails::Types::ArgumentType)
|
25
|
-
graphql_name(type_name)
|
26
|
-
description(type_description)
|
27
|
-
|
28
|
-
type_attributes.each_value do |type_attribute|
|
29
|
-
argument(*type_attribute.input_argument_args, **type_attribute.input_argument_options)
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.inspect
|
33
|
-
"#{GraphQL::Schema::InputObject}(#{graphql_name})"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
attr_reader :model_configuration, :attributes, :name, :description
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'route'
|
4
|
-
|
5
|
-
module GraphqlRails
|
6
|
-
class Router
|
7
|
-
# stores subscription type graphql action info
|
8
|
-
class SubscriptionRoute < Route
|
9
|
-
def query?
|
10
|
-
false
|
11
|
-
end
|
12
|
-
|
13
|
-
def mutation?
|
14
|
-
false
|
15
|
-
end
|
16
|
-
|
17
|
-
def subscription?
|
18
|
-
true
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|