graphql-api 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -0
- data/lib/graphql/api/policy.rb +37 -0
- data/lib/graphql/api/resolvers/field.rb +12 -1
- data/lib/graphql/api/resolvers/model_create_mutation.rb +14 -2
- data/lib/graphql/api/resolvers/model_delete_mutation.rb +14 -1
- data/lib/graphql/api/resolvers/model_find_query.rb +12 -2
- data/lib/graphql/api/resolvers/model_update_mutation.rb +14 -1
- data/lib/graphql/api/schema.rb +3 -1
- data/lib/graphql/api/unauthorized_exception.rb +4 -0
- data/lib/graphql/api/version.rb +1 -1
- data/lib/graphql/api.rb +1 -0
- metadata +8 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95f514ccff92debe339818cb597bb3be03a46537
|
4
|
+
data.tar.gz: 7032b93c8e4c5abefdf09e434ad01ef9f6c2fb01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 207a89f484b7dab769130910326067f0fa08bc0b83b843c28cb577ae952c631b3ce024c5c2b5e160b43107bc82870b2c53567432fa6b4897add62a77e6addb93
|
7
|
+
data.tar.gz: bf7290f3e1397193d4d14edc4d456508f4270dc8195bb74701428475a9b27f6f576490947de824470d786f437a95720de66d607ca0e178ae357d0c496b3596ad
|
data/README.md
CHANGED
@@ -149,6 +149,17 @@ GraphQL-Api will load in all models, query objects and commands from the rails
|
|
149
149
|
app directory automatically. If you store these in a different location
|
150
150
|
you can pass them in directly to the new command.
|
151
151
|
|
152
|
+
### Policy Objects
|
153
|
+
|
154
|
+
Policy objects can be instantiated for accessing models. These objects
|
155
|
+
should meet the following interface methods.
|
156
|
+
|
157
|
+
##### CRUD Policies
|
158
|
+
|
159
|
+
The policy object should return true or false methods for all of the crud
|
160
|
+
options allowing the mutation to take place, ie
|
161
|
+
|
162
|
+
|
152
163
|
### Model Objects
|
153
164
|
|
154
165
|
Model objects are the core return value from GraphQL-Api. They can be a plain
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "graphql/api/unauthorized_exception"
|
2
|
+
|
3
|
+
module GraphQL::Api
|
4
|
+
class Policy
|
5
|
+
attr_reader :ctx, :model
|
6
|
+
|
7
|
+
def initialize(ctx, model)
|
8
|
+
@model = model
|
9
|
+
@ctx = ctx
|
10
|
+
end
|
11
|
+
|
12
|
+
def user
|
13
|
+
ctx[:current_user]
|
14
|
+
end
|
15
|
+
|
16
|
+
def create?
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
20
|
+
def update?
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
def destroy?
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
def read?
|
29
|
+
true
|
30
|
+
end
|
31
|
+
|
32
|
+
def unauthorized!(msg=nil)
|
33
|
+
raise UnauthorizedException.new(msg)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -5,10 +5,21 @@ module GraphQL::Api
|
|
5
5
|
def initialize(model, name)
|
6
6
|
@model = model
|
7
7
|
@name = name
|
8
|
+
@policy_class = "#{model.name}Policy".safe_constantize
|
8
9
|
end
|
9
10
|
|
10
11
|
def call(obj, args, ctx)
|
11
|
-
if
|
12
|
+
if @policy_class
|
13
|
+
policy = @policy_class.new(ctx[:current_user], obj, ctx)
|
14
|
+
return nil unless policy.read?
|
15
|
+
|
16
|
+
if policy.respond_to?("access_#{@name}?")
|
17
|
+
obj.send(@name) if policy.send("access_#{@name}?")
|
18
|
+
else
|
19
|
+
obj.send(@name)
|
20
|
+
end
|
21
|
+
obj.send(@name) if policy.respond_to?("access_#{@name}?")
|
22
|
+
elsif obj.respond_to?("access_#{@name}?")
|
12
23
|
obj.send(@name) if obj.send("access_#{@name}?", ctx)
|
13
24
|
else
|
14
25
|
obj.send(@name)
|
@@ -2,13 +2,25 @@ module GraphQL::Api
|
|
2
2
|
module Resolvers
|
3
3
|
class ModelCreateMutation
|
4
4
|
|
5
|
-
def initialize(model)
|
5
|
+
def initialize(model, policy=nil)
|
6
6
|
@model = model
|
7
|
+
@policy_class = "#{model.name}Policy".safe_constantize
|
7
8
|
end
|
8
9
|
|
9
10
|
def call(inputs, ctx)
|
11
|
+
if @policy_class
|
12
|
+
policy = @policy_class.new(ctx[:current_user], nil, ctx)
|
13
|
+
unless policy.create?
|
14
|
+
return {key => nil}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
10
18
|
item = @model.create!(inputs.to_h)
|
11
|
-
{
|
19
|
+
{key => item}
|
20
|
+
end
|
21
|
+
|
22
|
+
def key
|
23
|
+
@model.name.underscore.to_sym
|
12
24
|
end
|
13
25
|
|
14
26
|
end
|
@@ -4,12 +4,25 @@ module GraphQL::Api
|
|
4
4
|
|
5
5
|
def initialize(model)
|
6
6
|
@model = model
|
7
|
+
@policy_class = "#{model.name}Policy".safe_constantize
|
7
8
|
end
|
8
9
|
|
9
10
|
def call(inputs, ctx)
|
10
11
|
item = @model.find(inputs[:id])
|
12
|
+
|
13
|
+
if @policy_class
|
14
|
+
policy = @policy_class.new(ctx[:current_user], item, ctx)
|
15
|
+
unless policy.destroy?
|
16
|
+
return {key => nil}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
11
20
|
item.destroy!
|
12
|
-
{
|
21
|
+
{key => item}
|
22
|
+
end
|
23
|
+
|
24
|
+
def key
|
25
|
+
@model.name.underscore.to_sym
|
13
26
|
end
|
14
27
|
|
15
28
|
end
|
@@ -4,14 +4,24 @@ module GraphQL::Api
|
|
4
4
|
|
5
5
|
def initialize(model)
|
6
6
|
@model = model
|
7
|
+
@policy_class = "#{model.name}Policy".safe_constantize
|
7
8
|
end
|
8
9
|
|
9
10
|
def call(obj, args, ctx)
|
10
11
|
if @model.respond_to?(:graph_find)
|
11
|
-
@model.graph_find(args, ctx)
|
12
|
+
item = @model.graph_find(args, ctx)
|
12
13
|
else
|
13
|
-
@model.find_by!(args.to_h)
|
14
|
+
item = @model.find_by!(args.to_h)
|
14
15
|
end
|
16
|
+
|
17
|
+
if @policy_class
|
18
|
+
policy = @policy_class.new(ctx[:current_user], item, ctx)
|
19
|
+
unless policy.read?
|
20
|
+
return nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
item
|
15
25
|
end
|
16
26
|
|
17
27
|
end
|
@@ -4,12 +4,25 @@ module GraphQL::Api
|
|
4
4
|
|
5
5
|
def initialize(model)
|
6
6
|
@model = model
|
7
|
+
@policy_class = "#{model.name}Policy".safe_constantize
|
7
8
|
end
|
8
9
|
|
9
10
|
def call(inputs, ctx)
|
10
11
|
item = @model.find(inputs[:id])
|
12
|
+
|
13
|
+
if @policy_class
|
14
|
+
policy = @policy_class.new(ctx[:current_user], item, ctx)
|
15
|
+
unless policy.destroy?
|
16
|
+
return {key => nil}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
11
20
|
item.update!(inputs.to_h)
|
12
|
-
{
|
21
|
+
{key => item}
|
22
|
+
end
|
23
|
+
|
24
|
+
def key
|
25
|
+
@model.name.underscore.to_sym
|
13
26
|
end
|
14
27
|
|
15
28
|
end
|
data/lib/graphql/api/schema.rb
CHANGED
@@ -139,13 +139,15 @@ module GraphQL::Api
|
|
139
139
|
def delete_mutation(model_class)
|
140
140
|
return nil unless model_class < ActiveRecord::Base
|
141
141
|
|
142
|
+
object_types = @types
|
143
|
+
|
142
144
|
GraphQL::Relay::Mutation.define do
|
143
145
|
name "Delete#{model_class.name}"
|
144
146
|
description "Delete #{model_class.name}"
|
145
147
|
|
146
148
|
input_field :id, !types.ID
|
147
149
|
|
148
|
-
return_field
|
150
|
+
return_field model_class.name.underscore.to_sym, object_types[model_class]
|
149
151
|
resolve Resolvers::ModelDeleteMutation.new(model_class)
|
150
152
|
end
|
151
153
|
end
|
data/lib/graphql/api/version.rb
CHANGED
data/lib/graphql/api.rb
CHANGED
metadata
CHANGED
@@ -1,47 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Colin Walker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 5.0.0
|
20
17
|
- - ">="
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
19
|
+
version: 4.2.6
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 5.0.0
|
30
24
|
- - ">="
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
26
|
+
version: 4.2.6
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: graphql
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
|
-
- -
|
31
|
+
- - '='
|
38
32
|
- !ruby/object:Gem::Version
|
39
33
|
version: 0.19.0
|
40
34
|
type: :runtime
|
41
35
|
prerelease: false
|
42
36
|
version_requirements: !ruby/object:Gem::Requirement
|
43
37
|
requirements:
|
44
|
-
- -
|
38
|
+
- - '='
|
45
39
|
- !ruby/object:Gem::Version
|
46
40
|
version: 0.19.0
|
47
41
|
- !ruby/object:Gem::Dependency
|
@@ -71,6 +65,7 @@ files:
|
|
71
65
|
- lib/graphql/api.rb
|
72
66
|
- lib/graphql/api/command_type.rb
|
73
67
|
- lib/graphql/api/helpers.rb
|
68
|
+
- lib/graphql/api/policy.rb
|
74
69
|
- lib/graphql/api/query_type.rb
|
75
70
|
- lib/graphql/api/resolvers/command_mutation.rb
|
76
71
|
- lib/graphql/api/resolvers/field.rb
|
@@ -82,6 +77,7 @@ files:
|
|
82
77
|
- lib/graphql/api/resolvers/query_object_query.rb
|
83
78
|
- lib/graphql/api/schema.rb
|
84
79
|
- lib/graphql/api/schema_error.rb
|
80
|
+
- lib/graphql/api/unauthorized_exception.rb
|
85
81
|
- lib/graphql/api/version.rb
|
86
82
|
homepage: https://github.com/coldog/graphql-api
|
87
83
|
licenses:
|