graphql_rails 0.7.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
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