graphql_rails 0.7.0 → 1.2.1

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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/.hound.yml +1 -0
  3. data/.rubocop.yml +3 -3
  4. data/.ruby-version +1 -1
  5. data/.travis.yml +2 -2
  6. data/CHANGELOG.md +35 -0
  7. data/Gemfile +3 -2
  8. data/Gemfile.lock +181 -71
  9. data/docs/README.md +40 -8
  10. data/docs/_sidebar.md +5 -0
  11. data/docs/components/controller.md +295 -9
  12. data/docs/components/decorator.md +69 -0
  13. data/docs/components/model.md +267 -6
  14. data/docs/components/routes.md +28 -0
  15. data/docs/getting_started/quick_start.md +10 -3
  16. data/docs/index.html +1 -1
  17. data/docs/logging_and_monitoring/logging_and_monitoring.md +35 -0
  18. data/docs/other_tools/query_runner.md +49 -0
  19. data/docs/other_tools/schema_dump.md +29 -0
  20. data/docs/testing/testing.md +3 -1
  21. data/graphql_rails.gemspec +5 -4
  22. data/lib/generators/graphql_rails/install_generator.rb +50 -0
  23. data/lib/generators/graphql_rails/templates/example_users_controller.erb +19 -0
  24. data/lib/generators/graphql_rails/templates/graphql_application_controller.erb +8 -0
  25. data/lib/generators/graphql_rails/templates/graphql_controller.erb +20 -0
  26. data/lib/generators/graphql_rails/templates/graphql_router.erb +19 -0
  27. data/lib/generators/graphql_rails/templates/graphql_router_spec.erb +21 -0
  28. data/lib/graphql_rails.rb +6 -0
  29. data/lib/graphql_rails/attributes/attributable.rb +22 -17
  30. data/lib/graphql_rails/attributes/attribute.rb +67 -3
  31. data/lib/graphql_rails/attributes/attribute_name_parser.rb +4 -4
  32. data/lib/graphql_rails/attributes/input_attribute.rb +33 -15
  33. data/lib/graphql_rails/attributes/input_type_parser.rb +62 -0
  34. data/lib/graphql_rails/attributes/type_name_info.rb +38 -0
  35. data/lib/graphql_rails/attributes/type_parseable.rb +132 -0
  36. data/lib/graphql_rails/attributes/type_parser.rb +59 -53
  37. data/lib/graphql_rails/concerns/service.rb +19 -0
  38. data/lib/graphql_rails/controller.rb +42 -21
  39. data/lib/graphql_rails/controller/action.rb +12 -67
  40. data/lib/graphql_rails/controller/action_configuration.rb +70 -28
  41. data/lib/graphql_rails/controller/build_controller_action_resolver.rb +52 -0
  42. data/lib/graphql_rails/controller/build_controller_action_resolver/controller_action_resolver.rb +28 -0
  43. data/lib/graphql_rails/controller/configuration.rb +56 -3
  44. data/lib/graphql_rails/controller/log_controller_action.rb +71 -0
  45. data/lib/graphql_rails/controller/request.rb +29 -8
  46. data/lib/graphql_rails/controller/request/format_errors.rb +58 -0
  47. data/lib/graphql_rails/decorator.rb +41 -0
  48. data/lib/graphql_rails/decorator/relation_decorator.rb +75 -0
  49. data/lib/graphql_rails/errors/custom_execution_error.rb +22 -0
  50. data/lib/graphql_rails/errors/execution_error.rb +6 -7
  51. data/lib/graphql_rails/errors/system_error.rb +14 -0
  52. data/lib/graphql_rails/errors/validation_error.rb +1 -5
  53. data/lib/graphql_rails/input_configurable.rb +47 -0
  54. data/lib/graphql_rails/integrations.rb +19 -0
  55. data/lib/graphql_rails/integrations/lograge.rb +39 -0
  56. data/lib/graphql_rails/integrations/sentry.rb +34 -0
  57. data/lib/graphql_rails/model.rb +26 -4
  58. data/lib/graphql_rails/model/add_fields_to_graphql_type.rb +45 -0
  59. data/lib/graphql_rails/model/build_connection_type.rb +52 -0
  60. data/lib/graphql_rails/model/{configuration → build_connection_type}/count_items.rb +5 -5
  61. data/lib/graphql_rails/model/build_enum_type.rb +39 -10
  62. data/lib/graphql_rails/model/build_graphql_input_type.rb +8 -4
  63. data/lib/graphql_rails/model/call_graphql_model_method.rb +72 -0
  64. data/lib/graphql_rails/model/configurable.rb +6 -2
  65. data/lib/graphql_rails/model/configuration.rb +30 -16
  66. data/lib/graphql_rails/model/find_or_build_graphql_type.rb +64 -0
  67. data/lib/graphql_rails/model/find_or_build_graphql_type_class.rb +46 -0
  68. data/lib/graphql_rails/model/input.rb +11 -7
  69. data/lib/graphql_rails/query_runner.rb +68 -0
  70. data/lib/graphql_rails/railtie.rb +10 -0
  71. data/lib/graphql_rails/router.rb +40 -13
  72. data/lib/graphql_rails/router/resource_routes_builder.rb +10 -9
  73. data/lib/graphql_rails/router/route.rb +21 -6
  74. data/lib/graphql_rails/router/schema_builder.rb +30 -11
  75. data/lib/graphql_rails/rspec_controller_helpers.rb +6 -4
  76. data/lib/graphql_rails/tasks/dump_graphql_schema.rb +57 -0
  77. data/lib/graphql_rails/tasks/schema.rake +14 -0
  78. data/lib/graphql_rails/version.rb +1 -1
  79. metadata +70 -19
  80. data/lib/graphql_rails/controller/controller_function.rb +0 -50
  81. data/lib/graphql_rails/controller/format_results.rb +0 -36
  82. data/lib/graphql_rails/model/build_graphql_type.rb +0 -37
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cd207ff4c895c9024b121bb5de205b289d8d2e54266022cfcc8e167fae2af097
4
- data.tar.gz: c95bc639ce9adecf31ebc3c11e70a8214de31663c41be1aa539e70b1a04350f7
3
+ metadata.gz: 66c6e2cd4ba018ee3af6aa4461b67b29ed202d21a93b5d0ea877d5fdfdecfbc7
4
+ data.tar.gz: 5955a5e193a761dd3821107bb60c02db6aa8d72717b0288b4863b79920a8ad4e
5
5
  SHA512:
6
- metadata.gz: 272d3e7b1ddad299aa58fc2fff01a2e9e336771495e04e5e279ead269ac3ac7a003621a1d7e81fcdb822b82ad61d07138b38443fe1b128403058b607a9175dad
7
- data.tar.gz: 5b237e8afd7d7c9c098e3d0ab62e388ed09469bfb1b86874fa1c7c6ea05d9f7199bb430853f9dce81999567bfd197856a5c4514267a3d1fe5adfd6cf914fce5a
6
+ metadata.gz: 9342f037b0b41b4a70621787f14188da08693fa773d0efd2e3148c8d6be7e6086e3ae8215d349e72ab3a7448643f49ca7ccc2fe9c3d5a911d152a9a06131d164
7
+ data.tar.gz: c3ef9dda6a219e42394e3027fe4710af88360c8f699a13d8bc66a11c1bf8c31a25a295e6a217d8c1b04e6826899e24d73950a279d5f5505893601181e6da8d28
data/.hound.yml CHANGED
@@ -1,3 +1,4 @@
1
1
  rubocop:
2
2
  config_file: .rubocop.yml
3
+ version: 0.91.0
3
4
  fail_on_violations: true
data/.rubocop.yml CHANGED
@@ -3,7 +3,7 @@ require: rubocop-rspec
3
3
  RSpec/NestedGroups:
4
4
  Enabled: false
5
5
 
6
- Metrics/LineLength:
6
+ Layout/LineLength:
7
7
  Enabled: true
8
8
  Max: 120
9
9
 
@@ -21,7 +21,7 @@ Lint/AmbiguousBlockAssociation:
21
21
  Exclude:
22
22
  - spec/**/*.rb
23
23
 
24
- Naming/UncommunicativeMethodParamName:
24
+ Naming/MethodParameterName:
25
25
  AllowedNames:
26
26
  - 'to'
27
27
  - 'at'
@@ -35,7 +35,7 @@ Style/ClassAndModuleChildren:
35
35
  - spec/**/*_spec.rb
36
36
 
37
37
  AllCops:
38
- TargetRubyVersion: 2.5
38
+ TargetRubyVersion: 2.7
39
39
  Exclude:
40
40
  - bin/*
41
41
  - graphql_rails.gemspec
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.5.1
1
+ 2.7.1
data/.travis.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.5.1
5
- before_install: gem install bundler -v 1.16.1
4
+ - 2.7.1
5
+ before_install: gem install bundler -v 2.1.4
data/CHANGELOG.md CHANGED
@@ -9,6 +9,41 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  * Added/Changed/Deprecated/Removed/Fixed/Security: YOUR CHANGE HERE
11
11
 
12
+ ## [1.2.1](2021-02-17)
13
+
14
+ * Fixed: Incorrect scalar types resolution is fixed. No more `type mismatch between ID / ID`
15
+
16
+ ## [1.2.0](2021-02-15)
17
+
18
+ * Added: `options` argument to model level attribute. Allows disabling automatic camelCase
19
+ * Fixed: methods with complex input arguments receives `Hash` instances instead of `GraphQL::Schema::InputObject`
20
+ * Fixed: Using `ActiveSupport::ParameterFilter` (Rails 6.1), if it is defined, instead of `ActionDispatch::Http::ParameterFilter`
21
+ * Changed: graphql version is now `1.12` which may require system-wide changes.
22
+ * Fixed: improved connection wrapper for pagination to work.
23
+ * Fixed: implementation of `total` field is no longer missing when using pagination.
24
+
25
+
26
+ ## [1.0.0](2020-02-07)
27
+
28
+ * Added: "required" and "optional" flags for attribute
29
+ * Added: grouped routes
30
+ * Added: added argument to model.attribute
31
+ * Added: added graphql_context to model
32
+ * Removed: `action.can_return_nil` was removed, because it does no affect anymore
33
+ * Removed: default `action` model was removed. Now each action must have `returns` part
34
+ * Added: default router added. No need to assign value to constant on Router.draw
35
+ * Added: default action added. Now actions can have custom defaults
36
+ * Added: default controller model added. Now actions can be defined in more dynamic way
37
+ * Added: install generator. Now it's possible to generate boilerplate code
38
+
39
+ ## [0.8.0] (2019-09-03)
40
+
41
+ * Added: permit_input action config with extended list of permitted input options
42
+ * Added: model decorators
43
+ * Added: controller action instrumentation [@povilasjurcys](https://github.com/povilasjurcys)
44
+ * Added: sentry and lograge integrations
45
+ * Added: required: true flag for permitted attributes, inputs and model attributes
46
+
12
47
  ## 0.7.0 (2019-05-15)
13
48
 
14
49
  * Added: input type now accepts `enum` param which allows create enum fields
data/Gemfile CHANGED
@@ -5,8 +5,9 @@ source 'https://rubygems.org'
5
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
6
 
7
7
  group :development do
8
- gem 'rubocop'
9
- gem 'rubocop-rspec'
8
+ gem 'rubocop', '0.91.0'
9
+ gem 'rubocop-performance', '~> 1.8', '>= 1.8.1'
10
+ gem 'rubocop-rspec', '~> 1.44', '>= 1.44.1'
10
11
  end
11
12
 
12
13
  group :test do
data/Gemfile.lock CHANGED
@@ -1,110 +1,220 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- graphql_rails (0.7.0)
4
+ graphql_rails (1.2.1)
5
5
  activesupport (>= 4)
6
- graphql (~> 1)
6
+ graphql (~> 1.12, >= 1.12.4)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activemodel (5.2.2.1)
12
- activesupport (= 5.2.2.1)
13
- activerecord (5.2.2.1)
14
- activemodel (= 5.2.2.1)
15
- activesupport (= 5.2.2.1)
16
- arel (>= 9.0)
17
- activesupport (5.2.2.1)
11
+ actioncable (6.0.3.4)
12
+ actionpack (= 6.0.3.4)
13
+ nio4r (~> 2.0)
14
+ websocket-driver (>= 0.6.1)
15
+ actionmailbox (6.0.3.4)
16
+ actionpack (= 6.0.3.4)
17
+ activejob (= 6.0.3.4)
18
+ activerecord (= 6.0.3.4)
19
+ activestorage (= 6.0.3.4)
20
+ activesupport (= 6.0.3.4)
21
+ mail (>= 2.7.1)
22
+ actionmailer (6.0.3.4)
23
+ actionpack (= 6.0.3.4)
24
+ actionview (= 6.0.3.4)
25
+ activejob (= 6.0.3.4)
26
+ mail (~> 2.5, >= 2.5.4)
27
+ rails-dom-testing (~> 2.0)
28
+ actionpack (6.0.3.4)
29
+ actionview (= 6.0.3.4)
30
+ activesupport (= 6.0.3.4)
31
+ rack (~> 2.0, >= 2.0.8)
32
+ rack-test (>= 0.6.3)
33
+ rails-dom-testing (~> 2.0)
34
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
35
+ actiontext (6.0.3.4)
36
+ actionpack (= 6.0.3.4)
37
+ activerecord (= 6.0.3.4)
38
+ activestorage (= 6.0.3.4)
39
+ activesupport (= 6.0.3.4)
40
+ nokogiri (>= 1.8.5)
41
+ actionview (6.0.3.4)
42
+ activesupport (= 6.0.3.4)
43
+ builder (~> 3.1)
44
+ erubi (~> 1.4)
45
+ rails-dom-testing (~> 2.0)
46
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
47
+ activejob (6.0.3.4)
48
+ activesupport (= 6.0.3.4)
49
+ globalid (>= 0.3.6)
50
+ activemodel (6.0.3.4)
51
+ activesupport (= 6.0.3.4)
52
+ activerecord (6.0.3.4)
53
+ activemodel (= 6.0.3.4)
54
+ activesupport (= 6.0.3.4)
55
+ activestorage (6.0.3.4)
56
+ actionpack (= 6.0.3.4)
57
+ activejob (= 6.0.3.4)
58
+ activerecord (= 6.0.3.4)
59
+ marcel (~> 0.3.1)
60
+ activesupport (6.0.3.4)
18
61
  concurrent-ruby (~> 1.0, >= 1.0.2)
19
62
  i18n (>= 0.7, < 2)
20
63
  minitest (~> 5.1)
21
64
  tzinfo (~> 1.1)
22
- arel (9.0.0)
23
- ast (2.4.0)
24
- bson (4.4.2)
25
- byebug (11.0.1)
26
- codecov (0.1.14)
65
+ zeitwerk (~> 2.2, >= 2.2.2)
66
+ ast (2.4.1)
67
+ bson (4.11.0)
68
+ builder (3.2.4)
69
+ byebug (11.1.3)
70
+ codecov (0.2.12)
27
71
  json
28
72
  simplecov
29
- url
30
- coderay (1.1.2)
31
- concurrent-ruby (1.1.5)
32
- diff-lcs (1.3)
33
- docile (1.3.1)
34
- graphql (1.9.4)
35
- i18n (1.6.0)
73
+ coderay (1.1.3)
74
+ concurrent-ruby (1.1.7)
75
+ crass (1.0.6)
76
+ diff-lcs (1.4.4)
77
+ docile (1.3.2)
78
+ erubi (1.9.0)
79
+ globalid (0.4.2)
80
+ activesupport (>= 4.2.0)
81
+ graphql (1.12.4)
82
+ i18n (1.8.5)
36
83
  concurrent-ruby (~> 1.0)
37
- jaro_winkler (1.5.2)
38
- json (2.2.0)
39
- method_source (0.9.2)
40
- minitest (5.11.3)
41
- mongo (2.8.0)
42
- bson (>= 4.4.2, < 5.0.0)
43
- mongoid (7.0.2)
44
- activemodel (>= 5.1, < 6.0.0)
45
- mongo (>= 2.5.1, < 3.0.0)
46
- parallel (1.16.0)
47
- parser (2.6.2.0)
48
- ast (~> 2.4.0)
49
- pry (0.12.2)
50
- coderay (~> 1.1.0)
51
- method_source (~> 0.9.0)
52
- pry-byebug (3.7.0)
84
+ json (2.3.1)
85
+ loofah (2.7.0)
86
+ crass (~> 1.0.2)
87
+ nokogiri (>= 1.5.9)
88
+ mail (2.7.1)
89
+ mini_mime (>= 0.1.1)
90
+ marcel (0.3.3)
91
+ mimemagic (~> 0.3.2)
92
+ method_source (1.0.0)
93
+ mimemagic (0.3.5)
94
+ mini_mime (1.0.2)
95
+ mini_portile2 (2.5.0)
96
+ minitest (5.14.2)
97
+ mongo (2.13.1)
98
+ bson (>= 4.8.2, < 5.0.0)
99
+ mongoid (7.1.4)
100
+ activemodel (>= 5.1, < 6.1)
101
+ mongo (>= 2.7.0, < 3.0.0)
102
+ nio4r (2.5.4)
103
+ nokogiri (1.11.1)
104
+ mini_portile2 (~> 2.5.0)
105
+ racc (~> 1.4)
106
+ parallel (1.19.2)
107
+ parser (2.7.2.0)
108
+ ast (~> 2.4.1)
109
+ pry (0.13.1)
110
+ coderay (~> 1.1)
111
+ method_source (~> 1.0)
112
+ pry-byebug (3.9.0)
53
113
  byebug (~> 11.0)
54
- pry (~> 0.10)
55
- psych (3.1.0)
114
+ pry (~> 0.13.0)
115
+ racc (1.5.2)
116
+ rack (2.2.3)
117
+ rack-test (1.1.0)
118
+ rack (>= 1.0, < 3)
119
+ rails (6.0.3.4)
120
+ actioncable (= 6.0.3.4)
121
+ actionmailbox (= 6.0.3.4)
122
+ actionmailer (= 6.0.3.4)
123
+ actionpack (= 6.0.3.4)
124
+ actiontext (= 6.0.3.4)
125
+ actionview (= 6.0.3.4)
126
+ activejob (= 6.0.3.4)
127
+ activemodel (= 6.0.3.4)
128
+ activerecord (= 6.0.3.4)
129
+ activestorage (= 6.0.3.4)
130
+ activesupport (= 6.0.3.4)
131
+ bundler (>= 1.3.0)
132
+ railties (= 6.0.3.4)
133
+ sprockets-rails (>= 2.0.0)
134
+ rails-dom-testing (2.0.3)
135
+ activesupport (>= 4.2.0)
136
+ nokogiri (>= 1.6)
137
+ rails-html-sanitizer (1.3.0)
138
+ loofah (~> 2.3)
139
+ railties (6.0.3.4)
140
+ actionpack (= 6.0.3.4)
141
+ activesupport (= 6.0.3.4)
142
+ method_source
143
+ rake (>= 0.8.7)
144
+ thor (>= 0.20.3, < 2.0)
56
145
  rainbow (3.0.0)
57
- rake (10.5.0)
58
- rspec (3.8.0)
59
- rspec-core (~> 3.8.0)
60
- rspec-expectations (~> 3.8.0)
61
- rspec-mocks (~> 3.8.0)
62
- rspec-core (3.8.0)
63
- rspec-support (~> 3.8.0)
64
- rspec-expectations (3.8.2)
146
+ rake (13.0.1)
147
+ regexp_parser (1.8.2)
148
+ rexml (3.2.4)
149
+ rspec (3.10.0)
150
+ rspec-core (~> 3.10.0)
151
+ rspec-expectations (~> 3.10.0)
152
+ rspec-mocks (~> 3.10.0)
153
+ rspec-core (3.10.0)
154
+ rspec-support (~> 3.10.0)
155
+ rspec-expectations (3.10.0)
65
156
  diff-lcs (>= 1.2.0, < 2.0)
66
- rspec-support (~> 3.8.0)
67
- rspec-mocks (3.8.0)
157
+ rspec-support (~> 3.10.0)
158
+ rspec-mocks (3.10.0)
68
159
  diff-lcs (>= 1.2.0, < 2.0)
69
- rspec-support (~> 3.8.0)
70
- rspec-support (3.8.0)
71
- rubocop (0.66.0)
72
- jaro_winkler (~> 1.5.1)
160
+ rspec-support (~> 3.10.0)
161
+ rspec-support (3.10.0)
162
+ rubocop (0.91.0)
73
163
  parallel (~> 1.10)
74
- parser (>= 2.5, != 2.5.1.1)
75
- psych (>= 3.1.0)
164
+ parser (>= 2.7.1.1)
76
165
  rainbow (>= 2.2.2, < 4.0)
166
+ regexp_parser (>= 1.7)
167
+ rexml
168
+ rubocop-ast (>= 0.4.0, < 1.0)
77
169
  ruby-progressbar (~> 1.7)
78
- unicode-display_width (>= 1.4.0, < 1.6)
79
- rubocop-rspec (1.32.0)
80
- rubocop (>= 0.60.0)
81
- ruby-progressbar (1.10.0)
82
- simplecov (0.16.1)
170
+ unicode-display_width (>= 1.4.0, < 2.0)
171
+ rubocop-ast (0.8.0)
172
+ parser (>= 2.7.1.5)
173
+ rubocop-performance (1.8.1)
174
+ rubocop (>= 0.87.0)
175
+ rubocop-ast (>= 0.4.0)
176
+ rubocop-rspec (1.44.1)
177
+ rubocop (~> 0.87)
178
+ rubocop-ast (>= 0.7.1)
179
+ ruby-progressbar (1.10.1)
180
+ simplecov (0.19.1)
83
181
  docile (~> 1.1)
84
- json (>= 1.8, < 3)
85
- simplecov-html (~> 0.10.0)
86
- simplecov-html (0.10.2)
182
+ simplecov-html (~> 0.11)
183
+ simplecov-html (0.12.3)
184
+ sprockets (4.0.2)
185
+ concurrent-ruby (~> 1.0)
186
+ rack (> 1, < 3)
187
+ sprockets-rails (3.2.2)
188
+ actionpack (>= 4.0)
189
+ activesupport (>= 4.0)
190
+ sprockets (>= 3.0.0)
191
+ thor (1.0.1)
87
192
  thread_safe (0.3.6)
88
- tzinfo (1.2.5)
193
+ tzinfo (1.2.7)
89
194
  thread_safe (~> 0.1)
90
- unicode-display_width (1.5.0)
91
- url (0.3.2)
195
+ unicode-display_width (1.7.0)
196
+ websocket-driver (0.7.3)
197
+ websocket-extensions (>= 0.1.0)
198
+ websocket-extensions (0.1.5)
199
+ zeitwerk (2.4.1)
92
200
 
93
201
  PLATFORMS
94
202
  ruby
95
203
 
96
204
  DEPENDENCIES
97
205
  activerecord
98
- bundler (~> 1.16)
206
+ bundler (~> 2)
99
207
  codecov
100
208
  graphql_rails!
101
209
  mongoid
102
210
  pry-byebug
103
- rake (~> 10.0)
211
+ rails (~> 6)
212
+ rake (~> 13.0)
104
213
  rspec (~> 3.0)
105
- rubocop
106
- rubocop-rspec
214
+ rubocop (= 0.91.0)
215
+ rubocop-performance (~> 1.8, >= 1.8.1)
216
+ rubocop-rspec (~> 1.44, >= 1.44.1)
107
217
  simplecov
108
218
 
109
219
  BUNDLED WITH
110
- 1.16.4
220
+ 2.1.4
data/docs/README.md CHANGED
@@ -22,13 +22,22 @@ Or install it yourself as:
22
22
 
23
23
  $ gem install graphql_rails
24
24
 
25
+ ## Getting started
26
+
27
+ Execute:
28
+
29
+ $ bundle exec rails g graphql_rails:install
30
+
31
+ This will generate code which will let you start your graphql faster
32
+
25
33
  ## Usage
26
34
 
27
35
  ### Define GraphQL schema as RoR routes
28
36
 
29
37
  ```ruby
30
- MyGraphqlSchema = GraphqlRails::Router.draw do
31
- # will create createUser, updateUser, deleteUser mutations and user, users queries.
38
+ # config/graphql/routes.rb
39
+ GraphqlRails::Router.draw do
40
+ # will create createUser, updateUser, destroyUser mutations and user, users queries.
32
41
  # expects that UsersController class exist
33
42
  resources :users
34
43
 
@@ -41,6 +50,7 @@ end
41
50
  ### Define your Graphql model
42
51
 
43
52
  ```ruby
53
+ # app/models/user.rb
44
54
  class User # works with any class including ActiveRecord
45
55
  include GraphqlRails::Model
46
56
 
@@ -57,10 +67,12 @@ end
57
67
  ### Define controller
58
68
 
59
69
  ```ruby
60
- class UsersController < GraphqlRails::Controller
70
+ # app/controllers/graphql/users_controller.rb
71
+ class Graphql::UsersController < GraphqlApplicationController
61
72
  # graphql requires to describe which attributes controller action accepts and which returns
62
73
  action(:change_user_password)
63
74
  .permit(:password!, :id!) # Bang (!) indicates that attribute is required
75
+ .returns('User!')
64
76
 
65
77
  def change_user_password
66
78
  user = User.find(params[:id])
@@ -70,7 +82,9 @@ class UsersController < GraphqlRails::Controller
70
82
  user # or SomeDecorator.new(user)
71
83
  end
72
84
 
73
- action(:search).permit(search_fields!: SearchFieldsInput) # you can specify your own input fields
85
+ action(:search)
86
+ .permit(search_fields!: SearchFieldsInput) # you can specify your own input fields
87
+ .returns('[User!]!')
74
88
  def search
75
89
  end
76
90
  end
@@ -79,7 +93,7 @@ end
79
93
  ## Routes
80
94
 
81
95
  ```ruby
82
- MyGraphqlSchema = GraphqlRails::Router.draw do
96
+ GraphqlRails::Router.draw do
83
97
  # generates `friend`, `createFriend`, `updateFriend`, `destroyFriend`, `friends` routes
84
98
  resources :friends
85
99
  resources :shops, only: [:show, :index] # generates `shop` and `shops` routes only
@@ -95,10 +109,10 @@ MyGraphqlSchema = GraphqlRails::Router.draw do
95
109
 
96
110
  # you can use namespaced controllers too:
97
111
  scope module: 'admin' do
98
- # `updateTranslations` route will be handeled by `Admin::TranslationsController`
112
+ # `updateTranslations` route will be handled by `Admin::TranslationsController`
99
113
  mutation :updateTranslations, to: 'translations#update'
100
114
 
101
- # all :groups routes will be handeled by `Admin::GroupsController`
115
+ # all :groups routes will be handled by `Admin::GroupsController`
102
116
  resources :groups
103
117
  end
104
118
  end
@@ -132,11 +146,13 @@ There are 3 helper methods:
132
146
 
133
147
  ```ruby
134
148
  class MyGraphqlController
149
+ action(:create_user).permit(:full_name, :email).returns(User)
150
+ action(:index).returns('String')
151
+
135
152
  def index
136
153
  "Called from index: #{params[:message]}"
137
154
  end
138
155
 
139
- action(:create_user).permit(:full_name, :email)
140
156
  def create_user
141
157
  User.create!(params)
142
158
  end
@@ -171,6 +187,22 @@ RSpec.describe MyGraphqlController, type: :graphql_controller do
171
187
  end
172
188
  ```
173
189
 
190
+ ### Integrating GraphqlRails with other tools
191
+
192
+ In order to make GraphqlRails work with tools such as lograge or sentry, you need to enable them. In Ruby on Rails, you can add initializer:
193
+
194
+ ```ruby
195
+ # config/initializers/graphql_rails.rb
196
+ GraphqlRails::Integrations.enable(:lograge, :sentry)
197
+ ```
198
+
199
+ At the moment, GraphqlRails supports following integrations:
200
+
201
+ * lograge
202
+ * sentry
203
+
204
+ If you need to build something custom, check [logging_and_monitoring documentation](logging_and_monitoring/logging_and_monitoring.md) for more details.
205
+
174
206
  ## Detailed documentation
175
207
 
176
208
  Check https://samesystem.github.io/graphql_rails for more details