graphql_rails 0.8.0 → 1.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/CHANGELOG.md +13 -0
- data/Gemfile.lock +20 -23
- data/docs/README.md +21 -5
- data/docs/_sidebar.md +3 -0
- data/docs/components/controller.md +174 -17
- data/docs/components/model.md +151 -3
- data/docs/components/routes.md +28 -0
- data/docs/getting_started/quick_start.md +9 -2
- data/docs/other_tools/query_runner.md +49 -0
- data/docs/other_tools/schema_dump.md +29 -0
- data/docs/testing/testing.md +3 -1
- data/graphql_rails.gemspec +1 -1
- data/lib/generators/graphql_rails/install_generator.rb +50 -0
- data/lib/generators/graphql_rails/templates/example_users_controller.erb +19 -0
- data/lib/generators/graphql_rails/templates/graphql_application_controller.erb +8 -0
- data/lib/generators/graphql_rails/templates/graphql_controller.erb +20 -0
- data/lib/generators/graphql_rails/templates/graphql_router.erb +19 -0
- data/lib/generators/graphql_rails/templates/graphql_router_spec.erb +18 -0
- data/lib/graphql_rails.rb +2 -0
- data/lib/graphql_rails/attributes/attributable.rb +16 -13
- data/lib/graphql_rails/attributes/attribute.rb +20 -3
- data/lib/graphql_rails/attributes/input_attribute.rb +20 -10
- data/lib/graphql_rails/attributes/input_type_parser.rb +24 -46
- data/lib/graphql_rails/attributes/type_parseable.rb +128 -0
- data/lib/graphql_rails/attributes/type_parser.rb +58 -54
- data/lib/graphql_rails/concerns/service.rb +15 -0
- data/lib/graphql_rails/controller.rb +20 -16
- data/lib/graphql_rails/controller/action.rb +10 -69
- data/lib/graphql_rails/controller/action_configuration.rb +70 -34
- data/lib/graphql_rails/controller/build_controller_action_resolver.rb +52 -0
- data/lib/graphql_rails/controller/build_controller_action_resolver/controller_action_resolver.rb +28 -0
- data/lib/graphql_rails/controller/configuration.rb +56 -5
- data/lib/graphql_rails/controller/log_controller_action.rb +4 -4
- data/lib/graphql_rails/controller/request.rb +29 -8
- data/lib/graphql_rails/controller/request/format_errors.rb +58 -0
- data/lib/graphql_rails/decorator/relation_decorator.rb +1 -1
- data/lib/graphql_rails/errors/custom_execution_error.rb +22 -0
- data/lib/graphql_rails/errors/execution_error.rb +6 -7
- data/lib/graphql_rails/errors/system_error.rb +14 -0
- data/lib/graphql_rails/errors/validation_error.rb +1 -5
- data/lib/graphql_rails/input_configurable.rb +47 -0
- data/lib/graphql_rails/model.rb +19 -4
- data/lib/graphql_rails/model/build_connection_type.rb +48 -0
- data/lib/graphql_rails/model/{configuration → build_connection_type}/count_items.rb +4 -4
- data/lib/graphql_rails/model/build_enum_type.rb +39 -10
- data/lib/graphql_rails/model/build_graphql_input_type.rb +7 -3
- data/lib/graphql_rails/model/build_graphql_type.rb +23 -7
- data/lib/graphql_rails/model/call_graphql_model_method.rb +59 -0
- data/lib/graphql_rails/model/configuration.rb +2 -6
- data/lib/graphql_rails/model/input.rb +10 -6
- data/lib/graphql_rails/query_runner.rb +68 -0
- data/lib/graphql_rails/railtie.rb +10 -0
- data/lib/graphql_rails/router.rb +40 -13
- data/lib/graphql_rails/router/resource_routes_builder.rb +2 -1
- data/lib/graphql_rails/router/route.rb +25 -6
- data/lib/graphql_rails/router/schema_builder.rb +26 -11
- data/lib/graphql_rails/rspec_controller_helpers.rb +4 -2
- data/lib/graphql_rails/tasks/dump_graphql_schema.rb +57 -0
- data/lib/graphql_rails/tasks/schema.rake +14 -0
- data/lib/graphql_rails/version.rb +1 -1
- metadata +29 -9
- data/lib/graphql_rails/controller/controller_function.rb +0 -50
- data/lib/graphql_rails/controller/format_results.rb +0 -36
@@ -82,11 +82,13 @@ module GraphqlRails
|
|
82
82
|
action_by_name = config.action_by_name
|
83
83
|
controller_path = controller.name.underscore.sub(/_controller\Z/, '')
|
84
84
|
|
85
|
-
Router.draw do
|
85
|
+
router = Router.draw do
|
86
86
|
action_by_name.keys.each do |action_name|
|
87
|
-
query("#{action_name}_test", to: "#{controller_path}##{action_name}")
|
87
|
+
query("#{action_name}_test", to: "#{controller_path}##{action_name}", group: :graphql_rspec_helpers)
|
88
88
|
end
|
89
89
|
end
|
90
|
+
|
91
|
+
router.graphql_schema(:graphql_rspec_helpers)
|
90
92
|
end
|
91
93
|
end
|
92
94
|
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GraphqlRails
|
4
|
+
# Generates graphql schema dump files
|
5
|
+
class DumpGraphqlSchema
|
6
|
+
require 'graphql_rails/errors/error'
|
7
|
+
|
8
|
+
class MissingGraphqlRouterError < GraphqlRails::Error; end
|
9
|
+
|
10
|
+
attr_reader :name
|
11
|
+
|
12
|
+
def self.call(*args)
|
13
|
+
new(*args).call
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(name:)
|
17
|
+
@name = name
|
18
|
+
end
|
19
|
+
|
20
|
+
def call
|
21
|
+
validate
|
22
|
+
File.write(schema_path, schema.to_definition)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def validate
|
28
|
+
return if router
|
29
|
+
|
30
|
+
error_message = \
|
31
|
+
'GraphqlRouter is missing. ' \
|
32
|
+
'Run `rails g graphql_rails:install` to build it'
|
33
|
+
raise MissingGraphqlRouterError, error_message
|
34
|
+
end
|
35
|
+
|
36
|
+
def router
|
37
|
+
@router ||= '::GraphqlRouter'.safe_constantize
|
38
|
+
end
|
39
|
+
|
40
|
+
def schema
|
41
|
+
@schema ||= ::GraphqlRouter.graphql_schema(name.presence)
|
42
|
+
end
|
43
|
+
|
44
|
+
def schema_path
|
45
|
+
ENV['GRAPHQL_SCHEMA_DUMP_PATH'] || default_schema_path
|
46
|
+
end
|
47
|
+
|
48
|
+
def default_schema_path
|
49
|
+
schema_folder_path = Rails.root.join('spec', 'fixtures')
|
50
|
+
|
51
|
+
FileUtils.mkdir_p(schema_folder_path)
|
52
|
+
file_name = name.present? ? "graphql_#{name}_schema.graphql" : 'graphql_schema.graphql'
|
53
|
+
|
54
|
+
schema_folder_path.join(file_name)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'graphql_rails/tasks/dump_graphql_schema'
|
4
|
+
|
5
|
+
namespace :graphql_rails do
|
6
|
+
namespace :schema do
|
7
|
+
desc 'Dump GraphQL schema'
|
8
|
+
task(:dump, %i[name] => :environment) do |_, args|
|
9
|
+
default_name = ENV.fetch('SCHEMA_GROUP_NAME', '')
|
10
|
+
args.with_defaults(name: default_name)
|
11
|
+
GraphqlRails::DumpGraphqlSchema.call(name: args.name)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.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: 2020-02-07 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
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.9.12
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.9.12
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -154,8 +154,16 @@ files:
|
|
154
154
|
- docs/getting_started/setup.md
|
155
155
|
- docs/index.html
|
156
156
|
- docs/logging_and_monitoring/logging_and_monitoring.md
|
157
|
+
- docs/other_tools/query_runner.md
|
158
|
+
- docs/other_tools/schema_dump.md
|
157
159
|
- docs/testing/testing.md
|
158
160
|
- graphql_rails.gemspec
|
161
|
+
- lib/generators/graphql_rails/install_generator.rb
|
162
|
+
- lib/generators/graphql_rails/templates/example_users_controller.erb
|
163
|
+
- lib/generators/graphql_rails/templates/graphql_application_controller.erb
|
164
|
+
- lib/generators/graphql_rails/templates/graphql_controller.erb
|
165
|
+
- lib/generators/graphql_rails/templates/graphql_router.erb
|
166
|
+
- lib/generators/graphql_rails/templates/graphql_router_spec.erb
|
159
167
|
- lib/graphql_rails.rb
|
160
168
|
- lib/graphql_rails/attributes.rb
|
161
169
|
- lib/graphql_rails/attributes/attributable.rb
|
@@ -164,33 +172,43 @@ files:
|
|
164
172
|
- lib/graphql_rails/attributes/input_attribute.rb
|
165
173
|
- lib/graphql_rails/attributes/input_type_parser.rb
|
166
174
|
- lib/graphql_rails/attributes/type_name_info.rb
|
175
|
+
- lib/graphql_rails/attributes/type_parseable.rb
|
167
176
|
- lib/graphql_rails/attributes/type_parser.rb
|
177
|
+
- lib/graphql_rails/concerns/service.rb
|
168
178
|
- lib/graphql_rails/controller.rb
|
169
179
|
- lib/graphql_rails/controller/action.rb
|
170
180
|
- lib/graphql_rails/controller/action_configuration.rb
|
171
181
|
- lib/graphql_rails/controller/action_hook.rb
|
172
182
|
- lib/graphql_rails/controller/action_hooks_runner.rb
|
183
|
+
- lib/graphql_rails/controller/build_controller_action_resolver.rb
|
184
|
+
- lib/graphql_rails/controller/build_controller_action_resolver/controller_action_resolver.rb
|
173
185
|
- lib/graphql_rails/controller/configuration.rb
|
174
|
-
- lib/graphql_rails/controller/controller_function.rb
|
175
|
-
- lib/graphql_rails/controller/format_results.rb
|
176
186
|
- lib/graphql_rails/controller/log_controller_action.rb
|
177
187
|
- lib/graphql_rails/controller/request.rb
|
188
|
+
- lib/graphql_rails/controller/request/format_errors.rb
|
178
189
|
- lib/graphql_rails/decorator.rb
|
179
190
|
- lib/graphql_rails/decorator/relation_decorator.rb
|
191
|
+
- lib/graphql_rails/errors/custom_execution_error.rb
|
180
192
|
- lib/graphql_rails/errors/error.rb
|
181
193
|
- lib/graphql_rails/errors/execution_error.rb
|
194
|
+
- lib/graphql_rails/errors/system_error.rb
|
182
195
|
- lib/graphql_rails/errors/validation_error.rb
|
196
|
+
- lib/graphql_rails/input_configurable.rb
|
183
197
|
- lib/graphql_rails/integrations.rb
|
184
198
|
- lib/graphql_rails/integrations/lograge.rb
|
185
199
|
- lib/graphql_rails/integrations/sentry.rb
|
186
200
|
- lib/graphql_rails/model.rb
|
201
|
+
- lib/graphql_rails/model/build_connection_type.rb
|
202
|
+
- lib/graphql_rails/model/build_connection_type/count_items.rb
|
187
203
|
- lib/graphql_rails/model/build_enum_type.rb
|
188
204
|
- lib/graphql_rails/model/build_graphql_input_type.rb
|
189
205
|
- lib/graphql_rails/model/build_graphql_type.rb
|
206
|
+
- lib/graphql_rails/model/call_graphql_model_method.rb
|
190
207
|
- lib/graphql_rails/model/configurable.rb
|
191
208
|
- lib/graphql_rails/model/configuration.rb
|
192
|
-
- lib/graphql_rails/model/configuration/count_items.rb
|
193
209
|
- lib/graphql_rails/model/input.rb
|
210
|
+
- lib/graphql_rails/query_runner.rb
|
211
|
+
- lib/graphql_rails/railtie.rb
|
194
212
|
- lib/graphql_rails/router.rb
|
195
213
|
- lib/graphql_rails/router/mutation_route.rb
|
196
214
|
- lib/graphql_rails/router/plain_cursor_encoder.rb
|
@@ -199,6 +217,8 @@ files:
|
|
199
217
|
- lib/graphql_rails/router/route.rb
|
200
218
|
- lib/graphql_rails/router/schema_builder.rb
|
201
219
|
- lib/graphql_rails/rspec_controller_helpers.rb
|
220
|
+
- lib/graphql_rails/tasks/dump_graphql_schema.rb
|
221
|
+
- lib/graphql_rails/tasks/schema.rake
|
202
222
|
- lib/graphql_rails/version.rb
|
203
223
|
homepage: https://github.com/samesystem/graphql_rails
|
204
224
|
licenses:
|
@@ -1,50 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'graphql_rails/controller/action'
|
4
|
-
require_relative 'request'
|
5
|
-
require_relative 'action'
|
6
|
-
|
7
|
-
module GraphqlRails
|
8
|
-
class Controller
|
9
|
-
# graphql resolver which redirects actions to appropriate controller and controller action
|
10
|
-
class ControllerFunction < GraphQL::Function
|
11
|
-
# accepts path of given format "controller_name#action"
|
12
|
-
attr_reader :type
|
13
|
-
|
14
|
-
def initialize(controller:, action_name:, type:)
|
15
|
-
@controller = controller
|
16
|
-
@action_name = action_name
|
17
|
-
@type = type
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.from_route(route)
|
21
|
-
action = Action.new(route)
|
22
|
-
|
23
|
-
action_function_class(action).new(
|
24
|
-
controller: action.controller,
|
25
|
-
action_name: action.name,
|
26
|
-
type: action.return_type
|
27
|
-
)
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.action_function_class(action)
|
31
|
-
Class.new(self) do
|
32
|
-
description(action.description)
|
33
|
-
|
34
|
-
action.arguments.each do |attribute|
|
35
|
-
argument(*attribute.function_argument_args)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def call(object, inputs, ctx)
|
41
|
-
request = Request.new(object, inputs, ctx)
|
42
|
-
controller.new(request).call(action_name)
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
attr_reader :controller, :action_name
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module GraphqlRails
|
4
|
-
class Controller
|
5
|
-
# Convers raw controller results in to graphql-friendly format
|
6
|
-
class FormatResults
|
7
|
-
def initialize(original_result, action_config:, params:, graphql_context:)
|
8
|
-
@original_result = original_result
|
9
|
-
@action_config = action_config
|
10
|
-
@controller_params = params
|
11
|
-
@graphql_context = graphql_context
|
12
|
-
end
|
13
|
-
|
14
|
-
def call
|
15
|
-
if action_config.paginated? && original_result
|
16
|
-
paginated_result
|
17
|
-
else
|
18
|
-
original_result
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
attr_reader :original_result, :action_config, :controller_params, :graphql_context
|
25
|
-
|
26
|
-
def paginated_result
|
27
|
-
pagination_params = controller_params.slice(:first, :last, :before, :after)
|
28
|
-
pagination_options = action_config.pagination_options.merge(context: graphql_context)
|
29
|
-
|
30
|
-
GraphQL::Relay::BaseConnection
|
31
|
-
.connection_for_nodes(original_result)
|
32
|
-
.new(original_result, pagination_params, pagination_options)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|