graphql_devise 0.14.0 → 0.16.0

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