graphql_devise 0.14.0 → 0.16.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +118 -0
  3. data/Appraisals +39 -5
  4. data/CHANGELOG.md +68 -6
  5. data/README.md +150 -51
  6. data/Rakefile +2 -1
  7. data/app/controllers/graphql_devise/concerns/additional_controller_methods.rb +72 -0
  8. data/app/controllers/graphql_devise/concerns/set_user_by_token.rb +5 -27
  9. data/app/controllers/graphql_devise/graphql_controller.rb +1 -1
  10. data/app/helpers/graphql_devise/mailer_helper.rb +2 -2
  11. data/app/models/graphql_devise/concerns/additional_model_methods.rb +21 -0
  12. data/app/models/graphql_devise/concerns/model.rb +6 -9
  13. data/docs/usage/reset_password_flow.md +90 -0
  14. data/graphql_devise.gemspec +2 -2
  15. data/lib/generators/graphql_devise/install_generator.rb +1 -1
  16. data/lib/graphql_devise.rb +20 -6
  17. data/lib/graphql_devise/concerns/controller_methods.rb +3 -3
  18. data/lib/graphql_devise/mount_method/operation_preparer.rb +6 -6
  19. data/lib/graphql_devise/mount_method/operation_preparers/custom_operation_preparer.rb +6 -4
  20. data/lib/graphql_devise/mount_method/operation_preparers/default_operation_preparer.rb +6 -4
  21. data/lib/graphql_devise/mount_method/operation_preparers/{resource_name_setter.rb → resource_klass_setter.rb} +4 -4
  22. data/lib/graphql_devise/resolvers/confirm_account.rb +1 -1
  23. data/lib/graphql_devise/resource_loader.rb +26 -11
  24. data/lib/graphql_devise/schema_plugin.rb +41 -18
  25. data/lib/graphql_devise/version.rb +1 -1
  26. data/spec/dummy/app/controllers/api/v1/graphql_controller.rb +13 -2
  27. data/spec/dummy/app/graphql/dummy_schema.rb +4 -3
  28. data/spec/dummy/app/graphql/types/query_type.rb +5 -0
  29. data/spec/dummy/config/routes.rb +2 -1
  30. data/spec/dummy/db/migrate/20200623003142_create_schema_users.rb +0 -1
  31. data/spec/dummy/db/migrate/20210516211417_add_vip_to_users.rb +5 -0
  32. data/spec/dummy/db/schema.rb +4 -4
  33. data/spec/generators/graphql_devise/install_generator_spec.rb +1 -1
  34. data/spec/graphql/user_queries_spec.rb +120 -0
  35. data/spec/requests/graphql_controller_spec.rb +12 -11
  36. data/spec/requests/queries/introspection_query_spec.rb +149 -0
  37. data/spec/requests/user_controller_spec.rb +93 -32
  38. data/spec/services/mount_method/operation_preparer_spec.rb +5 -5
  39. data/spec/services/mount_method/operation_preparers/custom_operation_preparer_spec.rb +5 -5
  40. data/spec/services/mount_method/operation_preparers/default_operation_preparer_spec.rb +5 -5
  41. data/spec/services/mount_method/operation_preparers/{resource_name_setter_spec.rb → resource_klass_setter_spec.rb} +6 -6
  42. data/spec/services/resource_loader_spec.rb +5 -5
  43. data/spec/support/contexts/graphql_request.rb +11 -3
  44. data/spec/support/contexts/schema_test.rb +14 -0
  45. metadata +25 -14
  46. data/.travis.yml +0 -79
@@ -1,17 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ require 'rails_helper'
4
4
 
5
5
  RSpec.describe GraphqlDevise::MountMethod::OperationPreparers::DefaultOperationPreparer do
6
6
  describe '#call' do
7
7
  subject(:prepared) { default_preparer.call }
8
8
 
9
- let(:default_preparer) { described_class.new(selected_operations: operations, custom_keys: custom_keys, mapping_name: mapping_name, preparer: preparer) }
9
+ let(:default_preparer) { described_class.new(selected_operations: operations, custom_keys: custom_keys, model: model, preparer: preparer) }
10
10
  let(:confirm_operation) { double(:confirm_operation, graphql_name: nil) }
11
11
  let(:sign_up_operation) { double(:sign_up_operation, graphql_name: nil) }
12
12
  let(:login_operation) { double(:confirm_operation, graphql_name: nil) }
13
13
  let(:logout_operation) { double(:sign_up_operation, graphql_name: nil) }
14
- let(:mapping_name) { :user }
14
+ let(:model) { User }
15
15
  let(:preparer) { double(:preparer) }
16
16
  let(:custom_keys) { [:login, :logout] }
17
17
  let(:operations) do
@@ -46,8 +46,8 @@ RSpec.describe GraphqlDevise::MountMethod::OperationPreparers::DefaultOperationP
46
46
 
47
47
  prepared
48
48
 
49
- expect(confirm_operation.instance_variable_get(:@resource_name)).to eq(:user)
50
- expect(sign_up_operation.instance_variable_get(:@resource_name)).to eq(:user)
49
+ expect(confirm_operation.instance_variable_get(:@resource_klass)).to eq(User)
50
+ expect(sign_up_operation.instance_variable_get(:@resource_klass)).to eq(User)
51
51
  end
52
52
 
53
53
  context 'when no custom keys are provided' do
@@ -1,16 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ require 'rails_helper'
4
4
 
5
- RSpec.describe GraphqlDevise::MountMethod::OperationPreparers::ResourceNameSetter do
5
+ RSpec.describe GraphqlDevise::MountMethod::OperationPreparers::ResourceKlassSetter do
6
6
  describe '#call' do
7
- subject(:prepared_operation) { described_class.new(mapping_name).call(operation) }
7
+ subject(:prepared_operation) { described_class.new(model).call(operation) }
8
8
 
9
- let(:operation) { double(:operation) }
10
- let(:mapping_name) { :user }
9
+ let(:operation) { double(:operation) }
10
+ let(:model) { User }
11
11
 
12
12
  it 'sets a gql name to the operation' do
13
- expect(prepared_operation.instance_variable_get(:@resource_name)).to eq(:user)
13
+ expect(prepared_operation.instance_variable_get(:@resource_klass)).to eq(model)
14
14
  end
15
15
  end
16
16
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ require 'rails_helper'
4
4
 
5
5
  RSpec.describe GraphqlDevise::ResourceLoader do
6
6
  describe '#call' do
@@ -15,8 +15,8 @@ RSpec.describe GraphqlDevise::ResourceLoader do
15
15
 
16
16
  before do
17
17
  allow(GraphqlDevise).to receive(:add_mapping).with(:user, resource)
18
- allow(GraphqlDevise).to receive(:resource_mounted?).with(:user).and_return(mounted)
19
- allow(GraphqlDevise).to receive(:mount_resource).with(:user)
18
+ allow(GraphqlDevise).to receive(:resource_mounted?).with(User).and_return(mounted)
19
+ allow(GraphqlDevise).to receive(:mount_resource).with(User)
20
20
  end
21
21
 
22
22
  it 'loads operations into the provided types' do
@@ -64,13 +64,13 @@ RSpec.describe GraphqlDevise::ResourceLoader do
64
64
 
65
65
  it 'adds mappings' do
66
66
  expect(GraphqlDevise).to receive(:add_mapping).with(:user, resource)
67
- expect(GraphqlDevise).to receive(:mount_resource).with(:user)
67
+ expect(GraphqlDevise).to receive(:mount_resource).with(User)
68
68
 
69
69
  loader
70
70
  end
71
71
 
72
72
  context 'when resource was already mounted' do
73
- before { allow(GraphqlDevise).to receive(:resource_mounted?).with(:user).and_return(true) }
73
+ before { allow(GraphqlDevise).to receive(:resource_mounted?).with(User).and_return(true) }
74
74
 
75
75
  it 'skips schema loading' do
76
76
  expect(query).not_to receive(:field)
@@ -5,17 +5,25 @@ RSpec.shared_context 'with graphql query request' do
5
5
  let(:variables) { {} }
6
6
  let(:graphql_params) do
7
7
  if Rails::VERSION::MAJOR >= 5
8
- [{ params: { query: query, variables: variables }, headers: headers }]
8
+ { params: { query: query, variables: variables }, headers: headers }
9
9
  else
10
10
  [{ query: query, variables: variables }, headers]
11
11
  end
12
12
  end
13
13
 
14
14
  def post_request(path = '/api/v1/graphql_auth')
15
- post path, *graphql_params
15
+ send_request(path, :post)
16
16
  end
17
17
 
18
18
  def get_request(path = '/api/v1/graphql_auth')
19
- get path, *graphql_params
19
+ send_request(path, :get)
20
+ end
21
+
22
+ def send_request(path, method)
23
+ if Rails::VERSION::MAJOR >= 5
24
+ public_send(method, path, **graphql_params)
25
+ else
26
+ public_send(method, path, *graphql_params)
27
+ end
20
28
  end
21
29
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.shared_context 'with graphql schema test' do
4
+ let(:variables) { {} }
5
+ let(:resource_names) { [:user] }
6
+ let(:resource) { nil }
7
+ let(:controller) { instance_double(GraphqlDevise::GraphqlController) }
8
+ let(:context) do
9
+ { current_resource: resource, controller: controller, resource_name: resource_names }
10
+ end
11
+ let(:response) do
12
+ schema.execute(query, context: context, variables: variables).deep_symbolize_keys
13
+ end
14
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql_devise
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mario Celi
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2021-01-19 00:00:00.000000000 Z
12
+ date: 2021-05-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: devise_token_auth
@@ -40,7 +40,7 @@ dependencies:
40
40
  version: '1.8'
41
41
  - - "<"
42
42
  - !ruby/object:Gem::Version
43
- version: 1.12.0
43
+ version: 1.13.0
44
44
  type: :runtime
45
45
  prerelease: false
46
46
  version_requirements: !ruby/object:Gem::Requirement
@@ -50,7 +50,7 @@ dependencies:
50
50
  version: '1.8'
51
51
  - - "<"
52
52
  - !ruby/object:Gem::Version
53
- version: 1.12.0
53
+ version: 1.13.0
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: rails
56
56
  requirement: !ruby/object:Gem::Requirement
@@ -86,19 +86,19 @@ dependencies:
86
86
  - !ruby/object:Gem::Version
87
87
  version: '0'
88
88
  - !ruby/object:Gem::Dependency
89
- name: coveralls
89
+ name: coveralls-ruby
90
90
  requirement: !ruby/object:Gem::Requirement
91
91
  requirements:
92
- - - ">="
92
+ - - "~>"
93
93
  - !ruby/object:Gem::Version
94
- version: '0'
94
+ version: '0.2'
95
95
  type: :development
96
96
  prerelease: false
97
97
  version_requirements: !ruby/object:Gem::Requirement
98
98
  requirements:
99
- - - ">="
99
+ - - "~>"
100
100
  - !ruby/object:Gem::Version
101
- version: '0'
101
+ version: '0.2'
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: factory_bot
104
104
  requirement: !ruby/object:Gem::Requirement
@@ -275,13 +275,13 @@ executables: []
275
275
  extensions: []
276
276
  extra_rdoc_files: []
277
277
  files:
278
+ - ".circleci/config.yml"
278
279
  - ".github/ISSUE_TEMPLATE/bug_report.md"
279
280
  - ".github/ISSUE_TEMPLATE/enhancement.md"
280
281
  - ".github/ISSUE_TEMPLATE/question.md"
281
282
  - ".gitignore"
282
283
  - ".rspec"
283
284
  - ".rubocop.yml"
284
- - ".travis.yml"
285
285
  - Appraisals
286
286
  - CHANGELOG.md
287
287
  - Gemfile
@@ -289,10 +289,12 @@ files:
289
289
  - README.md
290
290
  - Rakefile
291
291
  - app/controllers/graphql_devise/application_controller.rb
292
+ - app/controllers/graphql_devise/concerns/additional_controller_methods.rb
292
293
  - app/controllers/graphql_devise/concerns/set_user_by_token.rb
293
294
  - app/controllers/graphql_devise/graphql_controller.rb
294
295
  - app/helpers/graphql_devise/application_helper.rb
295
296
  - app/helpers/graphql_devise/mailer_helper.rb
297
+ - app/models/graphql_devise/concerns/additional_model_methods.rb
296
298
  - app/models/graphql_devise/concerns/model.rb
297
299
  - app/views/.keep
298
300
  - app/views/graphql_devise/mailer/confirmation_instructions.html.erb
@@ -302,6 +304,7 @@ files:
302
304
  - bin/setup
303
305
  - config/locales/en.yml
304
306
  - config/routes.rb
307
+ - docs/usage/reset_password_flow.md
305
308
  - graphql_devise.gemspec
306
309
  - lib/generators/graphql_devise/install_generator.rb
307
310
  - lib/graphql_devise.rb
@@ -321,7 +324,7 @@ files:
321
324
  - lib/graphql_devise/mount_method/operation_preparers/gql_name_setter.rb
322
325
  - lib/graphql_devise/mount_method/operation_preparers/mutation_field_setter.rb
323
326
  - lib/graphql_devise/mount_method/operation_preparers/resolver_type_setter.rb
324
- - lib/graphql_devise/mount_method/operation_preparers/resource_name_setter.rb
327
+ - lib/graphql_devise/mount_method/operation_preparers/resource_klass_setter.rb
325
328
  - lib/graphql_devise/mount_method/operation_sanitizer.rb
326
329
  - lib/graphql_devise/mount_method/option_sanitizer.rb
327
330
  - lib/graphql_devise/mount_method/option_sanitizers/array_checker.rb
@@ -422,6 +425,7 @@ files:
422
425
  - spec/dummy/db/migrate/20200321121807_create_users_customers.rb
423
426
  - spec/dummy/db/migrate/20200621182414_remove_uncofirmed_email_from_admins.rb
424
427
  - spec/dummy/db/migrate/20200623003142_create_schema_users.rb
428
+ - spec/dummy/db/migrate/20210516211417_add_vip_to_users.rb
425
429
  - spec/dummy/db/schema.rb
426
430
  - spec/dummy/db/seeds.rb
427
431
  - spec/dummy/public/robots.txt
@@ -431,6 +435,7 @@ files:
431
435
  - spec/factories/users.rb
432
436
  - spec/factories/users_customers.rb
433
437
  - spec/generators/graphql_devise/install_generator_spec.rb
438
+ - spec/graphql/user_queries_spec.rb
434
439
  - spec/graphql_devise/model/with_email_updater_spec.rb
435
440
  - spec/graphql_devise_spec.rb
436
441
  - spec/models/user_spec.rb
@@ -448,6 +453,7 @@ files:
448
453
  - spec/requests/mutations/update_password_with_token_spec.rb
449
454
  - spec/requests/queries/check_password_token_spec.rb
450
455
  - spec/requests/queries/confirm_account_spec.rb
456
+ - spec/requests/queries/introspection_query_spec.rb
451
457
  - spec/requests/user_controller_spec.rb
452
458
  - spec/services/mount_method/operation_preparer_spec.rb
453
459
  - spec/services/mount_method/operation_preparers/custom_operation_preparer_spec.rb
@@ -455,7 +461,7 @@ files:
455
461
  - spec/services/mount_method/operation_preparers/gql_name_setter_spec.rb
456
462
  - spec/services/mount_method/operation_preparers/mutation_field_setter_spec.rb
457
463
  - spec/services/mount_method/operation_preparers/resolver_type_setter_spec.rb
458
- - spec/services/mount_method/operation_preparers/resource_name_setter_spec.rb
464
+ - spec/services/mount_method/operation_preparers/resource_klass_setter_spec.rb
459
465
  - spec/services/mount_method/operation_sanitizer_spec.rb
460
466
  - spec/services/mount_method/option_sanitizer_spec.rb
461
467
  - spec/services/mount_method/option_sanitizers/array_checker_spec.rb
@@ -470,6 +476,7 @@ files:
470
476
  - spec/services/schema_plugin_spec.rb
471
477
  - spec/spec_helper.rb
472
478
  - spec/support/contexts/graphql_request.rb
479
+ - spec/support/contexts/schema_test.rb
473
480
  - spec/support/factory_bot.rb
474
481
  - spec/support/matchers/auth_headers_matcher.rb
475
482
  - spec/support/matchers/not_change_matcher.rb
@@ -496,7 +503,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
496
503
  - !ruby/object:Gem::Version
497
504
  version: '0'
498
505
  requirements: []
499
- rubygems_version: 3.0.8
506
+ rubygems_version: 3.0.3
500
507
  signing_key:
501
508
  specification_version: 4
502
509
  summary: GraphQL queries and mutations on top of devise_token_auth
@@ -568,6 +575,7 @@ test_files:
568
575
  - spec/dummy/db/migrate/20200321121807_create_users_customers.rb
569
576
  - spec/dummy/db/migrate/20200621182414_remove_uncofirmed_email_from_admins.rb
570
577
  - spec/dummy/db/migrate/20200623003142_create_schema_users.rb
578
+ - spec/dummy/db/migrate/20210516211417_add_vip_to_users.rb
571
579
  - spec/dummy/db/schema.rb
572
580
  - spec/dummy/db/seeds.rb
573
581
  - spec/dummy/public/robots.txt
@@ -577,6 +585,7 @@ test_files:
577
585
  - spec/factories/users.rb
578
586
  - spec/factories/users_customers.rb
579
587
  - spec/generators/graphql_devise/install_generator_spec.rb
588
+ - spec/graphql/user_queries_spec.rb
580
589
  - spec/graphql_devise/model/with_email_updater_spec.rb
581
590
  - spec/graphql_devise_spec.rb
582
591
  - spec/models/user_spec.rb
@@ -594,6 +603,7 @@ test_files:
594
603
  - spec/requests/mutations/update_password_with_token_spec.rb
595
604
  - spec/requests/queries/check_password_token_spec.rb
596
605
  - spec/requests/queries/confirm_account_spec.rb
606
+ - spec/requests/queries/introspection_query_spec.rb
597
607
  - spec/requests/user_controller_spec.rb
598
608
  - spec/services/mount_method/operation_preparer_spec.rb
599
609
  - spec/services/mount_method/operation_preparers/custom_operation_preparer_spec.rb
@@ -601,7 +611,7 @@ test_files:
601
611
  - spec/services/mount_method/operation_preparers/gql_name_setter_spec.rb
602
612
  - spec/services/mount_method/operation_preparers/mutation_field_setter_spec.rb
603
613
  - spec/services/mount_method/operation_preparers/resolver_type_setter_spec.rb
604
- - spec/services/mount_method/operation_preparers/resource_name_setter_spec.rb
614
+ - spec/services/mount_method/operation_preparers/resource_klass_setter_spec.rb
605
615
  - spec/services/mount_method/operation_sanitizer_spec.rb
606
616
  - spec/services/mount_method/option_sanitizer_spec.rb
607
617
  - spec/services/mount_method/option_sanitizers/array_checker_spec.rb
@@ -616,6 +626,7 @@ test_files:
616
626
  - spec/services/schema_plugin_spec.rb
617
627
  - spec/spec_helper.rb
618
628
  - spec/support/contexts/graphql_request.rb
629
+ - spec/support/contexts/schema_test.rb
619
630
  - spec/support/factory_bot.rb
620
631
  - spec/support/matchers/auth_headers_matcher.rb
621
632
  - spec/support/matchers/not_change_matcher.rb
data/.travis.yml DELETED
@@ -1,79 +0,0 @@
1
- ---
2
- language: ruby
3
- sudo: false
4
- cache: bundler
5
- before_install: gem install bundler -v 1.17
6
- before_script: RAILS_ENV=test bundle exec rake db:create db:schema:load
7
-
8
- env: EAGER_LOAD=true
9
-
10
- rvm:
11
- - 2.2.10
12
- - 2.3.8
13
- - 2.4.10
14
- - 2.5.8
15
- - 2.6.6
16
- - 2.7.1
17
-
18
- gemfile:
19
- - gemfiles/rails4.2_graphql1.8.gemfile
20
- - gemfiles/rails5.0_graphql1.8.gemfile
21
- - gemfiles/rails5.0_graphql1.9.gemfile
22
- - gemfiles/rails5.1_graphql1.8.gemfile
23
- - gemfiles/rails5.1_graphql1.9.gemfile
24
- - gemfiles/rails5.2_graphql1.8.gemfile
25
- - gemfiles/rails5.2_graphql1.9.gemfile
26
- - gemfiles/rails5.2_graphql1.10.gemfile
27
- - gemfiles/rails5.2_graphql1.11.gemfile
28
-
29
- jobs:
30
- include:
31
- - gemfile: gemfiles/rails6.0_graphql1.8.gemfile
32
- rvm: 2.5.8
33
- - gemfile: gemfiles/rails6.0_graphql1.8.gemfile
34
- rvm: 2.6.6
35
- - gemfile: gemfiles/rails6.0_graphql1.8.gemfile
36
- rvm: 2.7.1
37
- - gemfile: gemfiles/rails6.0_graphql1.9.gemfile
38
- rvm: 2.5.8
39
- - gemfile: gemfiles/rails6.0_graphql1.9.gemfile
40
- rvm: 2.6.6
41
- - gemfile: gemfiles/rails6.0_graphql1.9.gemfile
42
- rvm: 2.7.1
43
- - gemfile: gemfiles/rails6.0_graphql1.10.gemfile
44
- rvm: 2.5.8
45
- - gemfile: gemfiles/rails6.0_graphql1.10.gemfile
46
- rvm: 2.6.6
47
- - gemfile: gemfiles/rails6.0_graphql1.10.gemfile
48
- rvm: 2.7.1
49
- - gemfile: gemfiles/rails6.0_graphql1.11.gemfile
50
- rvm: 2.5.8
51
- - gemfile: gemfiles/rails6.0_graphql1.11.gemfile
52
- rvm: 2.6.6
53
- - gemfile: gemfiles/rails6.0_graphql1.11.gemfile
54
- rvm: 2.7.1
55
- - gemfile: gemfiles/rails6.0_graphql_edge.gemfile
56
- rvm: 2.6.6
57
- env:
58
- - SKIP_COVERALLS=true
59
- - EAGER_LOAD=true
60
- - gemfile: gemfiles/rails6.0_graphql_edge.gemfile
61
- rvm: 2.7.1
62
- env:
63
- - SKIP_COVERALLS=true
64
- - EAGER_LOAD=true
65
- - gemfile: gemfiles/rails_edge_graphql_edge.gemfile
66
- rvm: 2.7.1
67
- env:
68
- - SKIP_COVERALLS=true
69
- - EAGER_LOAD=true
70
- exclude:
71
- - gemfile: gemfiles/rails4.2_graphql1.8.gemfile
72
- rvm: 2.7.1
73
- allow_failures:
74
- - rvm: 2.6.6
75
- gemfile: gemfiles/rails6.0_graphql_edge.gemfile
76
- - rvm: 2.7.1
77
- gemfile: gemfiles/rails6.0_graphql_edge.gemfile
78
- - rvm: 2.7.1
79
- gemfile: gemfiles/rails_edge_graphql_edge.gemfile