graphql 0.15.1 → 0.15.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/graphql/base_type.rb +16 -0
- data/lib/graphql/field.rb +7 -11
- data/lib/graphql/object_type.rb +12 -3
- data/lib/graphql/schema/validation.rb +1 -1
- data/lib/graphql/union_type.rb +14 -1
- data/lib/graphql/version.rb +1 -1
- data/readme.md +1 -0
- data/spec/graphql/schema/validation_spec.rb +2 -2
- data/spec/support/dairy_app.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 06deb0560626e16a3df052a56924a3f541baed38
|
4
|
+
data.tar.gz: 2f8d1ffaca328783f129f9c9c031c5794cd629da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c221077dd7e949a7e021d941f70fb6f7424c3f563ad0c3abdb1473bf94089fb93949ca324bc20d610a3217e18cc8c9e2b4b9dc21e4b490a7b7363de60d7c4d48
|
7
|
+
data.tar.gz: a8b0880ef7498bc53168ba8864857c877d151825aeccfd50e07e1f58ad299c558a8bbda9b0ee0496ec35de274ac301fceef69996b1d99466c568358ef82ac53b
|
data/lib/graphql/base_type.rb
CHANGED
@@ -88,5 +88,21 @@ module GraphQL
|
|
88
88
|
return nil if value.nil?
|
89
89
|
coerce_non_null_input(value)
|
90
90
|
end
|
91
|
+
|
92
|
+
# During schema definition, types can be defined inside procs or as strings.
|
93
|
+
# This function converts it to a type instance
|
94
|
+
# @return [GraphQL::BaseType]
|
95
|
+
def self.resolve_related_type(type_arg)
|
96
|
+
case type_arg
|
97
|
+
when Proc
|
98
|
+
# lazy-eval it
|
99
|
+
type_arg.call
|
100
|
+
when String
|
101
|
+
# Get a constant by this name
|
102
|
+
Object.const_get(type_arg)
|
103
|
+
else
|
104
|
+
type_arg
|
105
|
+
end
|
106
|
+
end
|
91
107
|
end
|
92
108
|
end
|
data/lib/graphql/field.rb
CHANGED
@@ -42,7 +42,7 @@ module GraphQL
|
|
42
42
|
include GraphQL::Define::InstanceDefinable
|
43
43
|
accepts_definitions :name, :description, :resolve, :type, :property, :deprecation_reason, argument: GraphQL::Define::AssignArgument
|
44
44
|
|
45
|
-
attr_accessor :deprecation_reason, :name, :description, :
|
45
|
+
attr_accessor :deprecation_reason, :name, :description, :property
|
46
46
|
attr_reader :resolve_proc
|
47
47
|
|
48
48
|
# @return [String] The name of this field on its {GraphQL::ObjectType} (or {GraphQL::InterfaceType})
|
@@ -71,18 +71,14 @@ module GraphQL
|
|
71
71
|
@resolve_proc = resolve_proc || build_default_resolver
|
72
72
|
end
|
73
73
|
|
74
|
+
def type=(new_return_type)
|
75
|
+
@clean_type = nil
|
76
|
+
@dirty_type = new_return_type
|
77
|
+
end
|
78
|
+
|
74
79
|
# Get the return type for this field.
|
75
80
|
def type
|
76
|
-
|
77
|
-
when Proc
|
78
|
-
# lazy-eval it
|
79
|
-
@type = @type.call
|
80
|
-
when String
|
81
|
-
# Get a constant by this name
|
82
|
-
@type = Object.const_get(@type)
|
83
|
-
else
|
84
|
-
@type
|
85
|
-
end
|
81
|
+
@clean_type ||= GraphQL::BaseType.resolve_related_type(@dirty_type)
|
86
82
|
end
|
87
83
|
|
88
84
|
# You can only set a field's name _once_ -- this to prevent
|
data/lib/graphql/object_type.rb
CHANGED
@@ -22,19 +22,28 @@ module GraphQL
|
|
22
22
|
#
|
23
23
|
class ObjectType < GraphQL::BaseType
|
24
24
|
accepts_definitions :interfaces, field: GraphQL::Define::AssignObjectField
|
25
|
-
attr_accessor :name, :description
|
25
|
+
attr_accessor :name, :description
|
26
26
|
|
27
27
|
# @return [Hash<String, GraphQL::Field>] Map String fieldnames to their {GraphQL::Field} implementations
|
28
28
|
attr_accessor :fields
|
29
29
|
|
30
30
|
def initialize
|
31
31
|
@fields = {}
|
32
|
-
@
|
32
|
+
@dirty_interfaces = []
|
33
33
|
end
|
34
34
|
|
35
35
|
# @param new_interfaces [Array<GraphQL::Interface>] interfaces that this type implements
|
36
36
|
def interfaces=(new_interfaces)
|
37
|
-
@
|
37
|
+
@clean_interfaces = nil
|
38
|
+
@dirty_interfaces = new_interfaces
|
39
|
+
end
|
40
|
+
|
41
|
+
def interfaces
|
42
|
+
@clean_interfaces ||= begin
|
43
|
+
@dirty_interfaces.map { |i_type| GraphQL::BaseType.resolve_related_type(i_type) }
|
44
|
+
rescue
|
45
|
+
@dirty_interfaces
|
46
|
+
end
|
38
47
|
end
|
39
48
|
|
40
49
|
def kind
|
@@ -90,7 +90,7 @@ module GraphQL
|
|
90
90
|
FIELDS_ARE_VALID = Rules.assert_named_items_are_valid("field", -> (type) { type.all_fields })
|
91
91
|
|
92
92
|
HAS_ONE_OR_MORE_POSSIBLE_TYPES = -> (type) {
|
93
|
-
type.possible_types.length
|
93
|
+
type.possible_types.length >= 1 ? nil : "must have at least one possible type"
|
94
94
|
}
|
95
95
|
|
96
96
|
NAME_IS_STRING = Rules.assert_property(:name, String)
|
data/lib/graphql/union_type.rb
CHANGED
@@ -11,7 +11,7 @@ module GraphQL
|
|
11
11
|
#
|
12
12
|
class UnionType < GraphQL::BaseType
|
13
13
|
include GraphQL::BaseType::HasPossibleTypes
|
14
|
-
attr_accessor :name, :description
|
14
|
+
attr_accessor :name, :description
|
15
15
|
accepts_definitions :possible_types, :resolve_type
|
16
16
|
|
17
17
|
def kind
|
@@ -21,5 +21,18 @@ module GraphQL
|
|
21
21
|
def include?(child_type_defn)
|
22
22
|
possible_types.include?(child_type_defn)
|
23
23
|
end
|
24
|
+
|
25
|
+
def possible_types=(new_possible_types)
|
26
|
+
@clean_possible_types = nil
|
27
|
+
@dirty_possible_types = new_possible_types
|
28
|
+
end
|
29
|
+
|
30
|
+
def possible_types
|
31
|
+
@clean_possible_types ||= begin
|
32
|
+
@dirty_possible_types.map { |type| GraphQL::BaseType.resolve_related_type(type) }
|
33
|
+
rescue
|
34
|
+
@dirty_possible_types
|
35
|
+
end
|
36
|
+
end
|
24
37
|
end
|
25
38
|
end
|
data/lib/graphql/version.rb
CHANGED
data/readme.md
CHANGED
@@ -124,6 +124,7 @@ If you're building a backend for [Relay](http://facebook.github.io/relay/), you'
|
|
124
124
|
- Add a complexity validator (reject queries if they're too big)
|
125
125
|
- Add docs for shared behaviors & DRY code
|
126
126
|
- Proper error on unknown directive
|
127
|
+
- Non-nulls should _propagate_ to the next non-null field (all the way up to data, if need be)
|
127
128
|
- __Subscriptions__
|
128
129
|
- This is a good chance to make an `Operation` abstraction of which `query`, `mutation` and `subscription` are members
|
129
130
|
- For a subscription, `graphql` would send an outbound message to the system (allow the host application to manage its own subscriptions via Pusher, ActionCable, whatever)
|
@@ -83,7 +83,7 @@ describe GraphQL::Schema::Validation do
|
|
83
83
|
let(:invalid_interfaces_object) {
|
84
84
|
GraphQL::ObjectType.define do
|
85
85
|
name "InvalidInterfaces"
|
86
|
-
interfaces(
|
86
|
+
interfaces(55)
|
87
87
|
end
|
88
88
|
}
|
89
89
|
let(:invalid_interface_member_object) {
|
@@ -101,7 +101,7 @@ describe GraphQL::Schema::Validation do
|
|
101
101
|
}
|
102
102
|
|
103
103
|
it "requires an Array for interfaces" do
|
104
|
-
assert_error_includes invalid_interfaces_object, "must be an Array of GraphQL::InterfaceType, not a
|
104
|
+
assert_error_includes invalid_interfaces_object, "must be an Array of GraphQL::InterfaceType, not a Fixnum"
|
105
105
|
assert_error_includes invalid_interface_member_object, "must contain GraphQL::InterfaceType, not Symbol"
|
106
106
|
end
|
107
107
|
|
data/spec/support/dairy_app.rb
CHANGED
@@ -27,7 +27,7 @@ end
|
|
27
27
|
CheeseType = GraphQL::ObjectType.define do
|
28
28
|
name "Cheese"
|
29
29
|
description "Cultured dairy product"
|
30
|
-
interfaces [EdibleInterface, AnimalProductInterface]
|
30
|
+
interfaces ["EdibleInterface", -> { AnimalProductInterface }]
|
31
31
|
|
32
32
|
# Can have (name, type, desc)
|
33
33
|
field :id, !types.Int, "Unique identifier"
|
@@ -107,7 +107,7 @@ end
|
|
107
107
|
DairyProductUnion = GraphQL::UnionType.define do
|
108
108
|
name "DairyProduct"
|
109
109
|
description "Kinds of food made from milk"
|
110
|
-
possible_types [MilkType, CheeseType]
|
110
|
+
possible_types ["MilkType", -> { CheeseType }]
|
111
111
|
end
|
112
112
|
|
113
113
|
CowType = GraphQL::ObjectType.define do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.15.
|
4
|
+
version: 0.15.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Mosolgo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: codeclimate-test-reporter
|