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: 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