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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/Gemfile.lock +20 -23
  4. data/docs/README.md +21 -5
  5. data/docs/_sidebar.md +3 -0
  6. data/docs/components/controller.md +174 -17
  7. data/docs/components/model.md +151 -3
  8. data/docs/components/routes.md +28 -0
  9. data/docs/getting_started/quick_start.md +9 -2
  10. data/docs/other_tools/query_runner.md +49 -0
  11. data/docs/other_tools/schema_dump.md +29 -0
  12. data/docs/testing/testing.md +3 -1
  13. data/graphql_rails.gemspec +1 -1
  14. data/lib/generators/graphql_rails/install_generator.rb +50 -0
  15. data/lib/generators/graphql_rails/templates/example_users_controller.erb +19 -0
  16. data/lib/generators/graphql_rails/templates/graphql_application_controller.erb +8 -0
  17. data/lib/generators/graphql_rails/templates/graphql_controller.erb +20 -0
  18. data/lib/generators/graphql_rails/templates/graphql_router.erb +19 -0
  19. data/lib/generators/graphql_rails/templates/graphql_router_spec.erb +18 -0
  20. data/lib/graphql_rails.rb +2 -0
  21. data/lib/graphql_rails/attributes/attributable.rb +16 -13
  22. data/lib/graphql_rails/attributes/attribute.rb +20 -3
  23. data/lib/graphql_rails/attributes/input_attribute.rb +20 -10
  24. data/lib/graphql_rails/attributes/input_type_parser.rb +24 -46
  25. data/lib/graphql_rails/attributes/type_parseable.rb +128 -0
  26. data/lib/graphql_rails/attributes/type_parser.rb +58 -54
  27. data/lib/graphql_rails/concerns/service.rb +15 -0
  28. data/lib/graphql_rails/controller.rb +20 -16
  29. data/lib/graphql_rails/controller/action.rb +10 -69
  30. data/lib/graphql_rails/controller/action_configuration.rb +70 -34
  31. data/lib/graphql_rails/controller/build_controller_action_resolver.rb +52 -0
  32. data/lib/graphql_rails/controller/build_controller_action_resolver/controller_action_resolver.rb +28 -0
  33. data/lib/graphql_rails/controller/configuration.rb +56 -5
  34. data/lib/graphql_rails/controller/log_controller_action.rb +4 -4
  35. data/lib/graphql_rails/controller/request.rb +29 -8
  36. data/lib/graphql_rails/controller/request/format_errors.rb +58 -0
  37. data/lib/graphql_rails/decorator/relation_decorator.rb +1 -1
  38. data/lib/graphql_rails/errors/custom_execution_error.rb +22 -0
  39. data/lib/graphql_rails/errors/execution_error.rb +6 -7
  40. data/lib/graphql_rails/errors/system_error.rb +14 -0
  41. data/lib/graphql_rails/errors/validation_error.rb +1 -5
  42. data/lib/graphql_rails/input_configurable.rb +47 -0
  43. data/lib/graphql_rails/model.rb +19 -4
  44. data/lib/graphql_rails/model/build_connection_type.rb +48 -0
  45. data/lib/graphql_rails/model/{configuration → build_connection_type}/count_items.rb +4 -4
  46. data/lib/graphql_rails/model/build_enum_type.rb +39 -10
  47. data/lib/graphql_rails/model/build_graphql_input_type.rb +7 -3
  48. data/lib/graphql_rails/model/build_graphql_type.rb +23 -7
  49. data/lib/graphql_rails/model/call_graphql_model_method.rb +59 -0
  50. data/lib/graphql_rails/model/configuration.rb +2 -6
  51. data/lib/graphql_rails/model/input.rb +10 -6
  52. data/lib/graphql_rails/query_runner.rb +68 -0
  53. data/lib/graphql_rails/railtie.rb +10 -0
  54. data/lib/graphql_rails/router.rb +40 -13
  55. data/lib/graphql_rails/router/resource_routes_builder.rb +2 -1
  56. data/lib/graphql_rails/router/route.rb +25 -6
  57. data/lib/graphql_rails/router/schema_builder.rb +26 -11
  58. data/lib/graphql_rails/rspec_controller_helpers.rb +4 -2
  59. data/lib/graphql_rails/tasks/dump_graphql_schema.rb +57 -0
  60. data/lib/graphql_rails/tasks/schema.rake +14 -0
  61. data/lib/graphql_rails/version.rb +1 -1
  62. metadata +29 -9
  63. data/lib/graphql_rails/controller/controller_function.rb +0 -50
  64. 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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GraphqlRails
4
- VERSION = '0.8.0'
4
+ VERSION = '1.0.0'
5
5
  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.8.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: 2019-09-03 00:00:00.000000000 Z
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: '1'
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: '1'
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