graphql-client 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6ce8ab8d4581cbfba336bb2f1c253052947ad040
4
- data.tar.gz: 0a45c9dba3059b1550130923e50f2fdcf752e27d
3
+ metadata.gz: d464e8e533865d2ee59f8e1fabd7b50ec8db9798
4
+ data.tar.gz: 450317c193095cc71f9393b45f1d7787823f0a21
5
5
  SHA512:
6
- metadata.gz: f19b3ee5ae54612406ff161a9e836daaeab1ba782cdfa73a9c1c8214837c4444b22e59ab20ecf8544967d7673b74b138c2fc3c12d08d99b48cccdf76825fd426
7
- data.tar.gz: 9c43431ba44271684e1ac352e93693bab30e3284a260125fcf829661f38c760366e58f60d1ce2f777f3e7bb43a6fba8b7f1573337c9ade87be8666677a5ac3e8
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|
@@ -26,7 +26,7 @@ module GraphQL
26
26
  case selection
27
27
  when Selection
28
28
  if shadow.include?(selection)
29
- {}
29
+ h
30
30
  else
31
31
  h.merge!(selection.selection_query_result_classes(shadow: shadow, **kargs))
32
32
  end
@@ -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
@@ -0,0 +1,10 @@
1
+ require "graphql"
2
+ require "graphql/schema/json_loader"
3
+
4
+ module GraphQL
5
+ class Schema
6
+ def self.load_json(json)
7
+ Schema::JSONLoader.define_schema(json)
8
+ end
9
+ end
10
+ 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.3
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-17 00:00:00.000000000 Z
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.17'
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.17'
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