Skip to content

Commit 7cb6072

Browse files
committed
Rename controller concern, add context method, add more test scenarios
1 parent 6898d21 commit 7cb6072

11 files changed

Lines changed: 165 additions & 59 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ In our example our model is `User`, so it would look like this:
222222
# app/controllers/my_controller.rb
223223

224224
class MyController < ApplicationController
225-
include GraphqlDevise::Concerns::SetUserByToken
225+
include GraphqlDevise::Concerns::SetResourceByToken
226226

227227
before_action :authenticate_user!
228228

app/controllers/graphql_devise/concerns/set_user_by_token.rb renamed to app/controllers/graphql_devise/concerns/set_resource_by_token.rb

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
11
module GraphqlDevise
22
module Concerns
3-
SetUserByToken = DeviseTokenAuth::Concerns::SetUserByToken
3+
SetResourceByToken = DeviseTokenAuth::Concerns::SetUserByToken
44

5-
SetUserByToken.module_eval do
5+
DeviseTokenAuth::Concerns::SetUserByToken.module_eval do
66
attr_accessor :client_id, :token, :resource
77

8+
alias_method :set_resource_by_token, :set_user_by_token
9+
10+
def graphql_context
11+
{
12+
current_resource: @resource,
13+
controller: self
14+
}
15+
end
16+
817
def build_redirect_headers(access_token, client, redirect_header_options = {})
918
{
1019
DeviseTokenAuth.headers_names[:"access-token"] => access_token,

app/controllers/graphql_devise/graphql_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
module GraphqlDevise
44
class GraphqlController < ApplicationController
5-
include GraphqlDevise::Concerns::SetUserByToken
5+
include GraphqlDevise::Concerns::SetResourceByToken
66

77
def auth
88
result = if params[:_json]

lib/generators/graphql_devise/install_generator.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def execute_dta_installer
2020
end
2121
gsub_file(
2222
'app/controllers/application_controller.rb',
23-
'GraphqlDevise::Concerns::SetUserByToken',
23+
'GraphqlDevise::Concerns::SetResourceByToken',
2424
'DeviseTokenAuth::Concerns::SetUserByToken'
2525
)
2626

@@ -53,7 +53,7 @@ def replace_controller_concern
5353
gsub_file(
5454
'app/controllers/application_controller.rb',
5555
/^\s+include DeviseTokenAuth::Concerns::SetUserByToken/,
56-
' include GraphqlDevise::Concerns::SetUserByToken'
56+
' include GraphqlDevise::Concerns::SetResourceByToken'
5757
)
5858
end
5959

lib/graphql_devise/schema_plugin.rb

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,10 @@ def trace(event, trace_data)
2424
field = traced_field(trace_data)
2525
provided_value = authenticate_option(field, trace_data)
2626

27-
if (!provided_value.nil? && provided_value) || @authenticate_default
28-
raise_on_missing_resource(
29-
context(trace_data),
30-
field
31-
)
27+
if !provided_value.nil?
28+
raise_on_missing_resource(context(trace_data), field) if provided_value
29+
elsif @authenticate_default
30+
raise_on_missing_resource(context(trace_data), field)
3231
end
3332

3433
yield
@@ -78,7 +77,7 @@ def load_fields
7877
@resource_loaders.each do |resource_loader|
7978
raise Error, 'Invalid resource loader instance' unless resource_loader.instance_of?(GraphqlDevise::ResourceLoader)
8079

81-
resource_loader.call(@query, @mutation, false)
80+
resource_loader.call(@query, @mutation)
8281
end
8382
end
8483
end

spec/dummy/app/controllers/api/v1/graphql_controller.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
module Api
22
module V1
33
class GraphqlController < ApplicationController
4-
include GraphqlDevise::Concerns::SetUserByToken
4+
include GraphqlDevise::Concerns::SetResourceByToken
55

6-
before_action -> { set_user_by_token(:user) }
6+
before_action -> { set_resource_by_token(:user) }
77

88
def graphql
9-
render json: DummySchema.execute(params[:query], context: { current_resource: @resource, controller: self })
9+
render json: DummySchema.execute(params[:query], context: graphql_context)
1010
end
1111

1212
def interpreter
13-
render json: InterpreterSchema.execute(params[:query], context: { current_resource: @resource, controller: self })
13+
render json: InterpreterSchema.execute(params[:query], context: graphql_context)
1414
end
1515

1616
private

spec/dummy/app/graphql/dummy_schema.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
class DummySchema < GraphQL::Schema
2-
use GraphqlDevise::SchemaPlugin.new(query: Types::QueryType)
2+
use GraphqlDevise::SchemaPlugin.new(
3+
query: Types::QueryType,
4+
mutation: Types::MutationType,
5+
resource_loaders: [
6+
GraphqlDevise::ResourceLoader.new('User', only: [:login, :confirm_account]),
7+
GraphqlDevise::ResourceLoader.new('Guest', only: [:logout])
8+
]
9+
)
310

411
mutation(Types::MutationType)
512
query(Types::QueryType)

spec/dummy/app/graphql/interpreter_schema.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ class InterpreterSchema < GraphQL::Schema
22
use GraphQL::Execution::Interpreter if Gem::Version.new(GraphQL::VERSION) >= Gem::Version.new('1.9.0')
33
use GraphQL::Analysis::AST if Gem::Version.new(GraphQL::VERSION) >= Gem::Version.new('1.10.0')
44

5-
use GraphqlDevise::SchemaPlugin.new(query: Types::QueryType)
5+
use GraphqlDevise::SchemaPlugin.new(query: Types::QueryType, authenticate_default: false)
66

77
mutation(Types::MutationType)
88
query(Types::QueryType)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
module Types
22
class QueryType < Types::BaseObject
33
field :user, resolver: Resolvers::UserShow
4+
field :public_field, String, null: false, authenticate: false
5+
field :private_field, String, null: false, authenticate: true
6+
7+
def public_field
8+
'Field does not require authentication'
9+
end
10+
11+
def private_field
12+
'Field will always require authentication'
13+
end
414
end
515
end

spec/generators/graphql_devise/install_generator_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
assert_file 'app/models/user.rb', /^\s{2}devise :.+include GraphqlDevise::Concerns::Model/m
3434

35-
assert_file 'app/controllers/application_controller.rb', /^\s{2}include GraphqlDevise::Concerns::SetUserByToken/
35+
assert_file 'app/controllers/application_controller.rb', /^\s{2}include GraphqlDevise::Concerns::SetResourceByToken/
3636
end
3737
end
3838

@@ -51,7 +51,7 @@
5151

5252
assert_file 'app/models/admin.rb', /^\s{2}devise :.+include GraphqlDevise::Concerns::Model/m
5353

54-
assert_file 'app/controllers/application_controller.rb', /^\s{2}include GraphqlDevise::Concerns::SetUserByToken/
54+
assert_file 'app/controllers/application_controller.rb', /^\s{2}include GraphqlDevise::Concerns::SetResourceByToken/
5555
end
5656
end
5757

0 commit comments

Comments
 (0)