graphql_rails 0.5.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) 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 +179 -71
  9. data/docs/README.md +48 -9
  10. data/docs/_sidebar.md +5 -0
  11. data/docs/components/controller.md +294 -8
  12. data/docs/components/decorator.md +69 -0
  13. data/docs/components/model.md +349 -11
  14. data/docs/components/routes.md +43 -1
  15. data/docs/getting_started/quick_start.md +9 -2
  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 +7 -1
  29. data/lib/graphql_rails/attributes.rb +13 -0
  30. data/lib/graphql_rails/{attribute → attributes}/attributable.rb +25 -20
  31. data/lib/graphql_rails/attributes/attribute.rb +94 -0
  32. data/lib/graphql_rails/{attribute → attributes}/attribute_name_parser.rb +2 -2
  33. data/lib/graphql_rails/attributes/input_attribute.rb +65 -0
  34. data/lib/graphql_rails/attributes/input_type_parser.rb +62 -0
  35. data/lib/graphql_rails/attributes/type_name_info.rb +38 -0
  36. data/lib/graphql_rails/attributes/type_parseable.rb +128 -0
  37. data/lib/graphql_rails/attributes/type_parser.rb +121 -0
  38. data/lib/graphql_rails/concerns/service.rb +19 -0
  39. data/lib/graphql_rails/controller.rb +44 -22
  40. data/lib/graphql_rails/controller/action.rb +12 -67
  41. data/lib/graphql_rails/controller/action_configuration.rb +71 -31
  42. data/lib/graphql_rails/controller/build_controller_action_resolver.rb +52 -0
  43. data/lib/graphql_rails/controller/build_controller_action_resolver/controller_action_resolver.rb +28 -0
  44. data/lib/graphql_rails/controller/configuration.rb +58 -4
  45. data/lib/graphql_rails/controller/log_controller_action.rb +66 -0
  46. data/lib/graphql_rails/controller/request.rb +29 -8
  47. data/lib/graphql_rails/controller/request/format_errors.rb +58 -0
  48. data/lib/graphql_rails/decorator.rb +41 -0
  49. data/lib/graphql_rails/decorator/relation_decorator.rb +79 -0
  50. data/lib/graphql_rails/errors/custom_execution_error.rb +22 -0
  51. data/lib/graphql_rails/errors/execution_error.rb +8 -7
  52. data/lib/graphql_rails/errors/system_error.rb +14 -0
  53. data/lib/graphql_rails/errors/validation_error.rb +1 -5
  54. data/lib/graphql_rails/input_configurable.rb +47 -0
  55. data/lib/graphql_rails/integrations.rb +19 -0
  56. data/lib/graphql_rails/integrations/lograge.rb +39 -0
  57. data/lib/graphql_rails/integrations/sentry.rb +34 -0
  58. data/lib/graphql_rails/model.rb +26 -4
  59. data/lib/graphql_rails/model/add_fields_to_graphql_type.rb +45 -0
  60. data/lib/graphql_rails/model/build_connection_type.rb +48 -0
  61. data/lib/graphql_rails/model/{configuration → build_connection_type}/count_items.rb +4 -4
  62. data/lib/graphql_rails/model/build_enum_type.rb +68 -0
  63. data/lib/graphql_rails/model/{graphql_input_type_builder.rb → build_graphql_input_type.rb} +10 -2
  64. data/lib/graphql_rails/model/call_graphql_model_method.rb +72 -0
  65. data/lib/graphql_rails/model/configurable.rb +6 -2
  66. data/lib/graphql_rails/model/configuration.rb +34 -19
  67. data/lib/graphql_rails/model/find_or_build_graphql_type.rb +64 -0
  68. data/lib/graphql_rails/model/find_or_build_graphql_type_class.rb +46 -0
  69. data/lib/graphql_rails/model/input.rb +25 -11
  70. data/lib/graphql_rails/query_runner.rb +68 -0
  71. data/lib/graphql_rails/railtie.rb +10 -0
  72. data/lib/graphql_rails/router.rb +40 -13
  73. data/lib/graphql_rails/router/plain_cursor_encoder.rb +16 -0
  74. data/lib/graphql_rails/router/resource_routes_builder.rb +19 -11
  75. data/lib/graphql_rails/router/route.rb +21 -6
  76. data/lib/graphql_rails/router/schema_builder.rb +29 -11
  77. data/lib/graphql_rails/rspec_controller_helpers.rb +25 -12
  78. data/lib/graphql_rails/tasks/dump_graphql_schema.rb +57 -0
  79. data/lib/graphql_rails/tasks/schema.rake +14 -0
  80. data/lib/graphql_rails/version.rb +1 -1
  81. metadata +75 -22
  82. data/README.md +0 -194
  83. data/lib/graphql_rails/attribute.rb +0 -28
  84. data/lib/graphql_rails/attribute/type_parser.rb +0 -115
  85. data/lib/graphql_rails/controller/controller_function.rb +0 -50
  86. data/lib/graphql_rails/controller/format_results.rb +0 -36
  87. data/lib/graphql_rails/model/graphql_type_builder.rb +0 -33
  88. data/lib/graphql_rails/model/input_attribute.rb +0 -47
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d31436f40d036cd543c69a2b59e442d2498eb6349d61c4454dc9376e0caf4de0
4
- data.tar.gz: 9b5041b648314fbff349e614e9b1f6be43f94bff32490f8de0dc4a23bb28c6a7
3
+ metadata.gz: 60ad653d6c6acbfe0816f0b7ddb406dae7131b1c07f86f7ab35b98813079edb1
4
+ data.tar.gz: ff9446c8240615d5cba3e6ac3206444d47d257d201278e0860d765976c8f99fc
5
5
  SHA512:
6
- metadata.gz: 72d4881a3aa604c19f38f53e4b77fdea562e7b804d8cec6a125789da32b6b215c298f5dcd1a747680a72c2e65571d0f30ab7b47597758fbb632bf21731f9bf70
7
- data.tar.gz: 0a7ec0c5d6bf383c89b82109a4c120137e470f7e187ab8a3ab791840706abd6b0a49933b1bcead76437603fff546fc66ebd024fad8067bea6558d60499c587b0
6
+ metadata.gz: 59caf8be61dcf8777a5cdc2ac498f389006e8630b9ef62076976a0be849e8e09466e8a7b76891bf6a5b42510f5efc0856666383e9bd6e3e68c245500fb308d47
7
+ data.tar.gz: 9851cb4dd601fa253c5790f39cbdf835403e08814c85db9f0646bd986ccb62650249216b2225f20dfa8ada581e0bd374e3eb30001dc51f2eb7a182d9c2f626c6
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
@@ -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
@@ -1 +1 @@
1
- 2.5.1
1
+ 2.7.1
@@ -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
@@ -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
+ * Added: `options` argument to model level attribute. Allows disabling automatic camelCase
13
+ * Fixed: methods with complex input arguments receives `Hash` instances instead of `GraphQL::Schema::InputObject`
14
+
15
+ ## [1.0.0](2020-02-07)
16
+
17
+ * Added: "required" and "optional" flags for attribute
18
+ * Added: grouped routes
19
+ * Added: added argument to model.attribute
20
+ * Added: added graphql_context to model
21
+ * Removed: `action.can_return_nil` was removed, because it does no affect anymore
22
+ * Removed: default `action` model was removed. Now each action must have `returns` part
23
+ * Added: default router added. No need to assign value to constant on Router.draw
24
+ * Added: default action added. Now actions can have custom defaults
25
+ * Added: default controller model added. Now actions can be defined in more dynamic way
26
+ * Added: install generator. Now it's possible to generate boilerplate code
27
+
28
+ ## [0.8.0] (2019-09-03)
29
+
30
+ * Added: permit_input action config with extended list of permitted input options
31
+ * Added: model decorators
32
+ * Added: controller action instrumentation [@povilasjurcys](https://github.com/povilasjurcys)
33
+ * Added: sentry and lograge integrations
34
+ * Added: required: true flag for permitted attributes, inputs and model attributes
35
+
36
+ ## 0.7.0 (2019-05-15)
37
+
38
+ * Added: input type now accepts `enum` param which allows create enum fields
39
+ * Added: routes now accepts `suffix: true` flag which generates GraphQL field with appended action name to the end of resource name
40
+
41
+ ## 0.6.0 (2019-04-29)
42
+
43
+ * Breaking change: controller params are always underscored [@povilasjurcys](https://github.com/povilasjurcys).
44
+ * Breaking change: cursor in paginated responses has plain index value by default [@povilasjurcys](https://github.com/povilasjurcys).
45
+ * Fixed: do not crash when testing paginated actions [@povilasjurcys](https://github.com/povilasjurcys).
46
+
12
47
  ## 0.5.2 (2019-04-24)
13
48
 
14
49
  * Fixed: do not crash when using Connection types in non Ruby on Rails project [@povilasjurcys](https://github.com/povilasjurcys).
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
@@ -1,110 +1,218 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- graphql_rails (0.5.2)
4
+ graphql_rails (1.1.0)
5
5
  activesupport (>= 4)
6
- graphql (~> 1)
6
+ graphql (~> 1.11, >= 1.11.6)
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.11.6)
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.4.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.10.10)
104
+ mini_portile2 (~> 2.4.0)
105
+ parallel (1.19.2)
106
+ parser (2.7.2.0)
107
+ ast (~> 2.4.1)
108
+ pry (0.13.1)
109
+ coderay (~> 1.1)
110
+ method_source (~> 1.0)
111
+ pry-byebug (3.9.0)
53
112
  byebug (~> 11.0)
54
- pry (~> 0.10)
55
- psych (3.1.0)
113
+ pry (~> 0.13.0)
114
+ rack (2.2.3)
115
+ rack-test (1.1.0)
116
+ rack (>= 1.0, < 3)
117
+ rails (6.0.3.4)
118
+ actioncable (= 6.0.3.4)
119
+ actionmailbox (= 6.0.3.4)
120
+ actionmailer (= 6.0.3.4)
121
+ actionpack (= 6.0.3.4)
122
+ actiontext (= 6.0.3.4)
123
+ actionview (= 6.0.3.4)
124
+ activejob (= 6.0.3.4)
125
+ activemodel (= 6.0.3.4)
126
+ activerecord (= 6.0.3.4)
127
+ activestorage (= 6.0.3.4)
128
+ activesupport (= 6.0.3.4)
129
+ bundler (>= 1.3.0)
130
+ railties (= 6.0.3.4)
131
+ sprockets-rails (>= 2.0.0)
132
+ rails-dom-testing (2.0.3)
133
+ activesupport (>= 4.2.0)
134
+ nokogiri (>= 1.6)
135
+ rails-html-sanitizer (1.3.0)
136
+ loofah (~> 2.3)
137
+ railties (6.0.3.4)
138
+ actionpack (= 6.0.3.4)
139
+ activesupport (= 6.0.3.4)
140
+ method_source
141
+ rake (>= 0.8.7)
142
+ thor (>= 0.20.3, < 2.0)
56
143
  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)
144
+ rake (13.0.1)
145
+ regexp_parser (1.8.2)
146
+ rexml (3.2.4)
147
+ rspec (3.10.0)
148
+ rspec-core (~> 3.10.0)
149
+ rspec-expectations (~> 3.10.0)
150
+ rspec-mocks (~> 3.10.0)
151
+ rspec-core (3.10.0)
152
+ rspec-support (~> 3.10.0)
153
+ rspec-expectations (3.10.0)
65
154
  diff-lcs (>= 1.2.0, < 2.0)
66
- rspec-support (~> 3.8.0)
67
- rspec-mocks (3.8.0)
155
+ rspec-support (~> 3.10.0)
156
+ rspec-mocks (3.10.0)
68
157
  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)
158
+ rspec-support (~> 3.10.0)
159
+ rspec-support (3.10.0)
160
+ rubocop (0.91.0)
73
161
  parallel (~> 1.10)
74
- parser (>= 2.5, != 2.5.1.1)
75
- psych (>= 3.1.0)
162
+ parser (>= 2.7.1.1)
76
163
  rainbow (>= 2.2.2, < 4.0)
164
+ regexp_parser (>= 1.7)
165
+ rexml
166
+ rubocop-ast (>= 0.4.0, < 1.0)
77
167
  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)
168
+ unicode-display_width (>= 1.4.0, < 2.0)
169
+ rubocop-ast (0.8.0)
170
+ parser (>= 2.7.1.5)
171
+ rubocop-performance (1.8.1)
172
+ rubocop (>= 0.87.0)
173
+ rubocop-ast (>= 0.4.0)
174
+ rubocop-rspec (1.44.1)
175
+ rubocop (~> 0.87)
176
+ rubocop-ast (>= 0.7.1)
177
+ ruby-progressbar (1.10.1)
178
+ simplecov (0.19.1)
83
179
  docile (~> 1.1)
84
- json (>= 1.8, < 3)
85
- simplecov-html (~> 0.10.0)
86
- simplecov-html (0.10.2)
180
+ simplecov-html (~> 0.11)
181
+ simplecov-html (0.12.3)
182
+ sprockets (4.0.2)
183
+ concurrent-ruby (~> 1.0)
184
+ rack (> 1, < 3)
185
+ sprockets-rails (3.2.2)
186
+ actionpack (>= 4.0)
187
+ activesupport (>= 4.0)
188
+ sprockets (>= 3.0.0)
189
+ thor (1.0.1)
87
190
  thread_safe (0.3.6)
88
- tzinfo (1.2.5)
191
+ tzinfo (1.2.7)
89
192
  thread_safe (~> 0.1)
90
- unicode-display_width (1.5.0)
91
- url (0.3.2)
193
+ unicode-display_width (1.7.0)
194
+ websocket-driver (0.7.3)
195
+ websocket-extensions (>= 0.1.0)
196
+ websocket-extensions (0.1.5)
197
+ zeitwerk (2.4.1)
92
198
 
93
199
  PLATFORMS
94
200
  ruby
95
201
 
96
202
  DEPENDENCIES
97
203
  activerecord
98
- bundler (~> 1.16)
204
+ bundler (~> 2)
99
205
  codecov
100
206
  graphql_rails!
101
207
  mongoid
102
208
  pry-byebug
103
- rake (~> 10.0)
209
+ rails (~> 6)
210
+ rake (~> 13.0)
104
211
  rspec (~> 3.0)
105
- rubocop
106
- rubocop-rspec
212
+ rubocop (= 0.91.0)
213
+ rubocop-performance (~> 1.8, >= 1.8.1)
214
+ rubocop-rspec (~> 1.44, >= 1.44.1)
107
215
  simplecov
108
216
 
109
217
  BUNDLED WITH
110
- 1.16.4
218
+ 2.1.4
@@ -1,5 +1,9 @@
1
1
  # GraphqlRails
2
2
 
3
+ [![Build Status](https://travis-ci.org/samesystem/graphql_rails.svg?branch=master)](https://travis-ci.org/samesystem/graphql_rails)
4
+ [![codecov](https://codecov.io/gh/samesystem/graphql_rails/branch/master/graph/badge.svg)](https://codecov.io/gh/samesystem/graphql_rails)
5
+ [![Documentation](https://readthedocs.org/projects/ansicolortags/badge/?version=latest)](https://samesystem.github.io/graphql_rails)
6
+
3
7
  Rails style structure for GraphQL API.
4
8
 
5
9
  ## Installation
@@ -18,12 +22,21 @@ Or install it yourself as:
18
22
 
19
23
  $ gem install graphql_rails
20
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
+
21
33
  ## Usage
22
34
 
23
35
  ### Define GraphQL schema as RoR routes
24
36
 
25
37
  ```ruby
26
- MyGraphqlSchema = GraphqlRails::Router.draw do
38
+ # config/graphql/routes.rb
39
+ GraphqlRails::Router.draw do
27
40
  # will create createUser, updateUser, deleteUser mutations and user, users queries.
28
41
  # expects that UsersController class exist
29
42
  resources :users
@@ -37,6 +50,7 @@ end
37
50
  ### Define your Graphql model
38
51
 
39
52
  ```ruby
53
+ # app/models/user.rb
40
54
  class User # works with any class including ActiveRecord
41
55
  include GraphqlRails::Model
42
56
 
@@ -53,10 +67,12 @@ end
53
67
  ### Define controller
54
68
 
55
69
  ```ruby
56
- class UsersController < GraphqlRails::Controller
70
+ # app/controllers/graphql/users_controller.rb
71
+ class Graphql::UsersController < GraphqlApplicationController
57
72
  # graphql requires to describe which attributes controller action accepts and which returns
58
73
  action(:change_user_password)
59
74
  .permit(:password!, :id!) # Bang (!) indicates that attribute is required
75
+ .returns('User!')
60
76
 
61
77
  def change_user_password
62
78
  user = User.find(params[:id])
@@ -66,7 +82,9 @@ class UsersController < GraphqlRails::Controller
66
82
  user # or SomeDecorator.new(user)
67
83
  end
68
84
 
69
- 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!]!')
70
88
  def search
71
89
  end
72
90
  end
@@ -75,7 +93,7 @@ end
75
93
  ## Routes
76
94
 
77
95
  ```ruby
78
- MyGraphqlSchema = GraphqlRails::Router.draw do
96
+ GraphqlRails::Router.draw do
79
97
  # generates `friend`, `createFriend`, `updateFriend`, `destroyFriend`, `friends` routes
80
98
  resources :friends
81
99
  resources :shops, only: [:show, :index] # generates `shop` and `shops` routes only
@@ -91,10 +109,10 @@ MyGraphqlSchema = GraphqlRails::Router.draw do
91
109
 
92
110
  # you can use namespaced controllers too:
93
111
  scope module: 'admin' do
94
- # `updateTranslations` route will be handeled by `Admin::TranslationsController`
112
+ # `updateTranslations` route will be handled by `Admin::TranslationsController`
95
113
  mutation :updateTranslations, to: 'translations#update'
96
114
 
97
- # all :groups routes will be handeled by `Admin::GroupsController`
115
+ # all :groups routes will be handled by `Admin::GroupsController`
98
116
  resources :groups
99
117
  end
100
118
  end
@@ -128,11 +146,13 @@ There are 3 helper methods:
128
146
 
129
147
  ```ruby
130
148
  class MyGraphqlController
149
+ action(:create_user).permit(:full_name, :email).returns(User)
150
+ action(:index).returns('String')
151
+
131
152
  def index
132
153
  "Called from index: #{params[:message]}"
133
154
  end
134
155
 
135
- action(:create_user).permit(:full_name, :email)
136
156
  def create_user
137
157
  User.create!(params)
138
158
  end
@@ -167,6 +187,25 @@ RSpec.describe MyGraphqlController, type: :graphql_controller do
167
187
  end
168
188
  ```
169
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
+
206
+ ## Detailed documentation
207
+
208
+ Check https://samesystem.github.io/graphql_rails for more details
170
209
 
171
210
  ## Development
172
211
 
@@ -176,7 +215,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
176
215
 
177
216
  ## Contributing
178
217
 
179
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/graphql_rails. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
218
+ Bug reports and pull requests are welcome on GitHub at https://github.com/samesystem/graphql_rails. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
180
219
 
181
220
  ## License
182
221
 
@@ -184,4 +223,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
184
223
 
185
224
  ## Code of Conduct
186
225
 
187
- Everyone interacting in the GraphqlRails project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/graphql_rails/blob/master/CODE_OF_CONDUCT.md).
226
+ Everyone interacting in the GraphqlRails project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/samesystem/graphql_rails/blob/master/CODE_OF_CONDUCT.md).