graphql_rails 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/graphql_rails/attribute.rb +22 -16
- data/lib/graphql_rails/controller/action.rb +28 -2
- data/lib/graphql_rails/controller/action_configuration.rb +9 -0
- data/lib/graphql_rails/controller/controller_function.rb +11 -7
- data/lib/graphql_rails/errors/error.rb +6 -0
- data/lib/graphql_rails/model/configuration.rb +11 -4
- data/lib/graphql_rails/model/graphql_type_builder.rb +2 -6
- data/lib/graphql_rails/router/resource_routes_builder.rb +1 -1
- data/lib/graphql_rails/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20a26e41a67193a0518f0883d6437afccaca80ccfdad3d633e8b75b101f386e5
|
4
|
+
data.tar.gz: c8731427ea2d337ab81032558b4838a27dfb3e90eca7fdf7b77ccd30df2795fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04d7c8d897f828cfab27a7f55dc894689dd67fc06512d9f8a9ae2a2f45615fbcdbbebf4b6ed3e3314c514f5ad74aadb0816b11f25dbb36f74a54685e9ed7173c
|
7
|
+
data.tar.gz: 66a91e7cf1fe70cf4e604aad2660a3907ab65e57f68d40273ced867b2e2623f77ccb7d806c687e4a7dbb35b1b0dd8de93e76e0b33973594ce827a1b1451208dc
|
data/Gemfile.lock
CHANGED
@@ -6,20 +6,17 @@ require 'graphql_rails/attribute/attribute_type_parser'
|
|
6
6
|
module GraphqlRails
|
7
7
|
# contains info about single graphql attribute
|
8
8
|
class Attribute
|
9
|
-
attr_reader :name, :graphql_field_type, :property, :type_name
|
9
|
+
attr_reader :name, :graphql_field_type, :property, :type_name, :description
|
10
10
|
|
11
|
-
def initialize(name, type = nil,
|
12
|
-
@
|
11
|
+
def initialize(name, type = nil, description: nil, property: name)
|
12
|
+
@original_name = name.to_s
|
13
|
+
@name = @original_name.tr('!', '')
|
13
14
|
@type_name = type.to_s
|
14
15
|
@graphql_field_type = parse_type(type || type_by_attribute_name)
|
15
|
-
@
|
16
|
+
@description = description
|
16
17
|
@property = property.to_s
|
17
18
|
end
|
18
19
|
|
19
|
-
def hidden?
|
20
|
-
@hidden
|
21
|
-
end
|
22
|
-
|
23
20
|
def field_name
|
24
21
|
field =
|
25
22
|
if name.end_with?('?')
|
@@ -31,17 +28,26 @@ module GraphqlRails
|
|
31
28
|
field.camelize(:lower)
|
32
29
|
end
|
33
30
|
|
31
|
+
def field_args
|
32
|
+
[field_name, graphql_field_type, { property: property.to_sym, description: description }]
|
33
|
+
end
|
34
|
+
|
34
35
|
private
|
35
36
|
|
37
|
+
attr_reader :original_name
|
38
|
+
|
36
39
|
def type_by_attribute_name
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
40
|
+
type = \
|
41
|
+
case name
|
42
|
+
when 'id', /_id\Z/
|
43
|
+
GraphQL::ID_TYPE
|
44
|
+
when /\?\Z/
|
45
|
+
GraphQL::BOOLEAN_TYPE
|
46
|
+
else
|
47
|
+
GraphQL::STRING_TYPE
|
48
|
+
end
|
49
|
+
|
50
|
+
original_name['!'] ? type.to_non_null_type : type
|
45
51
|
end
|
46
52
|
|
47
53
|
def parse_type(type)
|
@@ -1,12 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'active_support/core_ext/string/inflections'
|
4
|
+
require 'graphql_rails/errors/error'
|
5
|
+
require 'graphql_rails/model'
|
4
6
|
require_relative 'request'
|
5
7
|
|
6
8
|
module GraphqlRails
|
7
9
|
class Controller
|
8
10
|
# analyzes route and extracts controller action related data
|
9
11
|
class Action
|
12
|
+
class MissingConfigurationError < GraphqlRails::Error; end
|
13
|
+
|
10
14
|
def initialize(route)
|
11
15
|
@route = route
|
12
16
|
end
|
@@ -27,11 +31,17 @@ module GraphqlRails
|
|
27
31
|
@name ||= action_relative_path.split('#').last
|
28
32
|
end
|
29
33
|
|
34
|
+
def description
|
35
|
+
action_config.description
|
36
|
+
end
|
37
|
+
|
30
38
|
private
|
31
39
|
|
32
40
|
attr_reader :route
|
33
41
|
|
34
42
|
def default_inner_return_type
|
43
|
+
raise_missing_return_type_error if model_graphql_type.nil?
|
44
|
+
|
35
45
|
if action_config.can_return_nil?
|
36
46
|
model_graphql_type
|
37
47
|
else
|
@@ -39,6 +49,15 @@ module GraphqlRails
|
|
39
49
|
end
|
40
50
|
end
|
41
51
|
|
52
|
+
def raise_missing_return_type_error
|
53
|
+
error_message = \
|
54
|
+
"Return type for #{route.path.inspect} is not defined. " \
|
55
|
+
"To do so, add `action(:#{name}).returns(YourType)` in #{controller.name} " \
|
56
|
+
"or make sure that you have model named #{namespaced_model_name}"
|
57
|
+
|
58
|
+
raise MissingConfigurationError, error_message
|
59
|
+
end
|
60
|
+
|
42
61
|
def default_type
|
43
62
|
type = default_inner_return_type
|
44
63
|
type = type.to_list_type.to_non_null_type if route.collection?
|
@@ -62,7 +81,7 @@ module GraphqlRails
|
|
62
81
|
end
|
63
82
|
|
64
83
|
def action_model
|
65
|
-
namespace =
|
84
|
+
namespace = namespaced_model_name.split('::')
|
66
85
|
model_name = namespace.pop
|
67
86
|
model = nil
|
68
87
|
|
@@ -71,7 +90,7 @@ module GraphqlRails
|
|
71
90
|
namespace.pop
|
72
91
|
end
|
73
92
|
|
74
|
-
model || model_name
|
93
|
+
model || namespaced_model(namespace, model_name)
|
75
94
|
end
|
76
95
|
|
77
96
|
def namespaced_model(namespace, model_name)
|
@@ -81,7 +100,14 @@ module GraphqlRails
|
|
81
100
|
nil
|
82
101
|
end
|
83
102
|
|
103
|
+
def namespaced_model_name
|
104
|
+
namespaced_controller_name.singularize.classify
|
105
|
+
end
|
106
|
+
|
84
107
|
def model_graphql_type
|
108
|
+
return unless action_model
|
109
|
+
return unless action_model < GraphqlRails::Model
|
110
|
+
|
85
111
|
action_model.graphql.graphql_type
|
86
112
|
end
|
87
113
|
end
|
@@ -20,19 +20,23 @@ module GraphqlRails
|
|
20
20
|
def self.from_route(route)
|
21
21
|
action = Action.new(route)
|
22
22
|
|
23
|
-
|
24
|
-
action.arguments.each do |attribute|
|
25
|
-
argument(attribute.field_name, attribute.graphql_field_type)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
action_function.new(
|
23
|
+
action_function_class(action).new(
|
30
24
|
controller: action.controller,
|
31
25
|
action_name: action.name,
|
32
26
|
type: action.return_type
|
33
27
|
)
|
34
28
|
end
|
35
29
|
|
30
|
+
def self.action_function_class(action)
|
31
|
+
Class.new(self) do
|
32
|
+
description(action.description)
|
33
|
+
|
34
|
+
action.arguments.each do |attribute|
|
35
|
+
argument(attribute.field_name, attribute.graphql_field_type)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
36
40
|
def call(object, inputs, ctx)
|
37
41
|
request = Request.new(object, inputs, ctx)
|
38
42
|
controller.new(request).call(action_name)
|
@@ -18,12 +18,19 @@ module GraphqlRails
|
|
18
18
|
@name ||= type_name
|
19
19
|
end
|
20
20
|
|
21
|
-
def description(
|
22
|
-
@description
|
21
|
+
def description(new_description = nil)
|
22
|
+
@description = new_description if new_description
|
23
|
+
@description
|
23
24
|
end
|
24
25
|
|
25
|
-
def attribute(attribute_name, type: nil,
|
26
|
-
attributes[attribute_name.to_s] =
|
26
|
+
def attribute(attribute_name, type: nil, description: nil, property: attribute_name)
|
27
|
+
attributes[attribute_name.to_s] = \
|
28
|
+
Attribute.new(
|
29
|
+
attribute_name,
|
30
|
+
type,
|
31
|
+
description: description,
|
32
|
+
property: property
|
33
|
+
)
|
27
34
|
end
|
28
35
|
|
29
36
|
def graphql_type
|
@@ -13,14 +13,14 @@ module GraphqlRails
|
|
13
13
|
def call
|
14
14
|
type_name = name
|
15
15
|
type_description = description
|
16
|
-
type_attributes =
|
16
|
+
type_attributes = attributes
|
17
17
|
|
18
18
|
GraphQL::ObjectType.define do
|
19
19
|
name(type_name)
|
20
20
|
description(type_description)
|
21
21
|
|
22
22
|
type_attributes.each_value do |attribute|
|
23
|
-
field(attribute.
|
23
|
+
field(*attribute.field_args)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
@@ -28,10 +28,6 @@ module GraphqlRails
|
|
28
28
|
private
|
29
29
|
|
30
30
|
attr_reader :model_configuration, :attributes, :name, :description
|
31
|
-
|
32
|
-
def visible_attributes
|
33
|
-
attributes.reject { |_name, attribute| attribute.hidden? }
|
34
|
-
end
|
35
31
|
end
|
36
32
|
end
|
37
33
|
end
|
@@ -63,7 +63,7 @@ module GraphqlRails
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def build_route(builder, action, prefix: action, on: :member, **custom_options)
|
66
|
-
action_options = options.merge(custom_options)
|
66
|
+
action_options = options.merge(custom_options).merge(on: on)
|
67
67
|
action_name = [prefix, resource_name(on)].reject(&:empty?).join('_')
|
68
68
|
builder.new(action_name, to: "#{name}##{action}", **action_options)
|
69
69
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Povilas Jurčys
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
11
|
+
date: 2018-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: graphql
|
@@ -111,6 +111,7 @@ files:
|
|
111
111
|
- lib/graphql_rails/controller/configuration.rb
|
112
112
|
- lib/graphql_rails/controller/controller_function.rb
|
113
113
|
- lib/graphql_rails/controller/request.rb
|
114
|
+
- lib/graphql_rails/errors/error.rb
|
114
115
|
- lib/graphql_rails/errors/execution_error.rb
|
115
116
|
- lib/graphql_rails/errors/validation_error.rb
|
116
117
|
- lib/graphql_rails/model.rb
|