Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 0 additions & 19 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ workflows:
matrix:
parameters:
ruby-version:
- '2.3'
- '2.4'
- '2.5'
- '2.6'
Expand All @@ -73,24 +72,6 @@ workflows:
- gemfiles/rails7.0_graphql1.12.gemfile
- gemfiles/rails7.0_graphql1.13.gemfile
exclude:
- ruby-version: '2.3'
gemfile: gemfiles/rails6.0_graphql1.11.gemfile
- ruby-version: '2.3'
gemfile: gemfiles/rails6.0_graphql1.12.gemfile
- ruby-version: '2.3'
gemfile: gemfiles/rails6.0_graphql1.13.gemfile
- ruby-version: '2.3'
gemfile: gemfiles/rails6.1_graphql1.11.gemfile
- ruby-version: '2.3'
gemfile: gemfiles/rails6.1_graphql1.12.gemfile
- ruby-version: '2.3'
gemfile: gemfiles/rails6.1_graphql1.13.gemfile
- ruby-version: '2.3'
gemfile: gemfiles/rails7.0_graphql1.11.gemfile
- ruby-version: '2.3'
gemfile: gemfiles/rails7.0_graphql1.12.gemfile
- ruby-version: '2.3'
gemfile: gemfiles/rails7.0_graphql1.13.gemfile
- ruby-version: '2.4'
gemfile: gemfiles/rails6.0_graphql1.11.gemfile
- ruby-version: '2.4'
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,4 @@ README.md.*

.env
/spec/tmp/config/routes.rb
/.byebug_history
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ GQL schema execution like this:
# app/controllers/my_controller.rb

class MyController < ApplicationController
include GraphqlDevise::Concerns::SetUserByToken
include GraphqlDevise::SetUserByToken

def my_action
result = DummySchema.execute(params[:query], context: gql_devise_context(User))
Expand All @@ -399,7 +399,7 @@ end
# app/controllers/my_controller.rb

class MyController < ApplicationController
include GraphqlDevise::Concerns::SetUserByToken
include GraphqlDevise::SetUserByToken

def my_action
result = DummySchema.execute(params[:query], context: gql_devise_context(User, Admin))
Expand Down

This file was deleted.

14 changes: 0 additions & 14 deletions app/controllers/graphql_devise/concerns/set_user_by_token.rb

This file was deleted.

6 changes: 3 additions & 3 deletions app/controllers/graphql_devise/graphql_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@

module GraphqlDevise
class GraphqlController < ApplicationController
include GraphqlDevise::Concerns::SetUserByToken
include SetUserByToken

def auth
result = if params[:_json]
GraphqlDevise::Schema.multiplex(
Schema.multiplex(
params[:_json].map do |param|
{ query: param[:query] }.merge(execute_params(param))
end
)
else
GraphqlDevise::Schema.execute(params[:query], **execute_params(params))
Schema.execute(params[:query], **execute_params(params))
end

render json: result unless performed?
Expand Down
21 changes: 0 additions & 21 deletions app/models/graphql_devise/concerns/additional_model_methods.rb

This file was deleted.

16 changes: 0 additions & 16 deletions app/models/graphql_devise/concerns/model.rb

This file was deleted.

3 changes: 2 additions & 1 deletion graphql_devise.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,12 @@ Gem::Specification.new do |spec|
`git ls-files -z`.split("\x0").select { |f| f.match(%r{^spec/}) }
end

spec.required_ruby_version = '>= 2.3.0'
spec.required_ruby_version = '>= 2.4.4'

spec.add_dependency 'devise_token_auth', '>= 0.1.43', '< 2.0'
spec.add_dependency 'graphql', '>= 1.8', '< 1.14.0'
spec.add_dependency 'rails', '>= 4.2', '< 7.1'
spec.add_dependency 'zeitwerk'

spec.add_development_dependency 'appraisal'
spec.add_development_dependency 'coveralls-ruby', '~> 0.2'
Expand Down
8 changes: 4 additions & 4 deletions lib/generators/graphql_devise/install_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ def execute_dta_installer
if File.exist?(File.expand_path("app/models/#{user_class.underscore}.rb", destination_root))
gsub_file(
"app/models/#{user_class.underscore}.rb",
'GraphqlDevise::Concerns::Model',
'GraphqlDevise::Authenticatable',
'DeviseTokenAuth::Concerns::User'
)
end
gsub_file(
'app/controllers/application_controller.rb',
'GraphqlDevise::Concerns::SetUserByToken',
'GraphqlDevise::SetUserByToken',
'DeviseTokenAuth::Concerns::SetUserByToken'
)

Expand Down Expand Up @@ -54,15 +54,15 @@ def replace_model_concern
gsub_file(
"app/models/#{user_class.underscore}.rb",
/^\s+include DeviseTokenAuth::Concerns::User/,
' include GraphqlDevise::Concerns::Model'
' include GraphqlDevise::Authenticatable'
)
end

def replace_controller_concern
gsub_file(
'app/controllers/application_controller.rb',
/^\s+include DeviseTokenAuth::Concerns::SetUserByToken/,
' include GraphqlDevise::Concerns::SetUserByToken'
' include GraphqlDevise::SetUserByToken'
)
end

Expand Down
53 changes: 28 additions & 25 deletions lib/graphql_devise.rb
Original file line number Diff line number Diff line change
@@ -1,13 +1,40 @@
# frozen_string_literal: true

require 'rails'
require 'rails/generators'
require 'graphql'
require 'devise_token_auth'
require 'zeitwerk'

GraphQL::Field.accepts_definitions(authenticate: GraphQL::Define.assign_metadata_key(:authenticate))
GraphQL::Schema::Field.accepts_definition(:authenticate)

legacy_concerns = ['set_user_by_token', 'model']
loader = Zeitwerk::Loader.for_gem

legacy_concerns.each do |concern_name|
loader.ignore("#{__dir__}/graphql_devise/concerns/legacy/#{concern_name}.rb")
end

loader.collapse("#{__dir__}/graphql_devise/concerns")
loader.collapse("#{__dir__}/graphql_devise/errors")
loader.collapse("#{__dir__}/generators")

loader.inflector.inflect('error_codes' => 'ERROR_CODES')
loader.inflector.inflect('supported_options' => 'SUPPORTED_OPTIONS')

loader.setup

legacy_concerns.each do |concern_name|
require_relative "graphql_devise/concerns/legacy/#{concern_name}"
end

ActionDispatch::Routing::Mapper.include(GraphqlDevise::RouteMounter)

module GraphqlDevise
class Error < StandardError; end

class InvalidMountOptionsError < GraphqlDevise::Error; end
class InvalidMountOptionsError < ::GraphqlDevise::Error; end

@schema_loaded = false
@mounted_resources = []
Expand Down Expand Up @@ -53,27 +80,3 @@ def self.configure_warden_serializer_for_model(model)
end

require 'graphql_devise/engine'
require 'graphql_devise/version'
require 'graphql_devise/errors/error_codes'
require 'graphql_devise/errors/execution_error'
require 'graphql_devise/errors/user_error'
require 'graphql_devise/errors/authentication_error'
require 'graphql_devise/errors/detailed_user_error'

require 'graphql_devise/concerns/controller_methods'
require 'graphql_devise/schema'
require 'graphql_devise/types/authenticatable_type'
require 'graphql_devise/types/credential_type'
require 'graphql_devise/types/mutation_type'
require 'graphql_devise/types/query_type'
require 'graphql_devise/default_operations/mutations'
require 'graphql_devise/default_operations/resolvers'
require 'graphql_devise/resolvers/dummy'

require 'graphql_devise/mount_method/option_sanitizer'
require 'graphql_devise/mount_method/options_validator'
require 'graphql_devise/mount_method/operation_preparer'
require 'graphql_devise/mount_method/operation_sanitizer'

require 'graphql_devise/resource_loader'
require 'graphql_devise/schema_plugin'
48 changes: 48 additions & 0 deletions lib/graphql_devise/concerns/additional_controller_methods.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# frozen_string_literal: true

module GraphqlDevise
module AdditionalControllerMethods
extend ActiveSupport::Concern

included do
attr_accessor :client_id, :token, :resource
end

def gql_devise_context(*models)
{
current_resource: authenticate_model(*models),
controller: self
}
end

def authenticate_model(*models)
models.each do |model|
set_resource_by_token(model)
return @resource if @resource.present?
end

nil
end

def resource_class(resource = nil)
# Return the resource class instead of looking for a Devise mapping if resource is already a resource class
return resource if resource.respond_to?(:find_by)

super
end

def set_resource_by_token(resource)
set_user_by_token(resource)
end

def build_redirect_headers(access_token, client, redirect_header_options = {})
{
DeviseTokenAuth.headers_names[:"access-token"] => access_token,
DeviseTokenAuth.headers_names[:client] => client,
:config => params[:config],
:client_id => client,
:token => access_token
}.merge(redirect_header_options)
end
end
end
23 changes: 23 additions & 0 deletions lib/graphql_devise/concerns/authenticatable.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# frozen_string_literal: true

module GraphqlDevise
module Authenticatable
extend ActiveSupport::Concern

included do
include DeviseTokenAuth::Concerns::User

::GraphqlDevise.configure_warden_serializer_for_model(self)
end

class_methods do
def reconfirmable
devise_modules.include?(:confirmable) && column_names.include?('unconfirmed_email')
end
end

def update_with_email(attributes = {})
Model::WithEmailUpdater.new(self, attributes).call
end
end
end
Loading