graphql 0.15.1 → 0.15.2
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/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
|