Skip to content

Commit e466279

Browse files
Merge pull request #67 from graphql-devise/refactor_routes
Refactor routes mount method
2 parents b56447f + b73d3ca commit e466279

25 files changed

Lines changed: 435 additions & 73 deletions

lib/graphql_devise.rb

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,33 @@
11
require 'rails'
22
require 'graphql'
33
require 'devise_token_auth'
4+
5+
require 'graphql_devise/concerns/controller_methods'
6+
require 'graphql_devise/types/authenticatable_type'
7+
require 'graphql_devise/types/credential_type'
8+
require 'graphql_devise/types/mutation_type'
9+
require 'graphql_devise/types/query_type'
10+
require 'graphql_devise/mutations/base'
11+
require 'graphql_devise/mutations/login'
12+
require 'graphql_devise/mutations/logout'
13+
require 'graphql_devise/mutations/resend_confirmation'
14+
require 'graphql_devise/mutations/send_password_reset'
15+
require 'graphql_devise/mutations/sign_up'
16+
require 'graphql_devise/mutations/update_password'
17+
require 'graphql_devise/resolvers/base'
18+
require 'graphql_devise/resolvers/check_password_token'
19+
require 'graphql_devise/resolvers/confirm_account'
20+
require 'graphql_devise/resolvers/dummy'
21+
422
require 'graphql_devise/engine'
523
require 'graphql_devise/version'
624
require 'graphql_devise/error_codes'
725
require 'graphql_devise/user_error'
826
require 'graphql_devise/detailed_user_error'
9-
require 'graphql_devise/concerns/controller_methods'
27+
require 'graphql_devise/rails/queries_preparer'
28+
require 'graphql_devise/rails/mutations_preparer'
29+
require 'graphql_devise/rails/operation_checker'
30+
require 'graphql_devise/rails/operation_sanitizer'
1031

1132
module GraphqlDevise
1233
class Error < StandardError; end
File renamed without changes.
File renamed without changes.
File renamed without changes.

app/graphql/graphql_devise/mutations/resend_confirmation.rb renamed to lib/graphql_devise/mutations/resend_confirmation.rb

File renamed without changes.

app/graphql/graphql_devise/mutations/send_password_reset.rb renamed to lib/graphql_devise/mutations/send_password_reset.rb

File renamed without changes.
File renamed without changes.
File renamed without changes.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
module GraphqlDevise
2+
class MutationsPreparer
3+
DEFAULT_MUTATIONS = {
4+
login: GraphqlDevise::Mutations::Login,
5+
logout: GraphqlDevise::Mutations::Logout,
6+
sign_up: GraphqlDevise::Mutations::SignUp,
7+
update_password: GraphqlDevise::Mutations::UpdatePassword,
8+
send_password_reset: GraphqlDevise::Mutations::SendPasswordReset,
9+
resend_confirmation: GraphqlDevise::Mutations::ResendConfirmation
10+
}.freeze
11+
12+
def self.call(resource:, mutations:, authenticatable_type:)
13+
new(resource: resource, mutations: mutations, authenticatable_type: authenticatable_type).call
14+
end
15+
16+
def initialize(resource:, mutations:, authenticatable_type:)
17+
@mapping_name = resource.underscore.tr('/', '_').to_sym
18+
@mutations = mutations
19+
@authenticatable_type = authenticatable_type
20+
end
21+
22+
def call
23+
@mutations.each_with_object({}) do |(action, mutation), result|
24+
mapped_action = "#{@mapping_name}_#{action}".to_sym
25+
new_mutation = Class.new(mutation)
26+
new_mutation.graphql_name(mapped_action.to_s.camelize(:upper))
27+
new_mutation.field(:authenticatable, @authenticatable_type, null: true)
28+
new_mutation.instance_variable_set(:@resource_name, @mapping_name)
29+
30+
result[mapped_action] = new_mutation
31+
end
32+
end
33+
end
34+
end
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
module GraphqlDevise
2+
class OperationChecker
3+
def self.call(mutations:, queries:, custom:, only:, skipped:)
4+
new(
5+
mutations: mutations,
6+
queries: queries,
7+
custom: custom,
8+
only: only,
9+
skipped: skipped
10+
).call
11+
end
12+
13+
def initialize(mutations:, queries:, custom:, only:, skipped:)
14+
@mutations = mutations
15+
@queries = queries
16+
@custom = custom
17+
@only = only
18+
@skipped = skipped
19+
end
20+
21+
def call
22+
supported_operations = @mutations.keys + @queries.keys
23+
24+
if [@skipped, @only].all?(&:any?)
25+
raise(
26+
GraphqlDevise::Error,
27+
"Can't specify both `skip` and `only` options when mounting the route."
28+
)
29+
end
30+
31+
@custom.keys.each do |custom_op|
32+
next if supported_operations.include?(custom_op)
33+
34+
raise(
35+
GraphqlDevise::Error,
36+
"Custom operation \"#{custom_op}\" is not supported. Check for typos."
37+
)
38+
end
39+
40+
@skipped.each do |skipped_op|
41+
next if supported_operations.include?(skipped_op)
42+
43+
raise(
44+
GraphqlDevise::Error,
45+
"Trying to skip unsupported operation \"#{skipped_op}\". Check for typos."
46+
)
47+
end
48+
49+
@only.each do |only_op|
50+
next if supported_operations.include?(only_op)
51+
52+
raise(
53+
GraphqlDevise::Error,
54+
"The \"only\" operation \"#{only_op}\" is not supported. Check for typos."
55+
)
56+
end
57+
end
58+
end
59+
end

0 commit comments

Comments
 (0)