hq-graphql 1.0.1 → 1.1.0
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/hq/graphql/resource.rb +1 -1
- data/lib/hq/graphql/resource/mutation.rb +1 -1
- data/lib/hq/graphql/scalars.rb +2 -2
- data/lib/hq/graphql/types/object.rb +34 -0
- data/lib/hq/graphql/version.rb +1 -1
- data/spec/lib/graphql/types/object_spec.rb +96 -0
- metadata +5 -3
- data/lib/hq/graphql/types/json.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa14b61d384dece960be3b49e3ebae1405d36fbf
|
4
|
+
data.tar.gz: aeb81df536b57a6e9477c0d1d7ddadb25e395687
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51693b229e820257b9d1814d500a009e3e010ec5bce8a7b530d56296c31c0872b6b9e1f012d6234bb4a516da59854ef06e63123272cb37e51e02a960ca7024db
|
7
|
+
data.tar.gz: b454283ef63f2fc698aa3990a8fe7c1547cc0aa99cfdfc769b2e23d7d864791031054d9261c050d2cdd6feaef8e24a41f875a934e154a9d2a91579365289c8f3
|
data/lib/hq/graphql/resource.rb
CHANGED
data/lib/hq/graphql/scalars.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require "hq/graphql/types/
|
1
|
+
require "hq/graphql/types/object"
|
2
2
|
require "hq/graphql/types/uuid"
|
3
3
|
|
4
4
|
module HQ
|
5
5
|
module GraphQL
|
6
6
|
module Scalars
|
7
|
-
|
7
|
+
Object = ::HQ::GraphQL::Types::Object
|
8
8
|
UUID = ::HQ::GraphQL::Types::UUID
|
9
9
|
end
|
10
10
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module HQ
|
2
|
+
module GraphQL
|
3
|
+
module Types
|
4
|
+
class Object < ::GraphQL::Schema::Scalar
|
5
|
+
description "Object"
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def coerce_input(value, context)
|
9
|
+
validate_and_return_object(value)
|
10
|
+
end
|
11
|
+
|
12
|
+
def coerce_result(value, context)
|
13
|
+
validate_and_return_object(value)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def validate_and_return_object(value)
|
19
|
+
if validate_object(value)
|
20
|
+
value
|
21
|
+
else
|
22
|
+
raise ::GraphQL::CoercionError, "#{value.inspect} is not a valid Object"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def validate_object(value)
|
27
|
+
value.is_a?(Hash)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/hq/graphql/version.rb
CHANGED
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
describe ::HQ::GraphQL::Types::Object do
|
4
|
+
let(:hql_object_klass) do
|
5
|
+
Class.new(::HQ::GraphQL::Object) do
|
6
|
+
graphql_name "TestQuery"
|
7
|
+
|
8
|
+
field :valid_object, ::HQ::GraphQL::Types::Object, null: false
|
9
|
+
field :invalid_object, ::HQ::GraphQL::Types::Object, null: false
|
10
|
+
|
11
|
+
def valid_object
|
12
|
+
{ name: object.name }
|
13
|
+
end
|
14
|
+
|
15
|
+
def invalid_object
|
16
|
+
:not_an_object
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
let(:query) do
|
22
|
+
Class.new(::HQ::GraphQL::Object) do
|
23
|
+
graphql_name "Query"
|
24
|
+
|
25
|
+
field :advisor, AdvisorType, null: false do
|
26
|
+
argument :filters, ::HQ::GraphQL::Types::Object, required: true
|
27
|
+
end
|
28
|
+
|
29
|
+
def advisor(filters:)
|
30
|
+
Advisor.find_by(filters)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
let(:schema) do
|
36
|
+
Class.new(GraphQL::Schema) do
|
37
|
+
query(Query)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
let(:query_str) do
|
42
|
+
<<-gql
|
43
|
+
query findAdvisor($filters: Object!){
|
44
|
+
advisor(filters: $filters) {
|
45
|
+
validObject
|
46
|
+
}
|
47
|
+
}
|
48
|
+
gql
|
49
|
+
end
|
50
|
+
|
51
|
+
let(:invalid_query_str) do
|
52
|
+
<<-gql
|
53
|
+
query findAdvisor($filters: Object!){
|
54
|
+
advisor(filters: $filters) {
|
55
|
+
invalidObject
|
56
|
+
}
|
57
|
+
}
|
58
|
+
gql
|
59
|
+
end
|
60
|
+
|
61
|
+
let(:advisor) { FactoryBot.create(:advisor) }
|
62
|
+
let(:advisor_filter) { { name: advisor.name } }
|
63
|
+
|
64
|
+
before(:each) do
|
65
|
+
stub_const("AdvisorType", hql_object_klass)
|
66
|
+
stub_const("Query", query)
|
67
|
+
end
|
68
|
+
|
69
|
+
describe ".coerce_result" do
|
70
|
+
it "returns an object" do
|
71
|
+
results = schema.execute(query_str, variables: { filters: advisor_filter })
|
72
|
+
expect(results["data"]["advisor"]["validObject"]).to eql({ name: advisor.name })
|
73
|
+
end
|
74
|
+
|
75
|
+
it "raises an error when returning am invalid object " do
|
76
|
+
expect { schema.execute(invalid_query_str, variables: { filters: advisor_filter }) }.to raise_error(
|
77
|
+
::GraphQL::CoercionError, ":not_an_object is not a valid Object"
|
78
|
+
)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe ".coerce_input" do
|
83
|
+
it "accepts an object as input" do
|
84
|
+
result = schema.execute(query_str, variables: { filters: advisor_filter })
|
85
|
+
expect(result["data"]["advisor"]["validObject"]).to eql({ name: advisor.name })
|
86
|
+
end
|
87
|
+
|
88
|
+
it "raises an error when an argument is an invalid object" do
|
89
|
+
result = schema.execute(query_str, variables: { filters: advisor.name })
|
90
|
+
aggregate_failures do
|
91
|
+
expect(result["errors"].length).to eql(1)
|
92
|
+
expect(result["errors"][0]["message"]).to eql("Variable filters of type Object! was provided invalid value")
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hq-graphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Jones
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-12-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -108,7 +108,7 @@ files:
|
|
108
108
|
- lib/hq/graphql/root_query.rb
|
109
109
|
- lib/hq/graphql/scalars.rb
|
110
110
|
- lib/hq/graphql/types.rb
|
111
|
-
- lib/hq/graphql/types/
|
111
|
+
- lib/hq/graphql/types/object.rb
|
112
112
|
- lib/hq/graphql/types/uuid.rb
|
113
113
|
- lib/hq/graphql/version.rb
|
114
114
|
- spec/factories/advisors.rb
|
@@ -125,6 +125,7 @@ files:
|
|
125
125
|
- spec/lib/graphql/inputs_spec.rb
|
126
126
|
- spec/lib/graphql/object_spec.rb
|
127
127
|
- spec/lib/graphql/resource_spec.rb
|
128
|
+
- spec/lib/graphql/types/object_spec.rb
|
128
129
|
- spec/lib/graphql/types/uuid_spec.rb
|
129
130
|
- spec/lib/graphql/types_spec.rb
|
130
131
|
- spec/rails_helper.rb
|
@@ -164,6 +165,7 @@ test_files:
|
|
164
165
|
- spec/factories/organizations.rb
|
165
166
|
- spec/factories/advisors.rb
|
166
167
|
- spec/factories/users.rb
|
168
|
+
- spec/lib/graphql/types/object_spec.rb
|
167
169
|
- spec/lib/graphql/types/uuid_spec.rb
|
168
170
|
- spec/lib/graphql/active_record_extensions_spec.rb
|
169
171
|
- spec/lib/graphql/object_spec.rb
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module HQ
|
2
|
-
module GraphQL
|
3
|
-
module Types
|
4
|
-
class JSON < ::GraphQL::Schema::Scalar
|
5
|
-
description "JSON"
|
6
|
-
|
7
|
-
class << self
|
8
|
-
def coerce_input(value, context)
|
9
|
-
JSON.parse(value)
|
10
|
-
end
|
11
|
-
|
12
|
-
def coerce_result(value, context)
|
13
|
-
value
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|