graphql-client 0.0.11 → 0.0.12

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/client.rb +83 -11
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f53cb2d3442a4294ac55b34289a1a2ef3bc6804a
4
- data.tar.gz: d3c548c975ec437f5cfde1b7bd79d1a39ae16331
3
+ metadata.gz: aea0a7a43074a4ae819e473986778336afe5bbb4
4
+ data.tar.gz: 3d20ddd2ab550d0bf819ddb456384055ce57de64
5
5
  SHA512:
6
- metadata.gz: 9615af4a5f8f1bafd5e48d2dc26930119166b11743729145a53c2d7347a71245399cf5837cc53d5963c0948c8a15ce1a95f2602c4892094e42db5ea30b8e1779
7
- data.tar.gz: 0c8a00f036cdf666351972a40e08522dd28dd0a2c12ccfd104a48863301dacdd8d374e0e548e55f3fc5faad27960e7c8ce998a95a1121c489d9e0049e15b25c8
6
+ metadata.gz: fca77d34cbe78cba96432c777204d147405640a73502473c68c250ecc5b22304a64981ade4202cbacc9b1fa46f16c0fe4517f5eafed439e826d0a3c3a9cf543f
7
+ data.tar.gz: 6031bf53f6d4b1cfc3e3e8419695325ada554f56cbec39d57976be7ce8ab5d01408c71ec6292360c7586869b23f4981e20b86cf2fae69a169a93ecca7dbfe615
@@ -9,11 +9,23 @@ module GraphQL
9
9
  class Error < StandardError; end
10
10
  class ValidationError < Error; end
11
11
 
12
- attr_reader :schema
12
+ class ResponseError < Error
13
+ def initialize(definition, error)
14
+ @request_definition = definition
15
+ @locations = error["locations"]
16
+ super error["message"]
17
+ end
18
+ end
19
+
20
+ attr_reader :schema, :fetch
21
+
22
+ attr_accessor :document_tracking_enabled
13
23
 
14
- def initialize(schema: nil)
24
+ def initialize(schema: nil, fetch: nil)
15
25
  @schema = schema
26
+ @fetch = fetch
16
27
  @document = GraphQL::Language::Nodes::Document.new(definitions: [])
28
+ @document_tracking_enabled = false
17
29
  end
18
30
 
19
31
  class Definition < Module
@@ -39,13 +51,6 @@ module GraphQL
39
51
  # Returns OperationDefinition or FragmentDefinition object.
40
52
  attr_reader :definition_node
41
53
 
42
- # Public: Ruby constant name of definition.
43
- #
44
- # Returns String or errors if definition was not assigned to a constant.
45
- def name
46
- @name ||= super || raise(RuntimeError, "definition must be assigned to a constant")
47
- end
48
-
49
54
  # Public: Global name of definition in client document.
50
55
  #
51
56
  # Returns a GraphQL safe name of the Ruby constant String.
@@ -54,7 +59,7 @@ module GraphQL
54
59
  #
55
60
  # Returns String.
56
61
  def definition_name
57
- @definition_name ||= name.gsub("::", "__").freeze
62
+ @definition_name ||= (name || "#{self.class.name}_#{object_id}").gsub("::", "__").freeze
58
63
  end
59
64
 
60
65
  # Public: Get document with only the definitions needed to perform this
@@ -140,7 +145,9 @@ module GraphQL
140
145
 
141
146
  doc.deep_freeze
142
147
 
143
- self.document.definitions.concat(doc.definitions)
148
+ if document_tracking_enabled
149
+ self.document.definitions.concat(doc.definitions)
150
+ end
144
151
 
145
152
  if definitions[nil]
146
153
  definitions[nil]
@@ -157,6 +164,71 @@ module GraphQL
157
164
  @document
158
165
  end
159
166
 
167
+ class Response
168
+ attr_reader :extensions
169
+
170
+ def initialize(extensions: nil)
171
+ @extensions = extensions || {}
172
+ end
173
+ end
174
+
175
+ class SuccessfulResponse < Response
176
+ attr_reader :data
177
+
178
+ def initialize(data:, **kargs)
179
+ @data = data
180
+ super(**kargs)
181
+ end
182
+ end
183
+
184
+ class PartialResponse < SuccessfulResponse
185
+ attr_reader :errors
186
+
187
+ def initialize(errors:, **kargs)
188
+ @errors = errors
189
+ super(**kargs)
190
+ end
191
+ end
192
+
193
+ class FailedResponse < Response
194
+ attr_reader :errors
195
+
196
+ def initialize(errors:, **kargs)
197
+ @errors = errors
198
+ super(**kargs)
199
+ end
200
+ end
201
+
202
+ def query(definition, variables: {})
203
+ unless fetch
204
+ raise Error, "client network fetching not configured"
205
+ end
206
+
207
+ document = definition.document
208
+ result = fetch.call(document, variables)
209
+ data, errors, extensions = result.values_at("data", "errors", "extensions")
210
+
211
+ if data && errors
212
+ PartialResponse.new(
213
+ data: definition.new(data),
214
+ errors: errors.map { |error| ResponseError.new(definition, error) },
215
+ extensions: extensions
216
+ )
217
+ elsif data && !errors
218
+ SuccessfulResponse.new(
219
+ data: definition.new(data),
220
+ extensions: extensions
221
+ )
222
+ elsif !data && errors
223
+ FailedResponse.new(
224
+ errors: errors.map { |error| ResponseError.new(definition, error) },
225
+ extensions: extensions
226
+ )
227
+ else
228
+ raise Error, "invalid GraphQL response, expected data or errors"
229
+ end
230
+ end
231
+
160
232
  private
161
233
  module LazyName
162
234
  def name
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.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-08 00:00:00.000000000 Z
11
+ date: 2016-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport