graphql_rails 1.0.0 → 1.1.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 (39) 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 +3 -0
  7. data/Gemfile +3 -2
  8. data/Gemfile.lock +141 -117
  9. data/docs/README.md +2 -2
  10. data/docs/components/controller.md +21 -5
  11. data/docs/components/model.md +43 -3
  12. data/docs/index.html +1 -1
  13. data/graphql_rails.gemspec +5 -5
  14. data/lib/generators/graphql_rails/templates/graphql_router_spec.erb +10 -7
  15. data/lib/graphql_rails/attributes/attributable.rb +2 -4
  16. data/lib/graphql_rails/attributes/attribute.rb +26 -6
  17. data/lib/graphql_rails/attributes/attribute_name_parser.rb +1 -1
  18. data/lib/graphql_rails/attributes/input_attribute.rb +5 -1
  19. data/lib/graphql_rails/concerns/service.rb +6 -2
  20. data/lib/graphql_rails/controller.rb +6 -6
  21. data/lib/graphql_rails/controller/action.rb +5 -1
  22. data/lib/graphql_rails/controller/build_controller_action_resolver.rb +2 -2
  23. data/lib/graphql_rails/controller/request.rb +1 -1
  24. data/lib/graphql_rails/controller/request/format_errors.rb +1 -1
  25. data/lib/graphql_rails/model/add_fields_to_graphql_type.rb +45 -0
  26. data/lib/graphql_rails/model/build_graphql_input_type.rb +1 -1
  27. data/lib/graphql_rails/model/call_graphql_model_method.rb +14 -1
  28. data/lib/graphql_rails/model/configurable.rb +6 -2
  29. data/lib/graphql_rails/model/configuration.rb +9 -4
  30. data/lib/graphql_rails/model/find_or_build_graphql_type.rb +64 -0
  31. data/lib/graphql_rails/model/find_or_build_graphql_type_class.rb +46 -0
  32. data/lib/graphql_rails/router.rb +2 -2
  33. data/lib/graphql_rails/router/resource_routes_builder.rb +8 -8
  34. data/lib/graphql_rails/router/route.rb +3 -7
  35. data/lib/graphql_rails/router/schema_builder.rb +1 -1
  36. data/lib/graphql_rails/rspec_controller_helpers.rb +2 -2
  37. data/lib/graphql_rails/version.rb +1 -1
  38. metadata +21 -14
  39. data/lib/graphql_rails/model/build_graphql_type.rb +0 -53
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fcc5df5d34e3bf317dd9bb07e2b846bf8dfa48e990258b4bb2f30ef73d049939
4
- data.tar.gz: 6cd112b22a0d01f031dd2aba92efc390d44b209c8d6a428e257d1be99377f28c
3
+ metadata.gz: 60ad653d6c6acbfe0816f0b7ddb406dae7131b1c07f86f7ab35b98813079edb1
4
+ data.tar.gz: ff9446c8240615d5cba3e6ac3206444d47d257d201278e0860d765976c8f99fc
5
5
  SHA512:
6
- metadata.gz: 59f24a1ad00e309c7617a6ed65200dc11f62680974f3de7ca4e36d96b0d8dab8f286c8c9c4b50dd4b70a375959187ce21d09a309075a4ffa009716d3b74e7df7
7
- data.tar.gz: ca1500174b1443240db65e3b57dbe0616ad7038da3e6f833ca2979e2fb4de7074c8ce9671c55dfa07bb327f4469b7999b8f00769a686c8829abfcf2eb275b6e0
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,9 @@ 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
+
12
15
  ## [1.0.0](2020-02-07)
13
16
 
14
17
  * Added: "required" and "optional" flags for attribute
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,194 +1,218 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- graphql_rails (1.0.0)
4
+ graphql_rails (1.1.0)
5
5
  activesupport (>= 4)
6
- graphql (>= 1.9.12)
6
+ graphql (~> 1.11, >= 1.11.6)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- actioncable (5.2.2.1)
12
- actionpack (= 5.2.2.1)
11
+ actioncable (6.0.3.4)
12
+ actionpack (= 6.0.3.4)
13
13
  nio4r (~> 2.0)
14
14
  websocket-driver (>= 0.6.1)
15
- actionmailer (5.2.2.1)
16
- actionpack (= 5.2.2.1)
17
- actionview (= 5.2.2.1)
18
- activejob (= 5.2.2.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)
19
26
  mail (~> 2.5, >= 2.5.4)
20
27
  rails-dom-testing (~> 2.0)
21
- actionpack (5.2.2.1)
22
- actionview (= 5.2.2.1)
23
- activesupport (= 5.2.2.1)
24
- rack (~> 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)
25
32
  rack-test (>= 0.6.3)
26
33
  rails-dom-testing (~> 2.0)
27
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
28
- actionview (5.2.2.1)
29
- activesupport (= 5.2.2.1)
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)
30
43
  builder (~> 3.1)
31
44
  erubi (~> 1.4)
32
45
  rails-dom-testing (~> 2.0)
33
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
34
- activejob (5.2.2.1)
35
- activesupport (= 5.2.2.1)
46
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
47
+ activejob (6.0.3.4)
48
+ activesupport (= 6.0.3.4)
36
49
  globalid (>= 0.3.6)
37
- activemodel (5.2.2.1)
38
- activesupport (= 5.2.2.1)
39
- activerecord (5.2.2.1)
40
- activemodel (= 5.2.2.1)
41
- activesupport (= 5.2.2.1)
42
- arel (>= 9.0)
43
- activestorage (5.2.2.1)
44
- actionpack (= 5.2.2.1)
45
- activerecord (= 5.2.2.1)
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)
46
59
  marcel (~> 0.3.1)
47
- activesupport (5.2.2.1)
60
+ activesupport (6.0.3.4)
48
61
  concurrent-ruby (~> 1.0, >= 1.0.2)
49
62
  i18n (>= 0.7, < 2)
50
63
  minitest (~> 5.1)
51
64
  tzinfo (~> 1.1)
52
- arel (9.0.0)
53
- ast (2.4.0)
54
- bson (4.4.2)
55
- builder (3.2.3)
56
- byebug (11.0.1)
57
- 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)
58
71
  json
59
72
  simplecov
60
- url
61
- coderay (1.1.2)
62
- concurrent-ruby (1.1.5)
63
- crass (1.0.5)
64
- diff-lcs (1.3)
73
+ coderay (1.1.3)
74
+ concurrent-ruby (1.1.7)
75
+ crass (1.0.6)
76
+ diff-lcs (1.4.4)
65
77
  docile (1.3.2)
66
- erubi (1.8.0)
78
+ erubi (1.9.0)
67
79
  globalid (0.4.2)
68
80
  activesupport (>= 4.2.0)
69
- graphql (1.9.17)
70
- i18n (1.6.0)
81
+ graphql (1.11.6)
82
+ i18n (1.8.5)
71
83
  concurrent-ruby (~> 1.0)
72
- jaro_winkler (1.5.4)
73
- json (2.3.0)
74
- loofah (2.3.1)
84
+ json (2.3.1)
85
+ loofah (2.7.0)
75
86
  crass (~> 1.0.2)
76
87
  nokogiri (>= 1.5.9)
77
88
  mail (2.7.1)
78
89
  mini_mime (>= 0.1.1)
79
90
  marcel (0.3.3)
80
91
  mimemagic (~> 0.3.2)
81
- method_source (0.9.2)
82
- mimemagic (0.3.3)
83
- mini_mime (1.0.1)
92
+ method_source (1.0.0)
93
+ mimemagic (0.3.5)
94
+ mini_mime (1.0.2)
84
95
  mini_portile2 (2.4.0)
85
- minitest (5.11.3)
86
- mongo (2.8.0)
87
- bson (>= 4.4.2, < 5.0.0)
88
- mongoid (7.0.2)
89
- activemodel (>= 5.1, < 6.0.0)
90
- mongo (>= 2.5.1, < 3.0.0)
91
- nio4r (2.3.1)
92
- nokogiri (1.10.5)
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)
93
104
  mini_portile2 (~> 2.4.0)
94
- parallel (1.19.1)
95
- parser (2.7.0.2)
96
- ast (~> 2.4.0)
97
- pry (0.12.2)
98
- coderay (~> 1.1.0)
99
- method_source (~> 0.9.0)
100
- pry-byebug (3.7.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)
101
112
  byebug (~> 11.0)
102
- pry (~> 0.10)
103
- rack (2.0.8)
113
+ pry (~> 0.13.0)
114
+ rack (2.2.3)
104
115
  rack-test (1.1.0)
105
116
  rack (>= 1.0, < 3)
106
- rails (5.2.2.1)
107
- actioncable (= 5.2.2.1)
108
- actionmailer (= 5.2.2.1)
109
- actionpack (= 5.2.2.1)
110
- actionview (= 5.2.2.1)
111
- activejob (= 5.2.2.1)
112
- activemodel (= 5.2.2.1)
113
- activerecord (= 5.2.2.1)
114
- activestorage (= 5.2.2.1)
115
- activesupport (= 5.2.2.1)
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)
116
129
  bundler (>= 1.3.0)
117
- railties (= 5.2.2.1)
130
+ railties (= 6.0.3.4)
118
131
  sprockets-rails (>= 2.0.0)
119
132
  rails-dom-testing (2.0.3)
120
133
  activesupport (>= 4.2.0)
121
134
  nokogiri (>= 1.6)
122
- rails-html-sanitizer (1.0.4)
123
- loofah (~> 2.2, >= 2.2.2)
124
- railties (5.2.2.1)
125
- actionpack (= 5.2.2.1)
126
- activesupport (= 5.2.2.1)
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)
127
140
  method_source
128
141
  rake (>= 0.8.7)
129
- thor (>= 0.19.0, < 2.0)
142
+ thor (>= 0.20.3, < 2.0)
130
143
  rainbow (3.0.0)
131
- rake (10.5.0)
132
- rspec (3.8.0)
133
- rspec-core (~> 3.8.0)
134
- rspec-expectations (~> 3.8.0)
135
- rspec-mocks (~> 3.8.0)
136
- rspec-core (3.8.0)
137
- rspec-support (~> 3.8.0)
138
- 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)
139
154
  diff-lcs (>= 1.2.0, < 2.0)
140
- rspec-support (~> 3.8.0)
141
- rspec-mocks (3.8.0)
155
+ rspec-support (~> 3.10.0)
156
+ rspec-mocks (3.10.0)
142
157
  diff-lcs (>= 1.2.0, < 2.0)
143
- rspec-support (~> 3.8.0)
144
- rspec-support (3.8.0)
145
- rubocop (0.79.0)
146
- jaro_winkler (~> 1.5.1)
158
+ rspec-support (~> 3.10.0)
159
+ rspec-support (3.10.0)
160
+ rubocop (0.91.0)
147
161
  parallel (~> 1.10)
148
- parser (>= 2.7.0.1)
162
+ parser (>= 2.7.1.1)
149
163
  rainbow (>= 2.2.2, < 4.0)
164
+ regexp_parser (>= 1.7)
165
+ rexml
166
+ rubocop-ast (>= 0.4.0, < 1.0)
150
167
  ruby-progressbar (~> 1.7)
151
- unicode-display_width (>= 1.4.0, < 1.7)
152
- rubocop-rspec (1.32.0)
153
- rubocop (>= 0.60.0)
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)
154
177
  ruby-progressbar (1.10.1)
155
- simplecov (0.18.1)
178
+ simplecov (0.19.1)
156
179
  docile (~> 1.1)
157
- simplecov-html (~> 0.11.0)
158
- simplecov-html (0.11.0)
159
- sprockets (3.7.2)
180
+ simplecov-html (~> 0.11)
181
+ simplecov-html (0.12.3)
182
+ sprockets (4.0.2)
160
183
  concurrent-ruby (~> 1.0)
161
184
  rack (> 1, < 3)
162
- sprockets-rails (3.2.1)
185
+ sprockets-rails (3.2.2)
163
186
  actionpack (>= 4.0)
164
187
  activesupport (>= 4.0)
165
188
  sprockets (>= 3.0.0)
166
- thor (0.20.3)
189
+ thor (1.0.1)
167
190
  thread_safe (0.3.6)
168
- tzinfo (1.2.5)
191
+ tzinfo (1.2.7)
169
192
  thread_safe (~> 0.1)
170
- unicode-display_width (1.6.1)
171
- url (0.3.2)
172
- websocket-driver (0.7.1)
193
+ unicode-display_width (1.7.0)
194
+ websocket-driver (0.7.3)
173
195
  websocket-extensions (>= 0.1.0)
174
- websocket-extensions (0.1.4)
196
+ websocket-extensions (0.1.5)
197
+ zeitwerk (2.4.1)
175
198
 
176
199
  PLATFORMS
177
200
  ruby
178
201
 
179
202
  DEPENDENCIES
180
203
  activerecord
181
- bundler (~> 1.16)
204
+ bundler (~> 2)
182
205
  codecov
183
206
  graphql_rails!
184
207
  mongoid
185
208
  pry-byebug
186
- rails (~> 5)
187
- rake (~> 10.0)
209
+ rails (~> 6)
210
+ rake (~> 13.0)
188
211
  rspec (~> 3.0)
189
- rubocop
190
- rubocop-rspec
212
+ rubocop (= 0.91.0)
213
+ rubocop-performance (~> 1.8, >= 1.8.1)
214
+ rubocop-rspec (~> 1.44, >= 1.44.1)
191
215
  simplecov
192
216
 
193
217
  BUNDLED WITH
194
- 1.16.4
218
+ 2.1.4
@@ -109,10 +109,10 @@ GraphqlRails::Router.draw do
109
109
 
110
110
  # you can use namespaced controllers too:
111
111
  scope module: 'admin' do
112
- # `updateTranslations` route will be handeled by `Admin::TranslationsController`
112
+ # `updateTranslations` route will be handled by `Admin::TranslationsController`
113
113
  mutation :updateTranslations, to: 'translations#update'
114
114
 
115
- # all :groups routes will be handeled by `Admin::GroupsController`
115
+ # all :groups routes will be handled by `Admin::GroupsController`
116
116
  resources :groups
117
117
  end
118
118
  end
@@ -169,7 +169,7 @@ class UsersController < GraphqlRails::Controller
169
169
  end
170
170
  ```
171
171
 
172
- Also check ['decorating controller responses']('components/decorator') for more details about working with active record and decorators.
172
+ Also check ['decorating controller responses'](components/decorator) for more details about working with active record and decorators.
173
173
 
174
174
  #### *max_page_size*
175
175
 
@@ -219,6 +219,22 @@ class UsersController < GraphqlRails::Controller
219
219
  end
220
220
  ```
221
221
 
222
+ You can also return raw graphql-ruby types:
223
+
224
+ ```ruby
225
+ # raw graphql-ruby type:
226
+ class OrderType < GraphQL::Schema::Object
227
+ graphql_name 'Order'
228
+ field :id, ID
229
+ end
230
+
231
+ class UsersController < GraphqlRails::Controller
232
+ action(:last_order).permit(:id).returns(OrderType)
233
+ end
234
+ ```
235
+
236
+ Check [graphql-ruby documentation](https://graphql-ruby.org) for more details about graphql-ruby types.
237
+
222
238
  ### *returns_list*
223
239
 
224
240
  When you have defined `model` dynamically, you can use `returns_list` to indicate that action must return list without specifying model type for each action. By default list and inner types are required but you can change that with `required_list: false` and `required_inner: false`
@@ -438,13 +454,13 @@ end
438
454
 
439
455
  ## decorating objects
440
456
 
441
- See ['Decorating controller responses']('components/decorator') for various options how you can decorate paginated responses
457
+ See ['Decorating controller responses'](components/decorator) for various options how you can decorate paginated responses
442
458
 
443
459
  ## Rendering errors
444
460
 
445
461
  ### Rendering strings as errors
446
462
 
447
- The simples way to render error is to provide list of error messages, like this:
463
+ The simplest way to render an error is to provide a list of error messages, like this:
448
464
 
449
465
  ```ruby
450
466
  class UsersController < GraphqlRails::Controller
@@ -509,12 +525,12 @@ end
509
525
 
510
526
  ### Raising custom error classes
511
527
 
512
- If you want to have customized error classes you need to create errors which inherits from `GraphqlRails::ExecutionError`
528
+ If you want to have customized error classes you need to create errors which inherit from `GraphqlRails::ExecutionError`
513
529
 
514
530
  ```ruby
515
531
  class MyCustomError < GraphqlRails::ExecutionError
516
532
  def to_h
517
- # this part will be rendered in graphl
533
+ # this part will be rendered in graphql
518
534
  { something_custom: 'yes' }
519
535
  end
520
536
  end