graphql-client 0.0.3 → 0.0.4
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d464e8e533865d2ee59f8e1fabd7b50ec8db9798
|
4
|
+
data.tar.gz: 450317c193095cc71f9393b45f1d7787823f0a21
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 193a29dfa469c858309d506a021c6733b3a2c9aaa5d2e87ef483b106448391514f84f909294250a569e5efd60d34ee2033b96316674bc571d9d22b939e1a3f9c
|
7
|
+
data.tar.gz: 3cad891786c8d9e20510919945fe0a781f06c552eae0ddf155ff1da28994571430e05741b33792c3a2c16c2fff95cacaa158aba904d3bbeea8b7ced8ad6d8dc4
|
@@ -28,6 +28,16 @@ module GraphQL
|
|
28
28
|
#{field_alias} ? true : false
|
29
29
|
end
|
30
30
|
RUBY
|
31
|
+
|
32
|
+
if field == "edges"
|
33
|
+
class_eval <<-RUBY, __FILE__, __LINE__
|
34
|
+
def each_node
|
35
|
+
return enum_for(:each_node) unless block_given?
|
36
|
+
edges.each { |edge| yield edge.node }
|
37
|
+
self
|
38
|
+
end
|
39
|
+
RUBY
|
40
|
+
end
|
31
41
|
end
|
32
42
|
|
33
43
|
assigns = fields.map do |field, type|
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require "graphql"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
module GraphQL
|
5
|
+
class Schema
|
6
|
+
module JSONLoader
|
7
|
+
def self.define_schema(json)
|
8
|
+
schema = JSON.load(json).fetch("data").fetch("__schema")
|
9
|
+
types = Schema::JSONLoader.define_types(schema)
|
10
|
+
# TODO: handle schema["mutationType"]
|
11
|
+
# TODO: handle schema["subscriptionType"]
|
12
|
+
query = types.fetch(schema.fetch("queryType").fetch("name"))
|
13
|
+
Schema.new(query: query, types: types.values)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.define_types(schema)
|
17
|
+
schema.fetch("types").inject({}) do |types, type|
|
18
|
+
type_kind, type_name = type.fetch("kind"), type.fetch("name")
|
19
|
+
|
20
|
+
if !type_name.start_with?("__")
|
21
|
+
case type_kind
|
22
|
+
when "INTERFACE"
|
23
|
+
types[type_name] = define_interface(types, type)
|
24
|
+
when "OBJECT"
|
25
|
+
types[type_name] = define_object(types, type)
|
26
|
+
when "SCALAR"
|
27
|
+
types[type_name] = define_scalar(types, type)
|
28
|
+
else
|
29
|
+
# TODO: handle other type kinds
|
30
|
+
fail NotImplementedError, type_kind + " not implemented"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
types
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.resolve_type(types, type)
|
39
|
+
case kind = type.fetch("kind")
|
40
|
+
when "INTERFACE"
|
41
|
+
types.fetch(type.fetch("name"))
|
42
|
+
when "LIST"
|
43
|
+
ListType.new(of_type: resolve_type(types, type.fetch("ofType")))
|
44
|
+
when "NON_NULL"
|
45
|
+
NonNullType.new(of_type: resolve_type(types, type.fetch("ofType")))
|
46
|
+
when "OBJECT"
|
47
|
+
types.fetch(type.fetch("name"))
|
48
|
+
when "SCALAR"
|
49
|
+
types.fetch(type.fetch("name"))
|
50
|
+
else
|
51
|
+
# TODO: handle other type kinds
|
52
|
+
fail NotImplementedError, kind + " not implemented"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.define_interface(types, type)
|
57
|
+
InterfaceType.define do
|
58
|
+
name type.fetch("name")
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.define_object(types, type)
|
63
|
+
ObjectType.define do
|
64
|
+
name type.fetch("name")
|
65
|
+
description type["description"]
|
66
|
+
|
67
|
+
Array(type["fields"]).each do |field_data|
|
68
|
+
field field_data["name"] do
|
69
|
+
type JSONLoader.resolve_type(types, field_data["type"])
|
70
|
+
description field_data["description"]
|
71
|
+
field_data["args"].each do |arg|
|
72
|
+
argument arg["name"] do
|
73
|
+
type JSONLoader.resolve_type(types, arg["type"])
|
74
|
+
description arg["description"]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.define_scalar(types, type)
|
83
|
+
case name = type.fetch("name")
|
84
|
+
when "Int"
|
85
|
+
INT_TYPE
|
86
|
+
when "String"
|
87
|
+
STRING_TYPE
|
88
|
+
when "Float"
|
89
|
+
FLOAT_TYPE
|
90
|
+
when "Boolean"
|
91
|
+
BOOLEAN_TYPE
|
92
|
+
when "ID"
|
93
|
+
ID_TYPE
|
94
|
+
else
|
95
|
+
# TODO: handle other scalar names
|
96
|
+
fail NotImplementedError, name + " scalar not implemented"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitHub
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0.
|
33
|
+
version: '0.18'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0.
|
40
|
+
version: '0.18'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,6 +86,8 @@ files:
|
|
86
86
|
- lib/graphql/language/nodes/selection_ext.rb
|
87
87
|
- lib/graphql/language/nodes/validate_ext.rb
|
88
88
|
- lib/graphql/relay/node_query.rb
|
89
|
+
- lib/graphql/schema/json_loader.rb
|
90
|
+
- lib/graphql/schema_load_json.rb
|
89
91
|
homepage:
|
90
92
|
licenses:
|
91
93
|
- MIT
|