Skip to content

Commit 29bcb0e

Browse files
committed
Do not deppend on devise mappings for resource_class
1 parent 49d85a1 commit 29bcb0e

14 files changed

Lines changed: 48 additions & 36 deletions

File tree

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
module GraphqlDevise
2-
class ApplicationController < DeviseTokenAuth::ApplicationController
3-
private
4-
5-
def verify_authenticity_token
6-
end
2+
ApplicationController = if Rails::VERSION::MAJOR >= 5
3+
Class.new(ActionController::API)
4+
else
5+
Class.new(ActionController::Base)
76
end
87
end
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
module GraphqlDevise
22
module Concerns
33
SetUserByToken = DeviseTokenAuth::Concerns::SetUserByToken
4+
5+
SetUserByToken.module_eval do
6+
def build_redirect_headers(access_token, client, redirect_header_options = {})
7+
{
8+
DeviseTokenAuth.headers_names[:"access-token"] => access_token,
9+
DeviseTokenAuth.headers_names[:client] => client,
10+
:config => params[:config],
11+
:client_id => client,
12+
:token => access_token
13+
}.merge(redirect_header_options)
14+
end
15+
end
416
end
517
end

app/controllers/graphql_devise/graphql_controller.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
module GraphqlDevise
44
class GraphqlController < ApplicationController
5+
include GraphqlDevise::Concerns::SetUserByToken
6+
57
def auth
68
result = if params[:_json]
79
GraphqlDevise::Schema.multiplex(

app/helpers/graphql_devise/mailer_helper.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module GraphqlDevise
22
module MailerHelper
33
def confirmation_query(resource_name:, token:, redirect_url:)
4-
name = "#{resource_name.camelize(:lower)}ConfirmAccount"
4+
name = "#{resource_name.underscore.tr('/', '_').camelize(:lower)}ConfirmAccount"
55
raw = <<-GRAPHQL
66
query($token:String!,$redirectUrl:String!){
77
#{name}(confirmationToken:$token,redirectUrl:$redirectUrl){
@@ -17,7 +17,7 @@ def confirmation_query(resource_name:, token:, redirect_url:)
1717
end
1818

1919
def password_reset_query(token:, redirect_url:, resource_name:)
20-
name = "#{resource_name.camelize(:lower)}CheckPasswordToken"
20+
name = "#{resource_name.underscore.tr('/', '_').camelize(:lower)}CheckPasswordToken"
2121
raw = <<-GRAPHQL
2222
query($token:String!,$redirectUrl:String!){
2323
#{name}(resetPasswordToken:$token,redirectUrl:$redirectUrl){

lib/graphql_devise.rb

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ class Error < StandardError; end
77

88
class InvalidMountOptionsError < GraphqlDevise::Error; end
99

10-
@schema_loaded = false
11-
@mounted_resources = []
10+
@schema_loaded = false
11+
@mappings = {}
1212

1313
def self.schema_loaded?
1414
@schema_loaded
@@ -18,12 +18,16 @@ def self.load_schema
1818
@schema_loaded = true
1919
end
2020

21-
def self.mount_resource(resource)
22-
@mounted_resources << resource
21+
def self.resource_mounted?(resource)
22+
@mappings.key?(resource)
2323
end
2424

25-
def self.resource_mounted?(resource)
26-
@mounted_resources.include?(resource)
25+
def self.add_mapping(name, klass)
26+
@mappings[name] = klass
27+
end
28+
29+
def self.mapping_by_name(name)
30+
@mappings.fetch(name)
2731
end
2832
end
2933

lib/graphql_devise/concerns/controller_methods.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def resource_name
3636
end
3737

3838
def resource_class
39-
controller.send(:resource_class, resource_name)
39+
GraphqlDevise.mapping_by_name(resource_name)
4040
end
4141

4242
def recoverable_enabled?

lib/graphql_devise/mount_method/operation_preparer.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
module GraphqlDevise
99
module MountMethod
1010
class OperationPreparer
11-
def initialize(resource:, selected_operations:, preparer:, custom:, additional_operations:)
11+
def initialize(mapping_name:, selected_operations:, preparer:, custom:, additional_operations:)
1212
@selected_operations = selected_operations
1313
@preparer = preparer
14-
@mapping_name = resource.underscore.tr('/', '_')
14+
@mapping_name = mapping_name
1515
@custom = custom
1616
@additional_operations = additional_operations
1717
end

lib/graphql_devise/mount_method/operation_preparers/resource_name_setter.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ def initialize(name)
77
end
88

99
def call(operation)
10-
operation.instance_variable_set(:@resource_name, @name.to_sym)
10+
operation.instance_variable_set(:@resource_name, @name)
1111

1212
operation
1313
end

lib/graphql_devise/mutations/sign_up.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def resolve(confirm_success_url: nil, **attrs)
3535

3636
{ authenticatable: resource }
3737
else
38-
clean_up_passwords(resource)
38+
resource.clean_up_passwords if resource.respond_to?(:clean_up_passwords)
3939
raise_user_error_list(
4040
I18n.t('graphql_devise.registration_failed'),
4141
errors: resource.errors.full_messages
@@ -48,10 +48,6 @@ def resolve(confirm_success_url: nil, **attrs)
4848
def build_resource(attrs)
4949
resource_class.new(attrs)
5050
end
51-
52-
def clean_up_passwords(resource)
53-
controller.send(:clean_up_passwords, resource)
54-
end
5551
end
5652
end
5753
end

lib/graphql_devise/rails/routes.rb

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class Mapper
1212

1313
def mount_graphql_devise_for(resource, options = {})
1414
default_operations = GraphqlDevise::DefaultOperations::MUTATIONS.merge(GraphqlDevise::DefaultOperations::QUERIES)
15+
mapping_name = resource.underscore.tr('/', '_').to_sym
1516

1617
# clean_options responds to all keys defined in GraphqlDevise::MountMethod::SUPPORTED_OPTIONS
1718
clean_options = GraphqlDevise::MountMethod::OptionSanitizer.new(options).call!
@@ -32,20 +33,18 @@ def mount_graphql_devise_for(resource, options = {})
3233
skip: DEVISE_OPERATIONS
3334
)
3435

35-
devise_scope resource.underscore.tr('/', '_').to_sym do
36-
post clean_options.at, to: 'graphql_devise/graphql#auth'
37-
get clean_options.at, to: 'graphql_devise/graphql#auth'
38-
end
36+
post clean_options.at, to: 'graphql_devise/graphql#auth'
37+
get clean_options.at, to: 'graphql_devise/graphql#auth'
3938

4039
# Avoid routes reload done by Devise
41-
return if GraphqlDevise.resource_mounted?(resource)
40+
return if GraphqlDevise.resource_mounted?(mapping_name)
4241

4342
authenticatable_type = clean_options.authenticatable_type.presence ||
4443
"Types::#{resource}Type".safe_constantize ||
4544
GraphqlDevise::Types::AuthenticatableType
4645

4746
prepared_mutations = GraphqlDevise::MountMethod::OperationPreparer.new(
48-
resource: resource,
47+
mapping_name: mapping_name,
4948
custom: clean_options.operations,
5049
additional_operations: clean_options.additional_mutations,
5150
preparer: GraphqlDevise::MountMethod::OperationPreparers::MutationFieldSetter.new(authenticatable_type),
@@ -59,7 +58,7 @@ def mount_graphql_devise_for(resource, options = {})
5958
end
6059

6160
prepared_queries = GraphqlDevise::MountMethod::OperationPreparer.new(
62-
resource: resource,
61+
mapping_name: mapping_name,
6362
custom: clean_options.operations,
6463
additional_operations: clean_options.additional_queries,
6564
preparer: GraphqlDevise::MountMethod::OperationPreparers::ResolverTypeSetter.new(authenticatable_type),
@@ -72,9 +71,9 @@ def mount_graphql_devise_for(resource, options = {})
7271
GraphqlDevise::Types::QueryType.field(action, resolver: resolver)
7372
end
7473

75-
Devise.mailer.helper(GraphqlDevise::MailerHelper)
74+
GraphqlDevise.add_mapping(mapping_name, resource.constantize)
7675

77-
GraphqlDevise.mount_resource(resource)
76+
Devise.mailer.helper(GraphqlDevise::MailerHelper)
7877
end
7978
end
8079
end

0 commit comments

Comments
 (0)