ibrain-core 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/ibrain/base_controller.rb +0 -8
- data/app/controllers/ibrain/core/graphql_controller.rb +0 -1
- data/app/graphql/ibrain/base_schema.rb +1 -1
- data/app/graphql/ibrain/extentions/session_required.rb +20 -0
- data/app/graphql/ibrain/types/base_api_connection.rb +16 -0
- data/app/graphql/ibrain/types/base_api_edge.rb +10 -0
- data/app/graphql/ibrain/types/base_api_field.rb +15 -0
- data/app/graphql/ibrain/types/base_api_object.rb +14 -0
- data/lib/generators/ibrain/install/templates/graphql/types/mutation_type.rb.tt +10 -2
- data/lib/generators/ibrain/install/templates/graphql/types/query_type.rb.tt +4 -2
- data/lib/ibrain/core/version.rb +2 -2
- metadata +7 -3
- data/app/graphql/ibrain/types/base_query_type.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0accd0585dbb8b751342cfbeae014e22ef41b75b56bb3aba37f2071813307344
|
4
|
+
data.tar.gz: b5e922dea8ec2515d5ee390271d04e9ba879d88d0b629f54868420d46771386e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be6f2b3e72bdba22100743dfa74b99b001ab17f5c4ebf3cc4218ab776667fc3761ad7db01326de8ed4c0d9cf5362f35cf66bbde2260fc943e72327e81a8557b0
|
7
|
+
data.tar.gz: 47dd41b984584ca4e3bc820e9a07b18eafcbcd8312f5ccad9c03c322ca49ff56cc2bf43ac1d1360db61f87dca904cfb61edac157b6527ae94ce746e1224a2abf
|
@@ -5,7 +5,6 @@ module Ibrain
|
|
5
5
|
class GraphqlController < ::Ibrain::BaseController
|
6
6
|
include Devise::Controllers::ScopedViews
|
7
7
|
|
8
|
-
before_action :authenticate_user!, unless: :skip_operations
|
9
8
|
before_action :map_user_class_to_request
|
10
9
|
|
11
10
|
helpers = %w(resource scope_name resource_name signed_in_resource
|
@@ -6,7 +6,7 @@ module Ibrain
|
|
6
6
|
|
7
7
|
use GraphQL::Guard.new(
|
8
8
|
policy_object: ::Ibrain::Config.graphql_policy.safe_constantize,
|
9
|
-
not_authorized: ->(type, field) { raise IbrainErrors::
|
9
|
+
not_authorized: ->(type, field) { raise IbrainErrors::PermissionError.new("You not have permission to access #{type}.#{field}") }
|
10
10
|
)
|
11
11
|
|
12
12
|
# Union and Interface Resolution
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ibrain
|
4
|
+
module Extentions
|
5
|
+
class SessionRequired < GraphQL::Schema::FieldExtension
|
6
|
+
def resolve(object:, arguments:, **rest)
|
7
|
+
raise ActionController::InvalidAuthenticityToken, I18n.t('ibrain.errors.session.invalid_session') if is_invalid_session(object)
|
8
|
+
|
9
|
+
# yield the current time as `memo`
|
10
|
+
yield(object, arguments, rest)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def is_invalid_session(object)
|
16
|
+
object.try(:contect).try(:fetch, :current_user, nil).blank? && options.try(:fetch, :session_required, false)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ibrain
|
4
|
+
module Types
|
5
|
+
class BaseApiConnection < Types::BaseObject
|
6
|
+
# add `nodes` and `pageInfo` fields, as well as `edge_type(...)` and `node_nullable(...)` overrides
|
7
|
+
include GraphQL::Types::Relay::ConnectionBehaviors
|
8
|
+
|
9
|
+
field :total_count, Integer, null: false, camelize: false
|
10
|
+
|
11
|
+
def total_count
|
12
|
+
object.items.size
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ibrain
|
4
|
+
module Types
|
5
|
+
class BaseApiField < GraphQL::Schema::Field
|
6
|
+
argument_class ::Ibrain::Types::BaseArgument
|
7
|
+
|
8
|
+
def initialize(*args, session_required: true, **kwargs, &block)
|
9
|
+
super(*args, camelize: false, **kwargs, &block)
|
10
|
+
|
11
|
+
extension(Ibrain::Extentions::SessionRequired, session_required: session_required) if session_required
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ibrain
|
4
|
+
module Types
|
5
|
+
class BaseApiObject < GraphQL::Schema::Object
|
6
|
+
include GraphQL::Relay::Node
|
7
|
+
|
8
|
+
edge_type_class(Ibrain::Types::BaseApiEdge)
|
9
|
+
connection_type_class(Ibrain::Types::BaseApiConnection)
|
10
|
+
|
11
|
+
field_class Ibrain::Types::BaseApiField
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,14 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Types
|
4
|
-
class MutationType < Ibrain::Types::
|
4
|
+
class MutationType < Ibrain::Types::BaseApiObject
|
5
5
|
description 'Define all mutation for client'
|
6
6
|
|
7
7
|
# TODO: remove me
|
8
|
-
|
8
|
+
# Default session_required is true, set false if yout want to skip authenticated
|
9
|
+
field :test_authenticated_field, , String, null: false,
|
9
10
|
description: 'An example field added by the generator'
|
11
|
+
|
12
|
+
field :test_field, String, null: false,
|
13
|
+
description: 'An example field added by the generator', session_required: false
|
10
14
|
def test_field
|
11
15
|
'Hello World'
|
12
16
|
end
|
17
|
+
|
18
|
+
def test_authenticated_field
|
19
|
+
'Im logged in!'
|
20
|
+
end
|
13
21
|
end
|
14
22
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Types
|
4
|
-
class QueryType < Ibrain::Types::
|
4
|
+
class QueryType < Ibrain::Types::BaseApiObject
|
5
5
|
description 'Define all resolver for client'
|
6
6
|
|
7
7
|
# Add `node(id: ID!) and `nodes(ids: [ID!]!)`
|
@@ -9,9 +9,11 @@ module Types
|
|
9
9
|
include GraphQL::Types::Relay::HasNodesField
|
10
10
|
|
11
11
|
# Add root-level fields here.
|
12
|
+
# Default session_required is true, set false if yout want to skip authenticated
|
12
13
|
# They will be entry points for queries on your schema.
|
13
14
|
|
14
15
|
# Example with user resolvers
|
15
|
-
# field :
|
16
|
+
# field :authenticated_users, resolver: Resolvers::UsersResolver
|
17
|
+
# field :users, resolver: Resolvers::UsersResolver, session_required: false
|
16
18
|
end
|
17
19
|
end
|
data/lib/ibrain/core/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ibrain-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tai Nguyen Van
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-01-
|
11
|
+
date: 2022-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord-session_store
|
@@ -186,6 +186,7 @@ files:
|
|
186
186
|
- app/controllers/ibrain/core/graphql_controller.rb
|
187
187
|
- app/graphql/ibrain/base_schema.rb
|
188
188
|
- app/graphql/ibrain/extentions/default_value.rb
|
189
|
+
- app/graphql/ibrain/extentions/session_required.rb
|
189
190
|
- app/graphql/ibrain/interfaces/base_interface.rb
|
190
191
|
- app/graphql/ibrain/interfaces/person_interface.rb
|
191
192
|
- app/graphql/ibrain/interfaces/record_interface.rb
|
@@ -198,6 +199,10 @@ files:
|
|
198
199
|
- app/graphql/ibrain/resolvers/base_resolver.rb
|
199
200
|
- app/graphql/ibrain/types/aggregate_type.rb
|
200
201
|
- app/graphql/ibrain/types/attribute_type.rb
|
202
|
+
- app/graphql/ibrain/types/base_api_connection.rb
|
203
|
+
- app/graphql/ibrain/types/base_api_edge.rb
|
204
|
+
- app/graphql/ibrain/types/base_api_field.rb
|
205
|
+
- app/graphql/ibrain/types/base_api_object.rb
|
201
206
|
- app/graphql/ibrain/types/base_argument.rb
|
202
207
|
- app/graphql/ibrain/types/base_connection.rb
|
203
208
|
- app/graphql/ibrain/types/base_edge.rb
|
@@ -207,7 +212,6 @@ files:
|
|
207
212
|
- app/graphql/ibrain/types/base_interface.rb
|
208
213
|
- app/graphql/ibrain/types/base_node.rb
|
209
214
|
- app/graphql/ibrain/types/base_object.rb
|
210
|
-
- app/graphql/ibrain/types/base_query_type.rb
|
211
215
|
- app/graphql/ibrain/types/base_scalar.rb
|
212
216
|
- app/graphql/ibrain/types/base_union.rb
|
213
217
|
- app/graphql/ibrain/types/filter_type.rb
|
@@ -1,14 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Ibrain
|
4
|
-
module Types
|
5
|
-
class BaseQueryType < Types::BaseObject
|
6
|
-
# Add `node(id: ID!) and `nodes(ids: [ID!]!)`
|
7
|
-
include GraphQL::Types::Relay::HasNodeField
|
8
|
-
include GraphQL::Types::Relay::HasNodesField
|
9
|
-
|
10
|
-
# Add root-level fields here.
|
11
|
-
# They will be entry points for queries on your schema.
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|