11module ActionDispatch ::Routing
22 class Mapper
33 def mount_graphql_devise_for ( resource , opts = { } )
4- custom_operations = opts [ :operations ] || { }
4+ custom_operations = opts [ :operations ] || { }
5+ skipped_operations = opts . fetch ( :skip , [ ] )
6+ only_operations = opts . fetch ( :only , [ ] )
7+
8+ if [ skipped_operations , only_operations ] . all? ( &:any? )
9+ raise GraphqlDevise ::Error , "Can't specify both `skip` and `only` options when mounting the route."
10+ end
11+
12+ default_mutations = {
13+ login : GraphqlDevise ::Mutations ::Login ,
14+ logout : GraphqlDevise ::Mutations ::Logout ,
15+ sign_up : GraphqlDevise ::Mutations ::SignUp ,
16+ update_password : GraphqlDevise ::Mutations ::UpdatePassword ,
17+ send_reset_password : GraphqlDevise ::Mutations ::SendPasswordReset
18+ } . freeze
19+ default_queries = {
20+ confirm_account : GraphqlDevise ::Resolvers ::ConfirmAccount ,
21+ check_password_token : GraphqlDevise ::Resolvers ::CheckPasswordToken
22+ }
23+ supported_operations = default_mutations . keys + default_queries . keys
24+
25+ unless skipped_operations . all? { |skipped | supported_operations . include? ( skipped ) }
26+ raise GraphqlDevise ::Error , 'Trying to skip a non supported operation. Check for typos.'
27+ end
28+ unless only_operations . all? { |only | supported_operations . include? ( only ) }
29+ raise GraphqlDevise ::Error , 'One of the `only` operations is not supported. Check for typos.'
30+ end
531
632 path = opts . fetch ( :at , '/graphql_auth' )
733 mapping_name = resource . underscore . tr ( '/' , '_' ) . to_sym
@@ -16,15 +42,12 @@ def mount_graphql_devise_for(resource, opts = {})
1642 "Types::#{ resource } Type" . safe_constantize ||
1743 GraphqlDevise ::Types ::AuthenticableType
1844
19- default_mutations = {
20- login : GraphqlDevise ::Mutations ::Login ,
21- logout : GraphqlDevise ::Mutations ::Logout ,
22- sign_up : GraphqlDevise ::Mutations ::SignUp ,
23- update_password : GraphqlDevise ::Mutations ::UpdatePassword ,
24- send_reset_password : GraphqlDevise ::Mutations ::SendPasswordReset
25- } . freeze
26-
27- default_mutations . each do |action , mutation |
45+ used_mutations = if only_operations . present?
46+ default_mutations . slice ( *only_operations )
47+ else
48+ default_mutations . except ( *skipped_operations )
49+ end
50+ used_mutations . each do |action , mutation |
2851 used_mutation = if custom_operations [ action ] . present?
2952 custom_operations [ action ]
3053 else
@@ -39,12 +62,12 @@ def mount_graphql_devise_for(resource, opts = {})
3962 GraphqlDevise ::Types ::MutationType . field ( "#{ mapping_name } _#{ action } " , mutation : used_mutation )
4063 end
4164
42- default_queries = {
43- confirm_account : GraphqlDevise :: Resolvers :: ConfirmAccount ,
44- check_password_token : GraphqlDevise :: Resolvers :: CheckPasswordToken
45- }
46-
47- default_queries . each do |action , query |
65+ used_queries = if only_operations . present?
66+ default_queries . slice ( * only_operations )
67+ else
68+ default_queries . except ( * skipped_operations )
69+ end
70+ used_queries . each do |action , query |
4871 used_query = if custom_operations [ action ] . present?
4972 custom_operations [ action ]
5073 else
0 commit comments